Browse code

Initial commit

Benjamin Roth authored on19/05/2020 21:59:44
Showing200 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,28 @@
1
+Contao Module: Swiper.js Slider
2
+====
3
+
4
+Versatile Slider with a bunch of options.
5
+
6
+This module is developed and provided by [eSales Media][1].
7
+
8
+__Author:__ Benjamin Roth [benjamin@esales-media.de]
9
+
10
+
11
+System requirements
12
+----
13
+* Contao CMS > 3.5.x
14
+
15
+
16
+Installation
17
+---- 
18
+Just copy into your system/modules/ folder and don't forget to update the database.
19
+Afterwards you will see your new Content Elements.
20
+
21
+
22
+License
23
+----
24
+LGPL-3.0+
25
+
26
+
27
+
28
+[1]: http://www.esales-media.de
0 29
\ No newline at end of file
1 30
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+<IfModule !mod_authz_core.c>
2
+  Order allow,deny
3
+  Allow from all
4
+</IfModule>
5
+<IfModule mod_authz_core.c>
6
+  Require all granted
7
+</IfModule>
0 8
\ No newline at end of file
1 9
new file mode 100644
2 10
Binary files /dev/null and b/assets/css/.sass-cache/8993f705b9ef5296eeb93dfb49a731bcaf58ac05/slick-addons.scssc differ
3 11
new file mode 100644
4 12
Binary files /dev/null and b/assets/css/.sass-cache/8993f705b9ef5296eeb93dfb49a731bcaf58ac05/swiper-custom.scssc differ
5 13
new file mode 100644
... ...
@@ -0,0 +1,51 @@
1
+.swiper-container {
2
+  overflow: hidden; }
3
+
4
+.swiper-container,
5
+.swiper-slide {
6
+  position: relative; }
7
+  .swiper-container .swiper-background,
8
+  .swiper-container .swiper-slide-image,
9
+  .swiper-slide .swiper-background,
10
+  .swiper-slide .swiper-slide-image {
11
+    position: absolute;
12
+    left: 0;
13
+    right: 0;
14
+    top: 0;
15
+    bottom: 0;
16
+    overflow: hidden; }
17
+    .swiper-container .swiper-background video,
18
+    .swiper-container .swiper-slide-image video,
19
+    .swiper-slide .swiper-background video,
20
+    .swiper-slide .swiper-slide-image video {
21
+      position: absolute;
22
+      top: 50%;
23
+      left: 50%;
24
+      -webkit-transform: translateX(-50%) translateY(-50%);
25
+      transform: translateX(-50%) translateY(-50%);
26
+      min-width: 100%;
27
+      min-height: 100%;
28
+      width: auto;
29
+      height: auto;
30
+      overflow: hidden; }
31
+  .swiper-container .slide-content,
32
+  .swiper-slide .slide-content {
33
+    position: relative; }
34
+  .swiper-container .slide-url,
35
+  .swiper-slide .slide-url {
36
+    position: absolute;
37
+    left: 0;
38
+    top: 0;
39
+    right: 0;
40
+    bottom: 0; }
41
+  .swiper-container .swiper-pagination,
42
+  .swiper-container .swiper-button-prev,
43
+  .swiper-container .swiper-button-next,
44
+  .swiper-container .swiper-scrollbar,
45
+  .swiper-slide .swiper-pagination,
46
+  .swiper-slide .swiper-button-prev,
47
+  .swiper-slide .swiper-button-next,
48
+  .swiper-slide .swiper-scrollbar {
49
+    z-index: 2; }
50
+
51
+/*# sourceMappingURL=swiper-custom.css.map */
0 52
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+{
2
+"version": 3,
3
+"mappings": "AAAA,iBAAkB;EAChB,QAAQ,EAAE,MAAM;;AAElB;aACc;EACZ,QAAQ,EAAE,QAAQ;EAElB;;;mCACoB;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,MAAM;IAEhB;;;2CAAM;MACJ,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,GAAG;MACR,IAAI,EAAE,GAAG;MACT,iBAAiB,EAAE,iCAAiC;MACpD,SAAS,EAAE,iCAAiC;MAC5C,SAAS,EAAE,IAAI;MACf,UAAU,EAAE,IAAI;MAChB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,MAAM;EAIpB;8BAAe;IACb,QAAQ,EAAE,QAAQ;EAGpB;0BAAW;IACT,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;EAGX;;;;;;;iCAGkB;IAChB,OAAO,EAAE,CAAC",
4
+"sources": ["swiper-custom.scss"],
5
+"names": [],
6
+"file": "swiper-custom.css"
7
+}
0 8
new file mode 100644
... ...
@@ -0,0 +1,49 @@
1
+.swiper-container {
2
+  overflow: hidden;
3
+}
4
+.swiper-container,
5
+.swiper-slide {
6
+  position: relative;
7
+
8
+  .swiper-background,
9
+  .swiper-slide-image {
10
+    position: absolute;
11
+    left: 0;
12
+    right: 0;
13
+    top: 0;
14
+    bottom: 0;
15
+    overflow: hidden;
16
+
17
+    video {
18
+      position: absolute;
19
+      top: 50%;
20
+      left: 50%;
21
+      -webkit-transform: translateX(-50%) translateY(-50%);
22
+      transform: translateX(-50%) translateY(-50%);
23
+      min-width: 100%;
24
+      min-height: 100%;
25
+      width: auto;
26
+      height: auto;
27
+      overflow: hidden;
28
+    }
29
+  }
30
+
31
+  .slide-content {
32
+    position: relative;
33
+  }
34
+
35
+  .slide-url {
36
+    position: absolute;
37
+    left: 0;
38
+    top: 0;
39
+    right: 0;
40
+    bottom: 0;
41
+  }
42
+
43
+  .swiper-pagination,
44
+  .swiper-button-prev,
45
+  .swiper-button-next,
46
+  .swiper-scrollbar {
47
+    z-index: 2;
48
+  }
49
+}
0 50
\ No newline at end of file
1 51
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+The MIT License (MIT)
2
+
3
+Copyright (c) 2019 Vladimir Kharlampidi
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+this software and associated documentation files (the "Software"), to deal in
7
+the Software without restriction, including without limitation the rights to
8
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+the Software, and to permit persons to whom the Software is furnished to do so,
10
+subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0 21
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+Swiper
2
+==========
3
+
4
+Swiper - is the free and most modern mobile touch slider with hardware accelerated transitions and amazing native behavior. It is intended to be used in mobile websites, mobile web apps, and mobile native/hybrid apps.
5
+
6
+Swiper is not compatible with all platforms, it is a modern touch slider which is focused only on modern apps/platforms to bring the best experience and simplicity.
7
+
8
+# Getting Started
9
+  * [Getting Started Guide](https://swiperjs.com/get-started/)
10
+  * [API](https://swiperjs.com/api/)
11
+  * [Demos](https://swiperjs.com/demos/)
0 12
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+/* a11y */
2
+.swiper-container .swiper-notification {
3
+  position: absolute;
4
+  left: 0;
5
+  top: 0;
6
+  pointer-events: none;
7
+  opacity: 0;
8
+  z-index: -1000;
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+/* a11y */
2
+.swiper-container .swiper-notification {
3
+  position: absolute;
4
+  left: 0;
5
+  top: 0;
6
+  pointer-events: none;
7
+  opacity: 0;
8
+  z-index: -1000;
9
+}
0 10
new file mode 100644
1 11
new file mode 100644
2 12
new file mode 100644
... ...
@@ -0,0 +1,111 @@
1
+:root {
2
+  --swiper-theme-color: @themeColor;
3
+}
4
+.swiper-container {
5
+  margin-left: auto;
6
+  margin-right: auto;
7
+  position: relative;
8
+  overflow: hidden;
9
+  list-style: none;
10
+  padding: 0;
11
+  /* Fix of Webkit flickering */
12
+  z-index:1;
13
+}
14
+.swiper-container-vertical > .swiper-wrapper {
15
+  flex-direction: column;
16
+}
17
+.swiper-wrapper {
18
+  position:relative;
19
+  width: 100%;
20
+  height: 100%;
21
+  z-index: 1;
22
+  display: flex;
23
+  transition-property:transform;
24
+  box-sizing: content-box;
25
+}
26
+.swiper-container-android .swiper-slide, .swiper-wrapper {
27
+  transform:translate3d(0px,0,0);
28
+}
29
+.swiper-container-multirow > .swiper-wrapper {
30
+  flex-wrap: wrap;
31
+}
32
+.swiper-container-multirow-column > .swiper-wrapper {
33
+  flex-wrap: wrap;
34
+  flex-direction: column;
35
+}
36
+.swiper-container-free-mode > .swiper-wrapper {
37
+  transition-timing-function: ease-out;
38
+  margin: 0 auto;
39
+}
40
+.swiper-slide {
41
+  flex-shrink: 0;
42
+  width: 100%;
43
+  height: 100%;
44
+  position: relative;
45
+  transition-property: transform;
46
+}
47
+.swiper-slide-invisible-blank {
48
+  visibility: hidden;
49
+}
50
+/* Auto Height */
51
+.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide {
52
+  height: auto;
53
+}
54
+.swiper-container-autoheight .swiper-wrapper {
55
+  align-items: flex-start;
56
+  transition-property: transform, height;
57
+}
58
+
59
+/* 3D Effects */
60
+.swiper-container-3d {
61
+  perspective: 1200px;
62
+  .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
63
+    transform-style: preserve-3d;
64
+  }
65
+  .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
66
+    position: absolute;
67
+    left: 0;
68
+    top: 0;
69
+    width: 100%;
70
+    height: 100%;
71
+    pointer-events: none;
72
+    z-index: 10;
73
+  }
74
+  .swiper-slide-shadow-left {
75
+    background-image: linear-gradient(to left, rgba(0,0,0,0.5), rgba(0,0,0,0));
76
+  }
77
+  .swiper-slide-shadow-right {
78
+    background-image: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0));
79
+  }
80
+  .swiper-slide-shadow-top {
81
+    background-image: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0));
82
+  }
83
+  .swiper-slide-shadow-bottom {
84
+    background-image: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
85
+  }
86
+}
87
+
88
+/* CSS Mode */
89
+.swiper-container-css-mode {
90
+  > .swiper-wrapper {
91
+    overflow: auto;
92
+    scrollbar-width: none; /* For Firefox */
93
+    -ms-overflow-style: none; /* For Internet Explorer and Edge */
94
+    &::-webkit-scrollbar {
95
+      display: none;
96
+    }
97
+  }
98
+  > .swiper-wrapper > .swiper-slide {
99
+    scroll-snap-align: start start;
100
+  }
101
+}
102
+.swiper-container-horizontal.swiper-container-css-mode {
103
+  > .swiper-wrapper {
104
+    scroll-snap-type: x mandatory;
105
+  }
106
+}
107
+.swiper-container-vertical.swiper-container-css-mode {
108
+  > .swiper-wrapper {
109
+    scroll-snap-type: y mandatory;
110
+  }
111
+}
0 112
new file mode 100644
... ...
@@ -0,0 +1,115 @@
1
+:root {
2
+  --swiper-theme-color: #{$themeColor};
3
+}
4
+.swiper-container {
5
+  margin-left: auto;
6
+  margin-right: auto;
7
+  position: relative;
8
+  overflow: hidden;
9
+  list-style: none;
10
+  padding: 0;
11
+  /* Fix of Webkit flickering */
12
+  z-index:1;
13
+}
14
+.swiper-container-vertical > .swiper-wrapper {
15
+  flex-direction: column;
16
+}
17
+.swiper-wrapper {
18
+  position:relative;
19
+  width: 100%;
20
+  height: 100%;
21
+  z-index: 1;
22
+  display: flex;
23
+  transition-property:transform;
24
+  box-sizing: content-box;
25
+}
26
+.swiper-container-android .swiper-slide,
27
+.swiper-wrapper {
28
+  transform:translate3d(0px,0,0);
29
+}
30
+.swiper-container-multirow > .swiper-wrapper {
31
+  flex-wrap: wrap;
32
+}
33
+.swiper-container-multirow-column > .swiper-wrapper {
34
+  flex-wrap: wrap;
35
+  flex-direction: column;
36
+}
37
+.swiper-container-free-mode > .swiper-wrapper {
38
+  transition-timing-function: ease-out;
39
+  margin: 0 auto;
40
+}
41
+.swiper-slide {
42
+  flex-shrink: 0;
43
+  width: 100%;
44
+  height: 100%;
45
+  position: relative;
46
+  transition-property: transform;
47
+}
48
+.swiper-slide-invisible-blank {
49
+  visibility: hidden;
50
+}
51
+/* Auto Height */
52
+.swiper-container-autoheight {
53
+  &, .swiper-slide {
54
+    height: auto;
55
+  }
56
+
57
+  .swiper-wrapper {
58
+    align-items: flex-start;
59
+    transition-property: transform, height;
60
+  }
61
+}
62
+
63
+/* 3D Effects */
64
+.swiper-container-3d {
65
+  perspective: 1200px;
66
+  .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
67
+    transform-style: preserve-3d;
68
+  }
69
+  .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
70
+    position: absolute;
71
+    left: 0;
72
+    top: 0;
73
+    width: 100%;
74
+    height: 100%;
75
+    pointer-events: none;
76
+    z-index: 10;
77
+  }
78
+  .swiper-slide-shadow-left {
79
+    background-image: linear-gradient(to left, rgba(0,0,0,0.5), rgba(0,0,0,0));
80
+  }
81
+  .swiper-slide-shadow-right {
82
+    background-image: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0));
83
+  }
84
+  .swiper-slide-shadow-top {
85
+    background-image: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0));
86
+  }
87
+  .swiper-slide-shadow-bottom {
88
+    background-image: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
89
+  }
90
+}
91
+
92
+/* CSS Mode */
93
+.swiper-container-css-mode {
94
+  > .swiper-wrapper {
95
+    overflow: auto;
96
+    scrollbar-width: none; /* For Firefox */
97
+    -ms-overflow-style: none; /* For Internet Explorer and Edge */
98
+    &::-webkit-scrollbar {
99
+      display: none;
100
+    }
101
+  }
102
+  > .swiper-wrapper > .swiper-slide {
103
+    scroll-snap-align: start start;
104
+  }
105
+}
106
+.swiper-container-horizontal.swiper-container-css-mode {
107
+  > .swiper-wrapper {
108
+    scroll-snap-type: x mandatory;
109
+  }
110
+}
111
+.swiper-container-vertical.swiper-container-css-mode {
112
+  > .swiper-wrapper {
113
+    scroll-snap-type: y mandatory;
114
+  }
115
+}
0 116
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+.swiper-container-coverflow {}
0 2
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+.swiper-container-coverflow {}
0 2
new file mode 100644
... ...
@@ -0,0 +1,43 @@
1
+.swiper-container-cube {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    visibility: hidden;
8
+    transform-origin: 0 0;
9
+    width: 100%;
10
+    height: 100%;
11
+    .swiper-slide {
12
+      pointer-events: none;
13
+    }
14
+  }
15
+  &.swiper-container-rtl .swiper-slide {
16
+    transform-origin: 100% 0;
17
+  }
18
+  .swiper-slide-active {
19
+    &, & .swiper-slide-active {
20
+      pointer-events: auto;
21
+    }
22
+  }
23
+  .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
24
+    pointer-events: auto;
25
+    visibility: visible;
26
+  }
27
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
28
+    z-index: 0;
29
+    backface-visibility: hidden;
30
+  }
31
+  .swiper-cube-shadow {
32
+    position: absolute;
33
+    left: 0;
34
+    bottom: 0px;
35
+    width: 100%;
36
+    height: 100%;
37
+    background: #000;
38
+    opacity: 0.6;
39
+    -webkit-filter: blur(50px);
40
+    filter: blur(50px);
41
+    z-index: 0;
42
+  }
43
+}
0 44
new file mode 100644
... ...
@@ -0,0 +1,43 @@
1
+.swiper-container-cube {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    visibility: hidden;
8
+    transform-origin: 0 0;
9
+    width: 100%;
10
+    height: 100%;
11
+    .swiper-slide {
12
+      pointer-events: none;
13
+    }
14
+  }
15
+  &.swiper-container-rtl .swiper-slide {
16
+    transform-origin: 100% 0;
17
+  }
18
+  .swiper-slide-active {
19
+    &, & .swiper-slide-active {
20
+      pointer-events: auto;
21
+    }
22
+  }
23
+  .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
24
+    pointer-events: auto;
25
+    visibility: visible;
26
+  }
27
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
28
+    z-index: 0;
29
+    backface-visibility: hidden;
30
+  }
31
+  .swiper-cube-shadow {
32
+    position: absolute;
33
+    left: 0;
34
+    bottom: 0px;
35
+    width: 100%;
36
+    height: 100%;
37
+    background: #000;
38
+    opacity: 0.6;
39
+    -webkit-filter: blur(50px);
40
+    filter: blur(50px);
41
+    z-index: 0;
42
+  }
43
+}
0 44
new file mode 100644
... ...
@@ -0,0 +1,19 @@
1
+.swiper-container-fade {
2
+  &.swiper-container-free-mode {
3
+    .swiper-slide {
4
+      transition-timing-function: ease-out;
5
+    }
6
+  }
7
+  .swiper-slide {
8
+    pointer-events: none;
9
+    transition-property: opacity;
10
+    .swiper-slide {
11
+      pointer-events: none;
12
+    }
13
+  }
14
+  .swiper-slide-active {
15
+    &, & .swiper-slide-active {
16
+      pointer-events: auto;
17
+    }
18
+  }
19
+}
0 20
new file mode 100644
... ...
@@ -0,0 +1,19 @@
1
+.swiper-container-fade {
2
+  &.swiper-container-free-mode {
3
+    .swiper-slide {
4
+      transition-timing-function: ease-out;
5
+    }
6
+  }
7
+  .swiper-slide {
8
+    pointer-events: none;
9
+    transition-property: opacity;
10
+    .swiper-slide {
11
+      pointer-events: none;
12
+    }
13
+  }
14
+  .swiper-slide-active {
15
+    &, & .swiper-slide-active {
16
+      pointer-events: auto;
17
+    }
18
+  }
19
+}
0 20
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+.swiper-container-flip {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    .swiper-slide {
8
+      pointer-events: none;
9
+    }
10
+  }
11
+  .swiper-slide-active {
12
+    &, & .swiper-slide-active {
13
+      pointer-events: auto;
14
+    }
15
+  }
16
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
17
+    z-index: 0;
18
+    backface-visibility: hidden;
19
+  }
20
+}
0 21
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+.swiper-container-flip {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    .swiper-slide {
8
+      pointer-events: none;
9
+    }
10
+  }
11
+  .swiper-slide-active {
12
+    &, & .swiper-slide-active {
13
+      pointer-events: auto;
14
+    }
15
+  }
16
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
17
+    z-index: 0;
18
+    backface-visibility: hidden;
19
+  }
20
+}
0 21
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+/* Preloader */
2
+:root {
3
+  /*
4
+  --swiper-preloader-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-lazy-preloader {
8
+  width: 42px;
9
+  height: 42px;
10
+  position: absolute;
11
+  left: 50%;
12
+  top: 50%;
13
+  margin-left: -21px;
14
+  margin-top: -21px;
15
+  z-index: 10;
16
+  transform-origin: 50%;
17
+  animation: swiper-preloader-spin 1s infinite linear;
18
+  box-sizing: border-box;
19
+  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
20
+  border-radius: 50%;
21
+  border-top-color: transparent;
22
+}
23
+
24
+.swiper-lazy-preloader-white {
25
+  --swiper-preloader-color: #fff;
26
+}
27
+.swiper-lazy-preloader-black {
28
+  --swiper-preloader-color: #000;
29
+}
30
+@keyframes swiper-preloader-spin {
31
+  100% {
32
+    transform: rotate(360deg);
33
+  }
34
+}
0 35
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+/* Preloader */
2
+:root {
3
+  /*
4
+  --swiper-preloader-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-lazy-preloader {
8
+  width: 42px;
9
+  height: 42px;
10
+  position: absolute;
11
+  left: 50%;
12
+  top: 50%;
13
+  margin-left: -21px;
14
+  margin-top: -21px;
15
+  z-index: 10;
16
+  transform-origin: 50%;
17
+  animation: swiper-preloader-spin 1s infinite linear;
18
+  box-sizing: border-box;
19
+  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
20
+  border-radius: 50%;
21
+  border-top-color: transparent;
22
+}
23
+
24
+.swiper-lazy-preloader-white {
25
+  --swiper-preloader-color: #fff;
26
+}
27
+.swiper-lazy-preloader-black {
28
+  --swiper-preloader-color: #000;
29
+}
30
+@keyframes swiper-preloader-spin {
31
+  100% {
32
+    transform: rotate(360deg);
33
+  }
34
+}
0 35
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+:root {
2
+  --swiper-navigation-size: 44px;
3
+  /*
4
+  --swiper-navigation-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-button-prev, .swiper-button-next {
8
+  position: absolute;
9
+  top: 50%;
10
+  width: calc(var(--swiper-navigation-size) / 44 * 27);
11
+  height: var(--swiper-navigation-size);
12
+  margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
13
+  z-index: 10;
14
+  cursor: pointer;
15
+  display: flex;
16
+  align-items: center;
17
+  justify-content: center;
18
+  color: var(--swiper-navigation-color, var(--swiper-theme-color));
19
+  &.swiper-button-disabled {
20
+    opacity: 0.35;
21
+    cursor: auto;
22
+    pointer-events: none;
23
+  }
24
+  &:after {
25
+    font-family: swiper-icons;
26
+    font-size: var(--swiper-navigation-size);
27
+    text-transform: none !important;
28
+    letter-spacing: 0;
29
+    text-transform: none;
30
+    font-variant: initial;
31
+    line-height: 1;
32
+  }
33
+}
34
+.swiper-button-prev,
35
+.swiper-container-rtl .swiper-button-next {
36
+  &:after {
37
+    content: 'prev';
38
+  }
39
+  left: 10px;
40
+  right: auto;
41
+}
42
+.swiper-button-next,
43
+.swiper-container-rtl .swiper-button-prev {
44
+  &:after {
45
+    content: 'next';
46
+  }
47
+  right: 10px;
48
+  left: auto;
49
+}
50
+.navigation-color-loop({
51
+  .swiper-button-prev,
52
+  .swiper-button-next {
53
+    &.swiper-button-@{navColorName} {
54
+      --swiper-navigation-color: @navColorValue;
55
+    }
56
+  }
57
+});
58
+.swiper-button-lock {
59
+  display: none;
60
+}
0 61
new file mode 100644
... ...
@@ -0,0 +1,61 @@
1
+:root {
2
+  --swiper-navigation-size: 44px;
3
+  /*
4
+  --swiper-navigation-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-button-prev, .swiper-button-next {
8
+  position: absolute;
9
+  top: 50%;
10
+  width: calc(var(--swiper-navigation-size) / 44 * 27);
11
+  height: var(--swiper-navigation-size);
12
+  margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
13
+  z-index: 10;
14
+  cursor: pointer;
15
+  display: flex;
16
+  align-items: center;
17
+  justify-content: center;
18
+  color: var(--swiper-navigation-color, var(--swiper-theme-color));
19
+  &.swiper-button-disabled {
20
+    opacity: 0.35;
21
+    cursor: auto;
22
+    pointer-events: none;
23
+  }
24
+  &:after {
25
+    font-family: swiper-icons;
26
+    font-size: var(--swiper-navigation-size);
27
+    text-transform: none !important;
28
+    letter-spacing: 0;
29
+    text-transform: none;
30
+    font-variant: initial;
31
+    line-height: 1;
32
+  }
33
+}
34
+.swiper-button-prev,
35
+.swiper-container-rtl .swiper-button-next {
36
+  &:after {
37
+    content: 'prev';
38
+  }
39
+  left: 10px;
40
+  right: auto;
41
+}
42
+.swiper-button-next,
43
+.swiper-container-rtl .swiper-button-prev {
44
+  &:after {
45
+    content: 'next';
46
+  }
47
+  right: 10px;
48
+  left: auto;
49
+}
50
+
51
+@each $navColorName, $navColorValue in $colors {
52
+  .swiper-button-prev,
53
+  .swiper-button-next {
54
+    &.swiper-button-#{$navColorName} {
55
+      --swiper-navigation-color: #{$navColorValue};
56
+    }
57
+  }
58
+}
59
+.swiper-button-lock {
60
+  display: none;
61
+}
0 62
new file mode 100644
... ...
@@ -0,0 +1,149 @@
1
+:root {
2
+  /*
3
+  --swiper-pagination-color: var(--swiper-theme-color);
4
+  */
5
+}
6
+.swiper-pagination {
7
+  position: absolute;
8
+  text-align: center;
9
+  transition: 300ms opacity;
10
+  transform: translate3d(0,0,0);
11
+  z-index: 10;
12
+  &.swiper-pagination-hidden {
13
+    opacity: 0;
14
+  }
15
+}
16
+/* Common Styles */
17
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
18
+  bottom: 10px;
19
+  left: 0;
20
+  width: 100%;
21
+}
22
+/* Bullets */
23
+.swiper-pagination-bullets-dynamic {
24
+  overflow: hidden;
25
+  font-size: 0;
26
+  .swiper-pagination-bullet {
27
+    transform: scale(0.33);
28
+    position: relative;
29
+  }
30
+  .swiper-pagination-bullet-active {
31
+    transform: scale(1);
32
+  }
33
+  .swiper-pagination-bullet-active-main {
34
+    transform: scale(1);
35
+  }
36
+  .swiper-pagination-bullet-active-prev {
37
+    transform: scale(0.66);
38
+  }
39
+  .swiper-pagination-bullet-active-prev-prev {
40
+    transform: scale(0.33);
41
+  }
42
+  .swiper-pagination-bullet-active-next {
43
+    transform: scale(0.66);
44
+  }
45
+  .swiper-pagination-bullet-active-next-next {
46
+    transform: scale(0.33);
47
+  }
48
+}
49
+.swiper-pagination-bullet {
50
+  width: 8px;
51
+  height: 8px;
52
+  display: inline-block;
53
+  border-radius: 100%;
54
+  background: #000;
55
+  opacity: 0.2;
56
+  button& {
57
+    border: none;
58
+    margin: 0;
59
+    padding: 0;
60
+    box-shadow: none;
61
+    appearance: none;
62
+  }
63
+  .swiper-pagination-clickable & {
64
+    cursor: pointer;
65
+  }
66
+}
67
+.swiper-pagination-bullet-active {
68
+  opacity: 1;
69
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
70
+}
71
+
72
+.swiper-container-vertical {
73
+  > .swiper-pagination-bullets {
74
+    right: 10px;
75
+    top: 50%;
76
+    transform:translate3d(0px,-50%,0);
77
+    .swiper-pagination-bullet {
78
+      margin: 6px 0;
79
+      display: block;
80
+    }
81
+    &.swiper-pagination-bullets-dynamic {
82
+      top: 50%;
83
+      transform: translateY(-50%);
84
+      width: 8px;
85
+      .swiper-pagination-bullet {
86
+        display: inline-block;
87
+        transition: 200ms transform, 200ms top;
88
+      }
89
+    }
90
+  }
91
+}
92
+.swiper-container-horizontal {
93
+  > .swiper-pagination-bullets {
94
+    .swiper-pagination-bullet {
95
+      margin: 0 4px;
96
+    }
97
+    &.swiper-pagination-bullets-dynamic {
98
+      left: 50%;
99
+      transform: translateX(-50%);
100
+      white-space: nowrap;
101
+      .swiper-pagination-bullet {
102
+        transition: 200ms transform, 200ms left;
103
+      }
104
+    }
105
+  }
106
+  &.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
107
+    transition: 200ms transform, 200ms right;
108
+  }
109
+}
110
+/* Progress */
111
+.swiper-pagination-progressbar {
112
+  background: rgba(0,0,0,0.25);
113
+  position: absolute;
114
+  .swiper-pagination-progressbar-fill {
115
+    background: var(--swiper-pagination-color, var(--swiper-theme-color));
116
+    position: absolute;
117
+    left: 0;
118
+    top: 0;
119
+    width: 100%;
120
+    height: 100%;
121
+    transform: scale(0);
122
+    transform-origin: left top;
123
+  }
124
+  .swiper-container-rtl & .swiper-pagination-progressbar-fill {
125
+    transform-origin: right top;
126
+  }
127
+  .swiper-container-horizontal > &,
128
+  .swiper-container-vertical > &.swiper-pagination-progressbar-opposite {
129
+    width: 100%;
130
+    height: 4px;
131
+    left: 0;
132
+    top: 0;
133
+  }
134
+  .swiper-container-vertical > &,
135
+  .swiper-container-horizontal > &.swiper-pagination-progressbar-opposite {
136
+    width: 4px;
137
+    height: 100%;
138
+    left: 0;
139
+    top: 0;
140
+  }
141
+}
142
+.pagination-color-loop({
143
+  .swiper-pagination-@{paginationColorName} {
144
+    --swiper-pagination-color: @paginationColorValue;
145
+  }
146
+});
147
+.swiper-pagination-lock {
148
+  display: none;
149
+}
0 150
new file mode 100644
... ...
@@ -0,0 +1,149 @@
1
+:root {
2
+  /*
3
+  --swiper-pagination-color: var(--swiper-theme-color);
4
+  */
5
+}
6
+.swiper-pagination {
7
+  position: absolute;
8
+  text-align: center;
9
+  transition: 300ms opacity;
10
+  transform: translate3d(0,0,0);
11
+  z-index: 10;
12
+  &.swiper-pagination-hidden {
13
+    opacity: 0;
14
+  }
15
+}
16
+/* Common Styles */
17
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
18
+  bottom: 10px;
19
+  left: 0;
20
+  width: 100%;
21
+}
22
+/* Bullets */
23
+.swiper-pagination-bullets-dynamic {
24
+  overflow: hidden;
25
+  font-size: 0;
26
+  .swiper-pagination-bullet {
27
+    transform: scale(0.33);
28
+    position: relative;
29
+  }
30
+  .swiper-pagination-bullet-active {
31
+    transform: scale(1);
32
+  }
33
+  .swiper-pagination-bullet-active-main {
34
+    transform: scale(1);
35
+  }
36
+  .swiper-pagination-bullet-active-prev {
37
+    transform: scale(0.66);
38
+  }
39
+  .swiper-pagination-bullet-active-prev-prev {
40
+    transform: scale(0.33);
41
+  }
42
+  .swiper-pagination-bullet-active-next {
43
+    transform: scale(0.66);
44
+  }
45
+  .swiper-pagination-bullet-active-next-next {
46
+    transform: scale(0.33);
47
+  }
48
+}
49
+.swiper-pagination-bullet {
50
+  width: 8px;
51
+  height: 8px;
52
+  display: inline-block;
53
+  border-radius: 100%;
54
+  background: #000;
55
+  opacity: 0.2;
56
+  @at-root button#{&} {
57
+    border: none;
58
+    margin: 0;
59
+    padding: 0;
60
+    box-shadow: none;
61
+    appearance: none;
62
+  }
63
+  .swiper-pagination-clickable & {
64
+    cursor: pointer;
65
+  }
66
+}
67
+.swiper-pagination-bullet-active {
68
+  opacity: 1;
69
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
70
+}
71
+
72
+.swiper-container-vertical {
73
+  > .swiper-pagination-bullets {
74
+    right: 10px;
75
+    top: 50%;
76
+    transform:translate3d(0px,-50%,0);
77
+    .swiper-pagination-bullet {
78
+      margin: 6px 0;
79
+      display: block;
80
+    }
81
+    &.swiper-pagination-bullets-dynamic {
82
+      top: 50%;
83
+      transform: translateY(-50%);
84
+      width: 8px;
85
+      .swiper-pagination-bullet {
86
+        display: inline-block;
87
+        transition: 200ms transform, 200ms top;
88
+      }
89
+    }
90
+  }
91
+}
92
+.swiper-container-horizontal {
93
+  > .swiper-pagination-bullets {
94
+    .swiper-pagination-bullet {
95
+      margin: 0 4px;
96
+    }
97
+    &.swiper-pagination-bullets-dynamic {
98
+      left: 50%;
99
+      transform: translateX(-50%);
100
+      white-space: nowrap;
101
+      .swiper-pagination-bullet {
102
+        transition: 200ms transform, 200ms left;
103
+      }
104
+    }
105
+  }
106
+  &.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
107
+    transition: 200ms transform, 200ms right;
108
+  }
109
+}
110
+/* Progress */
111
+.swiper-pagination-progressbar {
112
+  background: rgba(0,0,0,0.25);
113
+  position: absolute;
114
+  .swiper-pagination-progressbar-fill {
115
+    background: var(--swiper-pagination-color, var(--swiper-theme-color));
116
+    position: absolute;
117
+    left: 0;
118
+    top: 0;
119
+    width: 100%;
120
+    height: 100%;
121
+    transform: scale(0);
122
+    transform-origin: left top;
123
+  }
124
+  .swiper-container-rtl & .swiper-pagination-progressbar-fill {
125
+    transform-origin: right top;
126
+  }
127
+  .swiper-container-horizontal > &,
128
+  .swiper-container-vertical > &.swiper-pagination-progressbar-opposite {
129
+    width: 100%;
130
+    height: 4px;
131
+    left: 0;
132
+    top: 0;
133
+  }
134
+  .swiper-container-vertical > &,
135
+  .swiper-container-horizontal > &.swiper-pagination-progressbar-opposite {
136
+    width: 4px;
137
+    height: 100%;
138
+    left: 0;
139
+    top: 0;
140
+  }
141
+}
142
+@each $paginationColorName, $paginationColorValue in $colors {
143
+  .swiper-pagination-#{$paginationColorName} {
144
+    --swiper-pagination-color: #{$paginationColorValue};
145
+  }
146
+}
147
+.swiper-pagination-lock {
148
+  display: none;
149
+}
0 150
new file mode 100644
... ...
@@ -0,0 +1,38 @@
1
+/* Scrollbar */
2
+.swiper-scrollbar {
3
+  border-radius: 10px;
4
+  position: relative;
5
+  -ms-touch-action: none;
6
+  background: rgba(0,0,0,0.1);
7
+  .swiper-container-horizontal > & {
8
+    position: absolute;
9
+    left: 1%;
10
+    bottom: 3px;
11
+    z-index: 50;
12
+    height: 5px;
13
+    width: 98%;
14
+  }
15
+  .swiper-container-vertical > & {
16
+    position: absolute;
17
+    right: 3px;
18
+    top: 1%;
19
+    z-index: 50;
20
+    width: 5px;
21
+    height: 98%;
22
+  }
23
+}
24
+.swiper-scrollbar-drag {
25
+  height: 100%;
26
+  width: 100%;
27
+  position: relative;
28
+  background: rgba(0,0,0,0.5);
29
+  border-radius: 10px;
30
+  left: 0;
31
+  top: 0;
32
+}
33
+.swiper-scrollbar-cursor-drag {
34
+  cursor: move;
35
+}
36
+.swiper-scrollbar-lock {
37
+  display: none;
38
+}
0 39
\ No newline at end of file
1 40
new file mode 100644
... ...
@@ -0,0 +1,38 @@
1
+/* Scrollbar */
2
+.swiper-scrollbar {
3
+  border-radius: 10px;
4
+  position: relative;
5
+  -ms-touch-action: none;
6
+  background: rgba(0,0,0,0.1);
7
+  .swiper-container-horizontal > & {
8
+    position: absolute;
9
+    left: 1%;
10
+    bottom: 3px;
11
+    z-index: 50;
12
+    height: 5px;
13
+    width: 98%;
14
+  }
15
+  .swiper-container-vertical > & {
16
+    position: absolute;
17
+    right: 3px;
18
+    top: 1%;
19
+    z-index: 50;
20
+    width: 5px;
21
+    height: 98%;
22
+  }
23
+}
24
+.swiper-scrollbar-drag {
25
+  height: 100%;
26
+  width: 100%;
27
+  position: relative;
28
+  background: rgba(0,0,0,0.5);
29
+  border-radius: 10px;
30
+  left: 0;
31
+  top: 0;
32
+}
33
+.swiper-scrollbar-cursor-drag {
34
+  cursor: move;
35
+}
36
+.swiper-scrollbar-lock {
37
+  display: none;
38
+}
0 39
\ No newline at end of file
1 40
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+.swiper-container-thumbs {
2
+  .swiper-slide-thumb-active {
3
+    // Styles for active thumb slide
4
+  }
5
+}
0 6
\ No newline at end of file
1 7
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+.swiper-container-thumbs {
2
+  .swiper-slide-thumb-active {
3
+    // Styles for active thumb slide
4
+  }
5
+}
0 6
\ No newline at end of file
1 7
new file mode 100644
... ...
@@ -0,0 +1,18 @@
1
+.swiper-zoom-container {
2
+  width: 100%;
3
+  height: 100%;
4
+  display: flex;
5
+  justify-content: center;
6
+  align-items: center;
7
+  text-align: center;
8
+
9
+  > img, > svg, > canvas {
10
+    max-width: 100%;
11
+    max-height: 100%;
12
+    object-fit: contain;
13
+  }
14
+}
15
+
16
+.swiper-slide-zoomed {
17
+  cursor: move;
18
+}
0 19
new file mode 100644
... ...
@@ -0,0 +1,18 @@
1
+.swiper-zoom-container {
2
+  width: 100%;
3
+  height: 100%;
4
+  display: flex;
5
+  justify-content: center;
6
+  align-items: center;
7
+  text-align: center;
8
+
9
+  > img, > svg, > canvas {
10
+    max-width: 100%;
11
+    max-height: 100%;
12
+    object-fit: contain;
13
+  }
14
+}
15
+
16
+.swiper-slide-zoomed {
17
+  cursor: move;
18
+}
0 19
new file mode 100644
... ...
@@ -0,0 +1,532 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+@font-face {
14
+  font-family: 'swiper-icons';
15
+  src: url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA") format("woff");
16
+  font-weight: 400;
17
+  font-style: normal;
18
+}
19
+:root {
20
+  --swiper-theme-color: #007aff;
21
+}
22
+.swiper-container {
23
+  margin-left: auto;
24
+  margin-right: auto;
25
+  position: relative;
26
+  overflow: hidden;
27
+  list-style: none;
28
+  padding: 0;
29
+  /* Fix of Webkit flickering */
30
+  z-index: 1;
31
+}
32
+.swiper-container-vertical > .swiper-wrapper {
33
+  flex-direction: column;
34
+}
35
+.swiper-wrapper {
36
+  position: relative;
37
+  width: 100%;
38
+  height: 100%;
39
+  z-index: 1;
40
+  display: flex;
41
+  transition-property: transform;
42
+  box-sizing: content-box;
43
+}
44
+.swiper-container-android .swiper-slide,
45
+.swiper-wrapper {
46
+  transform: translate3d(0px, 0, 0);
47
+}
48
+.swiper-container-multirow > .swiper-wrapper {
49
+  flex-wrap: wrap;
50
+}
51
+.swiper-container-multirow-column > .swiper-wrapper {
52
+  flex-wrap: wrap;
53
+  flex-direction: column;
54
+}
55
+.swiper-container-free-mode > .swiper-wrapper {
56
+  transition-timing-function: ease-out;
57
+  margin: 0 auto;
58
+}
59
+.swiper-slide {
60
+  flex-shrink: 0;
61
+  width: 100%;
62
+  height: 100%;
63
+  position: relative;
64
+  transition-property: transform;
65
+}
66
+.swiper-slide-invisible-blank {
67
+  visibility: hidden;
68
+}
69
+/* Auto Height */
70
+.swiper-container-autoheight,
71
+.swiper-container-autoheight .swiper-slide {
72
+  height: auto;
73
+}
74
+.swiper-container-autoheight .swiper-wrapper {
75
+  align-items: flex-start;
76
+  transition-property: transform, height;
77
+}
78
+/* 3D Effects */
79
+.swiper-container-3d {
80
+  perspective: 1200px;
81
+}
82
+.swiper-container-3d .swiper-wrapper,
83
+.swiper-container-3d .swiper-slide,
84
+.swiper-container-3d .swiper-slide-shadow-left,
85
+.swiper-container-3d .swiper-slide-shadow-right,
86
+.swiper-container-3d .swiper-slide-shadow-top,
87
+.swiper-container-3d .swiper-slide-shadow-bottom,
88
+.swiper-container-3d .swiper-cube-shadow {
89
+  transform-style: preserve-3d;
90
+}
91
+.swiper-container-3d .swiper-slide-shadow-left,
92
+.swiper-container-3d .swiper-slide-shadow-right,
93
+.swiper-container-3d .swiper-slide-shadow-top,
94
+.swiper-container-3d .swiper-slide-shadow-bottom {
95
+  position: absolute;
96
+  left: 0;
97
+  top: 0;
98
+  width: 100%;
99
+  height: 100%;
100
+  pointer-events: none;
101
+  z-index: 10;
102
+}
103
+.swiper-container-3d .swiper-slide-shadow-left {
104
+  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
105
+}
106
+.swiper-container-3d .swiper-slide-shadow-right {
107
+  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
108
+}
109
+.swiper-container-3d .swiper-slide-shadow-top {
110
+  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
111
+}
112
+.swiper-container-3d .swiper-slide-shadow-bottom {
113
+  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
114
+}
115
+/* CSS Mode */
116
+.swiper-container-css-mode > .swiper-wrapper {
117
+  overflow: auto;
118
+  scrollbar-width: none;
119
+  /* For Firefox */
120
+  -ms-overflow-style: none;
121
+  /* For Internet Explorer and Edge */
122
+}
123
+.swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar {
124
+  display: none;
125
+}
126
+.swiper-container-css-mode > .swiper-wrapper > .swiper-slide {
127
+  scroll-snap-align: start start;
128
+}
129
+.swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper {
130
+  scroll-snap-type: x mandatory;
131
+}
132
+.swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper {
133
+  scroll-snap-type: y mandatory;
134
+}
135
+:root {
136
+  --swiper-navigation-size: 44px;
137
+  /*
138
+  --swiper-navigation-color: var(--swiper-theme-color);
139
+  */
140
+}
141
+.swiper-button-prev,
142
+.swiper-button-next {
143
+  position: absolute;
144
+  top: 50%;
145
+  width: calc(var(--swiper-navigation-size) / 44 * 27);
146
+  height: var(--swiper-navigation-size);
147
+  margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
148
+  z-index: 10;
149
+  cursor: pointer;
150
+  display: flex;
151
+  align-items: center;
152
+  justify-content: center;
153
+  color: var(--swiper-navigation-color, var(--swiper-theme-color));
154
+}
155
+.swiper-button-prev.swiper-button-disabled,
156
+.swiper-button-next.swiper-button-disabled {
157
+  opacity: 0.35;
158
+  cursor: auto;
159
+  pointer-events: none;
160
+}
161
+.swiper-button-prev:after,
162
+.swiper-button-next:after {
163
+  font-family: swiper-icons;
164
+  font-size: var(--swiper-navigation-size);
165
+  text-transform: none !important;
166
+  letter-spacing: 0;
167
+  text-transform: none;
168
+  font-variant: initial;
169
+  line-height: 1;
170
+}
171
+.swiper-button-prev,
172
+.swiper-container-rtl .swiper-button-next {
173
+  left: 10px;
174
+  right: auto;
175
+}
176
+.swiper-button-prev:after,
177
+.swiper-container-rtl .swiper-button-next:after {
178
+  content: 'prev';
179
+}
180
+.swiper-button-next,
181
+.swiper-container-rtl .swiper-button-prev {
182
+  right: 10px;
183
+  left: auto;
184
+}
185
+.swiper-button-next:after,
186
+.swiper-container-rtl .swiper-button-prev:after {
187
+  content: 'next';
188
+}
189
+.swiper-button-prev.swiper-button-white,
190
+.swiper-button-next.swiper-button-white {
191
+  --swiper-navigation-color: #ffffff;
192
+}
193
+.swiper-button-prev.swiper-button-black,
194
+.swiper-button-next.swiper-button-black {
195
+  --swiper-navigation-color: #000000;
196
+}
197
+.swiper-button-lock {
198
+  display: none;
199
+}
200
+:root {
201
+  /*
202
+  --swiper-pagination-color: var(--swiper-theme-color);
203
+  */
204
+}
205
+.swiper-pagination {
206
+  position: absolute;
207
+  text-align: center;
208
+  transition: 300ms opacity;
209
+  transform: translate3d(0, 0, 0);
210
+  z-index: 10;
211
+}
212
+.swiper-pagination.swiper-pagination-hidden {
213
+  opacity: 0;
214
+}
215
+/* Common Styles */
216
+.swiper-pagination-fraction,
217
+.swiper-pagination-custom,
218
+.swiper-container-horizontal > .swiper-pagination-bullets {
219
+  bottom: 10px;
220
+  left: 0;
221
+  width: 100%;
222
+}
223
+/* Bullets */
224
+.swiper-pagination-bullets-dynamic {
225
+  overflow: hidden;
226
+  font-size: 0;
227
+}
228
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
229
+  transform: scale(0.33);
230
+  position: relative;
231
+}
232
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
233
+  transform: scale(1);
234
+}
235
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
236
+  transform: scale(1);
237
+}
238
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
239
+  transform: scale(0.66);
240
+}
241
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
242
+  transform: scale(0.33);
243
+}
244
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
245
+  transform: scale(0.66);
246
+}
247
+.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
248
+  transform: scale(0.33);
249
+}
250
+.swiper-pagination-bullet {
251
+  width: 8px;
252
+  height: 8px;
253
+  display: inline-block;
254
+  border-radius: 100%;
255
+  background: #000;
256
+  opacity: 0.2;
257
+}
258
+button.swiper-pagination-bullet {
259
+  border: none;
260
+  margin: 0;
261
+  padding: 0;
262
+  box-shadow: none;
263
+  -webkit-appearance: none;
264
+     -moz-appearance: none;
265
+          appearance: none;
266
+}
267
+.swiper-pagination-clickable .swiper-pagination-bullet {
268
+  cursor: pointer;
269
+}
270
+.swiper-pagination-bullet-active {
271
+  opacity: 1;
272
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
273
+}
274
+.swiper-container-vertical > .swiper-pagination-bullets {
275
+  right: 10px;
276
+  top: 50%;
277
+  transform: translate3d(0px, -50%, 0);
278
+}
279
+.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
280
+  margin: 6px 0;
281
+  display: block;
282
+}
283
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
284
+  top: 50%;
285
+  transform: translateY(-50%);
286
+  width: 8px;
287
+}
288
+.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
289
+  display: inline-block;
290
+  transition: 200ms transform, 200ms top;
291
+}
292
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
293
+  margin: 0 4px;
294
+}
295
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
296
+  left: 50%;
297
+  transform: translateX(-50%);
298
+  white-space: nowrap;
299
+}
300
+.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
301
+  transition: 200ms transform, 200ms left;
302
+}
303
+.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
304
+  transition: 200ms transform, 200ms right;
305
+}
306
+/* Progress */
307
+.swiper-pagination-progressbar {
308
+  background: rgba(0, 0, 0, 0.25);
309
+  position: absolute;
310
+}
311
+.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
312
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
313
+  position: absolute;
314
+  left: 0;
315
+  top: 0;
316
+  width: 100%;
317
+  height: 100%;
318
+  transform: scale(0);
319
+  transform-origin: left top;
320
+}
321
+.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
322
+  transform-origin: right top;
323
+}
324
+.swiper-container-horizontal > .swiper-pagination-progressbar,
325
+.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
326
+  width: 100%;
327
+  height: 4px;
328
+  left: 0;
329
+  top: 0;
330
+}
331
+.swiper-container-vertical > .swiper-pagination-progressbar,
332
+.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
333
+  width: 4px;
334
+  height: 100%;
335
+  left: 0;
336
+  top: 0;
337
+}
338
+.swiper-pagination-white {
339
+  --swiper-pagination-color: #ffffff;
340
+}
341
+.swiper-pagination-black {
342
+  --swiper-pagination-color: #000000;
343
+}
344
+.swiper-pagination-lock {
345
+  display: none;
346
+}
347
+/* Scrollbar */
348
+.swiper-scrollbar {
349
+  border-radius: 10px;
350
+  position: relative;
351
+  -ms-touch-action: none;
352
+  background: rgba(0, 0, 0, 0.1);
353
+}
354
+.swiper-container-horizontal > .swiper-scrollbar {
355
+  position: absolute;
356
+  left: 1%;
357
+  bottom: 3px;
358
+  z-index: 50;
359
+  height: 5px;
360
+  width: 98%;
361
+}
362
+.swiper-container-vertical > .swiper-scrollbar {
363
+  position: absolute;
364
+  right: 3px;
365
+  top: 1%;
366
+  z-index: 50;
367
+  width: 5px;
368
+  height: 98%;
369
+}
370
+.swiper-scrollbar-drag {
371
+  height: 100%;
372
+  width: 100%;
373
+  position: relative;
374
+  background: rgba(0, 0, 0, 0.5);
375
+  border-radius: 10px;
376
+  left: 0;
377
+  top: 0;
378
+}
379
+.swiper-scrollbar-cursor-drag {
380
+  cursor: move;
381
+}
382
+.swiper-scrollbar-lock {
383
+  display: none;
384
+}
385
+.swiper-zoom-container {
386
+  width: 100%;
387
+  height: 100%;
388
+  display: flex;
389
+  justify-content: center;
390
+  align-items: center;
391
+  text-align: center;
392
+}
393
+.swiper-zoom-container > img,
394
+.swiper-zoom-container > svg,
395
+.swiper-zoom-container > canvas {
396
+  max-width: 100%;
397
+  max-height: 100%;
398
+  object-fit: contain;
399
+}
400
+.swiper-slide-zoomed {
401
+  cursor: move;
402
+}
403
+/* Preloader */
404
+:root {
405
+  /*
406
+  --swiper-preloader-color: var(--swiper-theme-color);
407
+  */
408
+}
409
+.swiper-lazy-preloader {
410
+  width: 42px;
411
+  height: 42px;
412
+  position: absolute;
413
+  left: 50%;
414
+  top: 50%;
415
+  margin-left: -21px;
416
+  margin-top: -21px;
417
+  z-index: 10;
418
+  transform-origin: 50%;
419
+  animation: swiper-preloader-spin 1s infinite linear;
420
+  box-sizing: border-box;
421
+  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
422
+  border-radius: 50%;
423
+  border-top-color: transparent;
424
+}
425
+.swiper-lazy-preloader-white {
426
+  --swiper-preloader-color: #fff;
427
+}
428
+.swiper-lazy-preloader-black {
429
+  --swiper-preloader-color: #000;
430
+}
431
+@keyframes swiper-preloader-spin {
432
+  100% {
433
+    transform: rotate(360deg);
434
+  }
435
+}
436
+/* a11y */
437
+.swiper-container .swiper-notification {
438
+  position: absolute;
439
+  left: 0;
440
+  top: 0;
441
+  pointer-events: none;
442
+  opacity: 0;
443
+  z-index: -1000;
444
+}
445
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
446
+  transition-timing-function: ease-out;
447
+}
448
+.swiper-container-fade .swiper-slide {
449
+  pointer-events: none;
450
+  transition-property: opacity;
451
+}
452
+.swiper-container-fade .swiper-slide .swiper-slide {
453
+  pointer-events: none;
454
+}
455
+.swiper-container-fade .swiper-slide-active,
456
+.swiper-container-fade .swiper-slide-active .swiper-slide-active {
457
+  pointer-events: auto;
458
+}
459
+.swiper-container-cube {
460
+  overflow: visible;
461
+}
462
+.swiper-container-cube .swiper-slide {
463
+  pointer-events: none;
464
+  -webkit-backface-visibility: hidden;
465
+          backface-visibility: hidden;
466
+  z-index: 1;
467
+  visibility: hidden;
468
+  transform-origin: 0 0;
469
+  width: 100%;
470
+  height: 100%;
471
+}
472
+.swiper-container-cube .swiper-slide .swiper-slide {
473
+  pointer-events: none;
474
+}
475
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
476
+  transform-origin: 100% 0;
477
+}
478
+.swiper-container-cube .swiper-slide-active,
479
+.swiper-container-cube .swiper-slide-active .swiper-slide-active {
480
+  pointer-events: auto;
481
+}
482
+.swiper-container-cube .swiper-slide-active,
483
+.swiper-container-cube .swiper-slide-next,
484
+.swiper-container-cube .swiper-slide-prev,
485
+.swiper-container-cube .swiper-slide-next + .swiper-slide {
486
+  pointer-events: auto;
487
+  visibility: visible;
488
+}
489
+.swiper-container-cube .swiper-slide-shadow-top,
490
+.swiper-container-cube .swiper-slide-shadow-bottom,
491
+.swiper-container-cube .swiper-slide-shadow-left,
492
+.swiper-container-cube .swiper-slide-shadow-right {
493
+  z-index: 0;
494
+  -webkit-backface-visibility: hidden;
495
+          backface-visibility: hidden;
496
+}
497
+.swiper-container-cube .swiper-cube-shadow {
498
+  position: absolute;
499
+  left: 0;
500
+  bottom: 0px;
501
+  width: 100%;
502
+  height: 100%;
503
+  background: #000;
504
+  opacity: 0.6;
505
+  -webkit-filter: blur(50px);
506
+  filter: blur(50px);
507
+  z-index: 0;
508
+}
509
+.swiper-container-flip {
510
+  overflow: visible;
511
+}
512
+.swiper-container-flip .swiper-slide {
513
+  pointer-events: none;
514
+  -webkit-backface-visibility: hidden;
515
+          backface-visibility: hidden;
516
+  z-index: 1;
517
+}
518
+.swiper-container-flip .swiper-slide .swiper-slide {
519
+  pointer-events: none;
520
+}
521
+.swiper-container-flip .swiper-slide-active,
522
+.swiper-container-flip .swiper-slide-active .swiper-slide-active {
523
+  pointer-events: auto;
524
+}
525
+.swiper-container-flip .swiper-slide-shadow-top,
526
+.swiper-container-flip .swiper-slide-shadow-bottom,
527
+.swiper-container-flip .swiper-slide-shadow-left,
528
+.swiper-container-flip .swiper-slide-shadow-right {
529
+  z-index: 0;
530
+  -webkit-backface-visibility: hidden;
531
+          backface-visibility: hidden;
532
+}
0 533
new file mode 100644
... ...
@@ -0,0 +1,13 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+@font-face{font-family:swiper-icons;src:url("data:application/font-woff;charset=utf-8;base64, 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") format("woff");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next'}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}
0 14
\ No newline at end of file
1 15
new file mode 100644
... ...
@@ -0,0 +1,8579 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+/**
14
+ * SSR Window 2.0.0
15
+ * Better handling for window object in SSR environment
16
+ * https://github.com/nolimits4web/ssr-window
17
+ *
18
+ * Copyright 2020, Vladimir Kharlampidi
19
+ *
20
+ * Licensed under MIT
21
+ *
22
+ * Released on: May 12, 2020
23
+ */
24
+/* eslint-disable no-param-reassign */
25
+function isObject(obj) {
26
+    return (obj !== null &&
27
+        typeof obj === 'object' &&
28
+        'constructor' in obj &&
29
+        obj.constructor === Object);
30
+}
31
+function extend(target, src) {
32
+    if (target === void 0) { target = {}; }
33
+    if (src === void 0) { src = {}; }
34
+    Object.keys(src).forEach(function (key) {
35
+        if (typeof target[key] === 'undefined')
36
+            target[key] = src[key];
37
+        else if (isObject(src[key]) &&
38
+            isObject(target[key]) &&
39
+            Object.keys(src[key]).length > 0) {
40
+            extend(target[key], src[key]);
41
+        }
42
+    });
43
+}
44
+
45
+var doc = typeof document !== 'undefined' ? document : {};
46
+var ssrDocument = {
47
+    body: {},
48
+    addEventListener: function () { },
49
+    removeEventListener: function () { },
50
+    activeElement: {
51
+        blur: function () { },
52
+        nodeName: '',
53
+    },
54
+    querySelector: function () {
55
+        return null;
56
+    },
57
+    querySelectorAll: function () {
58
+        return [];
59
+    },
60
+    getElementById: function () {
61
+        return null;
62
+    },
63
+    createEvent: function () {
64
+        return {
65
+            initEvent: function () { },
66
+        };
67
+    },
68
+    createElement: function () {
69
+        return {
70
+            children: [],
71
+            childNodes: [],
72
+            style: {},
73
+            setAttribute: function () { },
74
+            getElementsByTagName: function () {
75
+                return [];
76
+            },
77
+        };
78
+    },
79
+    createElementNS: function () {
80
+        return {};
81
+    },
82
+    importNode: function () {
83
+        return null;
84
+    },
85
+    location: {
86
+        hash: '',
87
+        host: '',
88
+        hostname: '',
89
+        href: '',
90
+        origin: '',
91
+        pathname: '',
92
+        protocol: '',
93
+        search: '',
94
+    },
95
+};
96
+extend(doc, ssrDocument);
97
+
98
+var win = typeof window !== 'undefined' ? window : {};
99
+var ssrWindow = {
100
+    document: ssrDocument,
101
+    navigator: {
102
+        userAgent: '',
103
+    },
104
+    location: {
105
+        hash: '',
106
+        host: '',
107
+        hostname: '',
108
+        href: '',
109
+        origin: '',
110
+        pathname: '',
111
+        protocol: '',
112
+        search: '',
113
+    },
114
+    history: {
115
+        replaceState: function () { },
116
+        pushState: function () { },
117
+        go: function () { },
118
+        back: function () { },
119
+    },
120
+    CustomEvent: function CustomEvent() {
121
+        return this;
122
+    },
123
+    addEventListener: function () { },
124
+    removeEventListener: function () { },
125
+    getComputedStyle: function () {
126
+        return {
127
+            getPropertyValue: function () {
128
+                return '';
129
+            },
130
+        };
131
+    },
132
+    Image: function () { },
133
+    Date: function () { },
134
+    screen: {},
135
+    setTimeout: function () { },
136
+    clearTimeout: function () { },
137
+    matchMedia: function () {
138
+        return {};
139
+    },
140
+};
141
+extend(win, ssrWindow);
142
+
143
+/**
144
+ * Dom7 2.1.5
145
+ * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
146
+ * http://framework7.io/docs/dom.html
147
+ *
148
+ * Copyright 2020, Vladimir Kharlampidi
149
+ * The iDangero.us
150
+ * http://www.idangero.us/
151
+ *
152
+ * Licensed under MIT
153
+ *
154
+ * Released on: May 15, 2020
155
+ */
156
+
157
+class Dom7 {
158
+  constructor(arr) {
159
+    const self = this;
160
+    // Create array-like object
161
+    for (let i = 0; i < arr.length; i += 1) {
162
+      self[i] = arr[i];
163
+    }
164
+    self.length = arr.length;
165
+    // Return collection with methods
166
+    return this;
167
+  }
168
+}
169
+
170
+function $(selector, context) {
171
+  const arr = [];
172
+  let i = 0;
173
+  if (selector && !context) {
174
+    if (selector instanceof Dom7) {
175
+      return selector;
176
+    }
177
+  }
178
+  if (selector) {
179
+      // String
180
+    if (typeof selector === 'string') {
181
+      let els;
182
+      let tempParent;
183
+      const html = selector.trim();
184
+      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
185
+        let toCreate = 'div';
186
+        if (html.indexOf('<li') === 0) toCreate = 'ul';
187
+        if (html.indexOf('<tr') === 0) toCreate = 'tbody';
188
+        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';
189
+        if (html.indexOf('<tbody') === 0) toCreate = 'table';
190
+        if (html.indexOf('<option') === 0) toCreate = 'select';
191
+        tempParent = doc.createElement(toCreate);
192
+        tempParent.innerHTML = html;
193
+        for (i = 0; i < tempParent.childNodes.length; i += 1) {
194
+          arr.push(tempParent.childNodes[i]);
195
+        }
196
+      } else {
197
+        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
198
+          // Pure ID selector
199
+          els = [doc.getElementById(selector.trim().split('#')[1])];
200
+        } else {
201
+          // Other selectors
202
+          els = (context || doc).querySelectorAll(selector.trim());
203
+        }
204
+        for (i = 0; i < els.length; i += 1) {
205
+          if (els[i]) arr.push(els[i]);
206
+        }
207
+      }
208
+    } else if (selector.nodeType || selector === win || selector === doc) {
209
+      // Node/element
210
+      arr.push(selector);
211
+    } else if (selector.length > 0 && selector[0].nodeType) {
212
+      // Array of elements or instance of Dom
213
+      for (i = 0; i < selector.length; i += 1) {
214
+        arr.push(selector[i]);
215
+      }
216
+    }
217
+  }
218
+  return new Dom7(arr);
219
+}
220
+
221
+$.fn = Dom7.prototype;
222
+$.Class = Dom7;
223
+$.Dom7 = Dom7;
224
+
225
+function unique(arr) {
226
+  const uniqueArray = [];
227
+  for (let i = 0; i < arr.length; i += 1) {
228
+    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
229
+  }
230
+  return uniqueArray;
231
+}
232
+
233
+// Classes and attributes
234
+function addClass(className) {
235
+  if (typeof className === 'undefined') {
236
+    return this;
237
+  }
238
+  const classes = className.split(' ');
239
+  for (let i = 0; i < classes.length; i += 1) {
240
+    for (let j = 0; j < this.length; j += 1) {
241
+      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);
242
+    }
243
+  }
244
+  return this;
245
+}
246
+function removeClass(className) {
247
+  const classes = className.split(' ');
248
+  for (let i = 0; i < classes.length; i += 1) {
249
+    for (let j = 0; j < this.length; j += 1) {
250
+      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);
251
+    }
252
+  }
253
+  return this;
254
+}
255
+function hasClass(className) {
256
+  if (!this[0]) return false;
257
+  return this[0].classList.contains(className);
258
+}
259
+function toggleClass(className) {
260
+  const classes = className.split(' ');
261
+  for (let i = 0; i < classes.length; i += 1) {
262
+    for (let j = 0; j < this.length; j += 1) {
263
+      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);
264
+    }
265
+  }
266
+  return this;
267
+}
268
+function attr(attrs, value) {
269
+  if (arguments.length === 1 && typeof attrs === 'string') {
270
+    // Get attr
271
+    if (this[0]) return this[0].getAttribute(attrs);
272
+    return undefined;
273
+  }
274
+
275
+  // Set attrs
276
+  for (let i = 0; i < this.length; i += 1) {
277
+    if (arguments.length === 2) {
278
+      // String
279
+      this[i].setAttribute(attrs, value);
280
+    } else {
281
+      // Object
282
+      // eslint-disable-next-line
283
+      for (const attrName in attrs) {
284
+        this[i][attrName] = attrs[attrName];
285
+        this[i].setAttribute(attrName, attrs[attrName]);
286
+      }
287
+    }
288
+  }
289
+  return this;
290
+}
291
+// eslint-disable-next-line
292
+function removeAttr(attr) {
293
+  for (let i = 0; i < this.length; i += 1) {
294
+    this[i].removeAttribute(attr);
295
+  }
296
+  return this;
297
+}
298
+function data(key, value) {
299
+  let el;
300
+  if (typeof value === 'undefined') {
301
+    el = this[0];
302
+    // Get value
303
+    if (el) {
304
+      if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {
305
+        return el.dom7ElementDataStorage[key];
306
+      }
307
+
308
+      const dataKey = el.getAttribute(`data-${key}`);
309
+      if (dataKey) {
310
+        return dataKey;
311
+      }
312
+      return undefined;
313
+    }
314
+    return undefined;
315
+  }
316
+
317
+  // Set value
318
+  for (let i = 0; i < this.length; i += 1) {
319
+    el = this[i];
320
+    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
321
+    el.dom7ElementDataStorage[key] = value;
322
+  }
323
+  return this;
324
+}
325
+// Transforms
326
+// eslint-disable-next-line
327
+function transform(transform) {
328
+  for (let i = 0; i < this.length; i += 1) {
329
+    const elStyle = this[i].style;
330
+    elStyle.webkitTransform = transform;
331
+    elStyle.transform = transform;
332
+  }
333
+  return this;
334
+}
335
+function transition(duration) {
336
+  if (typeof duration !== 'string') {
337
+    duration = `${duration}ms`; // eslint-disable-line
338
+  }
339
+  for (let i = 0; i < this.length; i += 1) {
340
+    const elStyle = this[i].style;
341
+    elStyle.webkitTransitionDuration = duration;
342
+    elStyle.transitionDuration = duration;
343
+  }
344
+  return this;
345
+}
346
+// Events
347
+function on(...args) {
348
+  let [eventType, targetSelector, listener, capture] = args;
349
+  if (typeof args[1] === 'function') {
350
+    [eventType, listener, capture] = args;
351
+    targetSelector = undefined;
352
+  }
353
+  if (!capture) capture = false;
354
+
355
+  function handleLiveEvent(e) {
356
+    const target = e.target;
357
+    if (!target) return;
358
+    const eventData = e.target.dom7EventData || [];
359
+    if (eventData.indexOf(e) < 0) {
360
+      eventData.unshift(e);
361
+    }
362
+    if ($(target).is(targetSelector)) listener.apply(target, eventData);
363
+    else {
364
+      const parents = $(target).parents(); // eslint-disable-line
365
+      for (let k = 0; k < parents.length; k += 1) {
366
+        if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);
367
+      }
368
+    }
369
+  }
370
+  function handleEvent(e) {
371
+    const eventData = e && e.target ? e.target.dom7EventData || [] : [];
372
+    if (eventData.indexOf(e) < 0) {
373
+      eventData.unshift(e);
374
+    }
375
+    listener.apply(this, eventData);
376
+  }
377
+  const events = eventType.split(' ');
378
+  let j;
379
+  for (let i = 0; i < this.length; i += 1) {
380
+    const el = this[i];
381
+    if (!targetSelector) {
382
+      for (j = 0; j < events.length; j += 1) {
383
+        const event = events[j];
384
+        if (!el.dom7Listeners) el.dom7Listeners = {};
385
+        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
386
+        el.dom7Listeners[event].push({
387
+          listener,
388
+          proxyListener: handleEvent,
389
+        });
390
+        el.addEventListener(event, handleEvent, capture);
391
+      }
392
+    } else {
393
+      // Live events
394
+      for (j = 0; j < events.length; j += 1) {
395
+        const event = events[j];
396
+        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
397
+        if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];
398
+        el.dom7LiveListeners[event].push({
399
+          listener,
400
+          proxyListener: handleLiveEvent,
401
+        });
402
+        el.addEventListener(event, handleLiveEvent, capture);
403
+      }
404
+    }
405
+  }
406
+  return this;
407
+}
408
+function off(...args) {
409
+  let [eventType, targetSelector, listener, capture] = args;
410
+  if (typeof args[1] === 'function') {
411
+    [eventType, listener, capture] = args;
412
+    targetSelector = undefined;
413
+  }
414
+  if (!capture) capture = false;
415
+
416
+  const events = eventType.split(' ');
417
+  for (let i = 0; i < events.length; i += 1) {
418
+    const event = events[i];
419
+    for (let j = 0; j < this.length; j += 1) {
420
+      const el = this[j];
421
+      let handlers;
422
+      if (!targetSelector && el.dom7Listeners) {
423
+        handlers = el.dom7Listeners[event];
424
+      } else if (targetSelector && el.dom7LiveListeners) {
425
+        handlers = el.dom7LiveListeners[event];
426
+      }
427
+      if (handlers && handlers.length) {
428
+        for (let k = handlers.length - 1; k >= 0; k -= 1) {
429
+          const handler = handlers[k];
430
+          if (listener && handler.listener === listener) {
431
+            el.removeEventListener(event, handler.proxyListener, capture);
432
+            handlers.splice(k, 1);
433
+          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
434
+            el.removeEventListener(event, handler.proxyListener, capture);
435
+            handlers.splice(k, 1);
436
+          } else if (!listener) {
437
+            el.removeEventListener(event, handler.proxyListener, capture);
438
+            handlers.splice(k, 1);
439
+          }
440
+        }
441
+      }
442
+    }
443
+  }
444
+  return this;
445
+}
446
+function trigger(...args) {
447
+  const events = args[0].split(' ');
448
+  const eventData = args[1];
449
+  for (let i = 0; i < events.length; i += 1) {
450
+    const event = events[i];
451
+    for (let j = 0; j < this.length; j += 1) {
452
+      const el = this[j];
453
+      let evt;
454
+      try {
455
+        evt = new win.CustomEvent(event, {
456
+          detail: eventData,
457
+          bubbles: true,
458
+          cancelable: true,
459
+        });
460
+      } catch (e) {
461
+        evt = doc.createEvent('Event');
462
+        evt.initEvent(event, true, true);
463
+        evt.detail = eventData;
464
+      }
465
+      // eslint-disable-next-line
466
+      el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);
467
+      el.dispatchEvent(evt);
468
+      el.dom7EventData = [];
469
+      delete el.dom7EventData;
470
+    }
471
+  }
472
+  return this;
473
+}
474
+function transitionEnd(callback) {
475
+  const events = ['webkitTransitionEnd', 'transitionend'];
476
+  const dom = this;
477
+  let i;
478
+  function fireCallBack(e) {
479
+    /* jshint validthis:true */
480
+    if (e.target !== this) return;
481
+    callback.call(this, e);
482
+    for (i = 0; i < events.length; i += 1) {
483
+      dom.off(events[i], fireCallBack);
484
+    }
485
+  }
486
+  if (callback) {
487
+    for (i = 0; i < events.length; i += 1) {
488
+      dom.on(events[i], fireCallBack);
489
+    }
490
+  }
491
+  return this;
492
+}
493
+function outerWidth(includeMargins) {
494
+  if (this.length > 0) {
495
+    if (includeMargins) {
496
+      // eslint-disable-next-line
497
+      const styles = this.styles();
498
+      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
499
+    }
500
+    return this[0].offsetWidth;
501
+  }
502
+  return null;
503
+}
504
+function outerHeight(includeMargins) {
505
+  if (this.length > 0) {
506
+    if (includeMargins) {
507
+      // eslint-disable-next-line
508
+      const styles = this.styles();
509
+      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
510
+    }
511
+    return this[0].offsetHeight;
512
+  }
513
+  return null;
514
+}
515
+function offset() {
516
+  if (this.length > 0) {
517
+    const el = this[0];
518
+    const box = el.getBoundingClientRect();
519
+    const body = doc.body;
520
+    const clientTop = el.clientTop || body.clientTop || 0;
521
+    const clientLeft = el.clientLeft || body.clientLeft || 0;
522
+    const scrollTop = el === win ? win.scrollY : el.scrollTop;
523
+    const scrollLeft = el === win ? win.scrollX : el.scrollLeft;
524
+    return {
525
+      top: (box.top + scrollTop) - clientTop,
526
+      left: (box.left + scrollLeft) - clientLeft,
527
+    };
528
+  }
529
+
530
+  return null;
531
+}
532
+function styles() {
533
+  if (this[0]) return win.getComputedStyle(this[0], null);
534
+  return {};
535
+}
536
+function css(props, value) {
537
+  let i;
538
+  if (arguments.length === 1) {
539
+    if (typeof props === 'string') {
540
+      if (this[0]) return win.getComputedStyle(this[0], null).getPropertyValue(props);
541
+    } else {
542
+      for (i = 0; i < this.length; i += 1) {
543
+        // eslint-disable-next-line
544
+        for (let prop in props) {
545
+          this[i].style[prop] = props[prop];
546
+        }
547
+      }
548
+      return this;
549
+    }
550
+  }
551
+  if (arguments.length === 2 && typeof props === 'string') {
552
+    for (i = 0; i < this.length; i += 1) {
553
+      this[i].style[props] = value;
554
+    }
555
+    return this;
556
+  }
557
+  return this;
558
+}
559
+// Iterate over the collection passing elements to `callback`
560
+function each(callback) {
561
+  // Don't bother continuing without a callback
562
+  if (!callback) return this;
563
+  // Iterate over the current collection
564
+  for (let i = 0; i < this.length; i += 1) {
565
+    // If the callback returns false
566
+    if (callback.call(this[i], i, this[i]) === false) {
567
+      // End the loop early
568
+      return this;
569
+    }
570
+  }
571
+  // Return `this` to allow chained DOM operations
572
+  return this;
573
+}
574
+function filter(callback) {
575
+  const matchedItems = [];
576
+  const dom = this;
577
+  for (let i = 0; i < dom.length; i += 1) {
578
+    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);
579
+  }
580
+  return new Dom7(matchedItems);
581
+}
582
+// eslint-disable-next-line
583
+function html(html) {
584
+  if (typeof html === 'undefined') {
585
+    return this[0] ? this[0].innerHTML : undefined;
586
+  }
587
+
588
+  for (let i = 0; i < this.length; i += 1) {
589
+    this[i].innerHTML = html;
590
+  }
591
+  return this;
592
+}
593
+// eslint-disable-next-line
594
+function text(text) {
595
+  if (typeof text === 'undefined') {
596
+    if (this[0]) {
597
+      return this[0].textContent.trim();
598
+    }
599
+    return null;
600
+  }
601
+
602
+  for (let i = 0; i < this.length; i += 1) {
603
+    this[i].textContent = text;
604
+  }
605
+  return this;
606
+}
607
+function is(selector) {
608
+  const el = this[0];
609
+  let compareWith;
610
+  let i;
611
+  if (!el || typeof selector === 'undefined') return false;
612
+  if (typeof selector === 'string') {
613
+    if (el.matches) return el.matches(selector);
614
+    else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);
615
+    else if (el.msMatchesSelector) return el.msMatchesSelector(selector);
616
+
617
+    compareWith = $(selector);
618
+    for (i = 0; i < compareWith.length; i += 1) {
619
+      if (compareWith[i] === el) return true;
620
+    }
621
+    return false;
622
+  } else if (selector === doc) return el === doc;
623
+  else if (selector === win) return el === win;
624
+
625
+  if (selector.nodeType || selector instanceof Dom7) {
626
+    compareWith = selector.nodeType ? [selector] : selector;
627
+    for (i = 0; i < compareWith.length; i += 1) {
628
+      if (compareWith[i] === el) return true;
629
+    }
630
+    return false;
631
+  }
632
+  return false;
633
+}
634
+function index() {
635
+  let child = this[0];
636
+  let i;
637
+  if (child) {
638
+    i = 0;
639
+    // eslint-disable-next-line
640
+    while ((child = child.previousSibling) !== null) {
641
+      if (child.nodeType === 1) i += 1;
642
+    }
643
+    return i;
644
+  }
645
+  return undefined;
646
+}
647
+// eslint-disable-next-line
648
+function eq(index) {
649
+  if (typeof index === 'undefined') return this;
650
+  const length = this.length;
651
+  let returnIndex;
652
+  if (index > length - 1) {
653
+    return new Dom7([]);
654
+  }
655
+  if (index < 0) {
656
+    returnIndex = length + index;
657
+    if (returnIndex < 0) return new Dom7([]);
658
+    return new Dom7([this[returnIndex]]);
659
+  }
660
+  return new Dom7([this[index]]);
661
+}
662
+function append(...args) {
663
+  let newChild;
664
+
665
+  for (let k = 0; k < args.length; k += 1) {
666
+    newChild = args[k];
667
+    for (let i = 0; i < this.length; i += 1) {
668
+      if (typeof newChild === 'string') {
669
+        const tempDiv = doc.createElement('div');
670
+        tempDiv.innerHTML = newChild;
671
+        while (tempDiv.firstChild) {
672
+          this[i].appendChild(tempDiv.firstChild);
673
+        }
674
+      } else if (newChild instanceof Dom7) {
675
+        for (let j = 0; j < newChild.length; j += 1) {
676
+          this[i].appendChild(newChild[j]);
677
+        }
678
+      } else {
679
+        this[i].appendChild(newChild);
680
+      }
681
+    }
682
+  }
683
+
684
+  return this;
685
+}
686
+function prepend(newChild) {
687
+  let i;
688
+  let j;
689
+  for (i = 0; i < this.length; i += 1) {
690
+    if (typeof newChild === 'string') {
691
+      const tempDiv = doc.createElement('div');
692
+      tempDiv.innerHTML = newChild;
693
+      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
694
+        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
695
+      }
696
+    } else if (newChild instanceof Dom7) {
697
+      for (j = 0; j < newChild.length; j += 1) {
698
+        this[i].insertBefore(newChild[j], this[i].childNodes[0]);
699
+      }
700
+    } else {
701
+      this[i].insertBefore(newChild, this[i].childNodes[0]);
702
+    }
703
+  }
704
+  return this;
705
+}
706
+function next(selector) {
707
+  if (this.length > 0) {
708
+    if (selector) {
709
+      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
710
+        return new Dom7([this[0].nextElementSibling]);
711
+      }
712
+      return new Dom7([]);
713
+    }
714
+
715
+    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
716
+    return new Dom7([]);
717
+  }
718
+  return new Dom7([]);
719
+}
720
+function nextAll(selector) {
721
+  const nextEls = [];
722
+  let el = this[0];
723
+  if (!el) return new Dom7([]);
724
+  while (el.nextElementSibling) {
725
+    const next = el.nextElementSibling; // eslint-disable-line
726
+    if (selector) {
727
+      if ($(next).is(selector)) nextEls.push(next);
728
+    } else nextEls.push(next);
729
+    el = next;
730
+  }
731
+  return new Dom7(nextEls);
732
+}
733
+function prev(selector) {
734
+  if (this.length > 0) {
735
+    const el = this[0];
736
+    if (selector) {
737
+      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
738
+        return new Dom7([el.previousElementSibling]);
739
+      }
740
+      return new Dom7([]);
741
+    }
742
+
743
+    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);
744
+    return new Dom7([]);
745
+  }
746
+  return new Dom7([]);
747
+}
748
+function prevAll(selector) {
749
+  const prevEls = [];
750
+  let el = this[0];
751
+  if (!el) return new Dom7([]);
752
+  while (el.previousElementSibling) {
753
+    const prev = el.previousElementSibling; // eslint-disable-line
754
+    if (selector) {
755
+      if ($(prev).is(selector)) prevEls.push(prev);
756
+    } else prevEls.push(prev);
757
+    el = prev;
758
+  }
759
+  return new Dom7(prevEls);
760
+}
761
+function parent(selector) {
762
+  const parents = []; // eslint-disable-line
763
+  for (let i = 0; i < this.length; i += 1) {
764
+    if (this[i].parentNode !== null) {
765
+      if (selector) {
766
+        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
767
+      } else {
768
+        parents.push(this[i].parentNode);
769
+      }
770
+    }
771
+  }
772
+  return $(unique(parents));
773
+}
774
+function parents(selector) {
775
+  const parents = []; // eslint-disable-line
776
+  for (let i = 0; i < this.length; i += 1) {
777
+    let parent = this[i].parentNode; // eslint-disable-line
778
+    while (parent) {
779
+      if (selector) {
780
+        if ($(parent).is(selector)) parents.push(parent);
781
+      } else {
782
+        parents.push(parent);
783
+      }
784
+      parent = parent.parentNode;
785
+    }
786
+  }
787
+  return $(unique(parents));
788
+}
789
+function closest(selector) {
790
+  let closest = this; // eslint-disable-line
791
+  if (typeof selector === 'undefined') {
792
+    return new Dom7([]);
793
+  }
794
+  if (!closest.is(selector)) {
795
+    closest = closest.parents(selector).eq(0);
796
+  }
797
+  return closest;
798
+}
799
+function find(selector) {
800
+  const foundElements = [];
801
+  for (let i = 0; i < this.length; i += 1) {
802
+    const found = this[i].querySelectorAll(selector);
803
+    for (let j = 0; j < found.length; j += 1) {
804
+      foundElements.push(found[j]);
805
+    }
806
+  }
807
+  return new Dom7(foundElements);
808
+}
809
+function children(selector) {
810
+  const children = []; // eslint-disable-line
811
+  for (let i = 0; i < this.length; i += 1) {
812
+    const childNodes = this[i].childNodes;
813
+
814
+    for (let j = 0; j < childNodes.length; j += 1) {
815
+      if (!selector) {
816
+        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
817
+      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
818
+        children.push(childNodes[j]);
819
+      }
820
+    }
821
+  }
822
+  return new Dom7(unique(children));
823
+}
824
+function remove() {
825
+  for (let i = 0; i < this.length; i += 1) {
826
+    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
827
+  }
828
+  return this;
829
+}
830
+function add(...args) {
831
+  const dom = this;
832
+  let i;
833
+  let j;
834
+  for (i = 0; i < args.length; i += 1) {
835
+    const toAdd = $(args[i]);
836
+    for (j = 0; j < toAdd.length; j += 1) {
837
+      dom[dom.length] = toAdd[j];
838
+      dom.length += 1;
839
+    }
840
+  }
841
+  return dom;
842
+}
843
+
844
+const Methods = {
845
+  addClass,
846
+  removeClass,
847
+  hasClass,
848
+  toggleClass,
849
+  attr,
850
+  removeAttr,
851
+  data,
852
+  transform,
853
+  transition,
854
+  on,
855
+  off,
856
+  trigger,
857
+  transitionEnd,
858
+  outerWidth,
859
+  outerHeight,
860
+  offset,
861
+  css,
862
+  each,
863
+  html,
864
+  text,
865
+  is,
866
+  index,
867
+  eq,
868
+  append,
869
+  prepend,
870
+  next,
871
+  nextAll,
872
+  prev,
873
+  prevAll,
874
+  parent,
875
+  parents,
876
+  closest,
877
+  find,
878
+  children,
879
+  filter,
880
+  remove,
881
+  add,
882
+  styles,
883
+};
884
+
885
+Object.keys(Methods).forEach((methodName) => {
886
+  $.fn[methodName] = $.fn[methodName] || Methods[methodName];
887
+});
888
+
889
+const Utils = {
890
+  deleteProps(obj) {
891
+    const object = obj;
892
+    Object.keys(object).forEach((key) => {
893
+      try {
894
+        object[key] = null;
895
+      } catch (e) {
896
+        // no getter for object
897
+      }
898
+      try {
899
+        delete object[key];
900
+      } catch (e) {
901
+        // something got wrong
902
+      }
903
+    });
904
+  },
905
+  nextTick(callback, delay = 0) {
906
+    return setTimeout(callback, delay);
907
+  },
908
+  now() {
909
+    return Date.now();
910
+  },
911
+  getTranslate(el, axis = 'x') {
912
+    let matrix;
913
+    let curTransform;
914
+    let transformMatrix;
915
+
916
+    const curStyle = win.getComputedStyle(el, null);
917
+
918
+    if (win.WebKitCSSMatrix) {
919
+      curTransform = curStyle.transform || curStyle.webkitTransform;
920
+      if (curTransform.split(',').length > 6) {
921
+        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
922
+      }
923
+      // Some old versions of Webkit choke when 'none' is passed; pass
924
+      // empty string instead in this case
925
+      transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
926
+    } else {
927
+      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
928
+      matrix = transformMatrix.toString().split(',');
929
+    }
930
+
931
+    if (axis === 'x') {
932
+      // Latest Chrome and webkits Fix
933
+      if (win.WebKitCSSMatrix) curTransform = transformMatrix.m41;
934
+      // Crazy IE10 Matrix
935
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
936
+      // Normal Browsers
937
+      else curTransform = parseFloat(matrix[4]);
938
+    }
939
+    if (axis === 'y') {
940
+      // Latest Chrome and webkits Fix
941
+      if (win.WebKitCSSMatrix) curTransform = transformMatrix.m42;
942
+      // Crazy IE10 Matrix
943
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
944
+      // Normal Browsers
945
+      else curTransform = parseFloat(matrix[5]);
946
+    }
947
+    return curTransform || 0;
948
+  },
949
+  parseUrlQuery(url) {
950
+    const query = {};
951
+    let urlToParse = url || win.location.href;
952
+    let i;
953
+    let params;
954
+    let param;
955
+    let length;
956
+    if (typeof urlToParse === 'string' && urlToParse.length) {
957
+      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
958
+      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
959
+      length = params.length;
960
+
961
+      for (i = 0; i < length; i += 1) {
962
+        param = params[i].replace(/#\S+/g, '').split('=');
963
+        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
964
+      }
965
+    }
966
+    return query;
967
+  },
968
+  isObject(o) {
969
+    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
970
+  },
971
+  extend(...args) {
972
+    const to = Object(args[0]);
973
+    for (let i = 1; i < args.length; i += 1) {
974
+      const nextSource = args[i];
975
+      if (nextSource !== undefined && nextSource !== null) {
976
+        const keysArray = Object.keys(Object(nextSource));
977
+        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
978
+          const nextKey = keysArray[nextIndex];
979
+          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
980
+          if (desc !== undefined && desc.enumerable) {
981
+            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
982
+              Utils.extend(to[nextKey], nextSource[nextKey]);
983
+            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
984
+              to[nextKey] = {};
985
+              Utils.extend(to[nextKey], nextSource[nextKey]);
986
+            } else {
987
+              to[nextKey] = nextSource[nextKey];
988
+            }
989
+          }
990
+        }
991
+      }
992
+    }
993
+    return to;
994
+  },
995
+};
996
+
997
+const Support = (function Support() {
998
+  return {
999
+    touch: !!(('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch)),
1000
+
1001
+    pointerEvents: !!win.PointerEvent && ('maxTouchPoints' in win.navigator) && win.navigator.maxTouchPoints >= 0,
1002
+
1003
+    observer: (function checkObserver() {
1004
+      return ('MutationObserver' in win || 'WebkitMutationObserver' in win);
1005
+    }()),
1006
+
1007
+    passiveListener: (function checkPassiveListener() {
1008
+      let supportsPassive = false;
1009
+      try {
1010
+        const opts = Object.defineProperty({}, 'passive', {
1011
+          // eslint-disable-next-line
1012
+          get() {
1013
+            supportsPassive = true;
1014
+          },
1015
+        });
1016
+        win.addEventListener('testPassiveListener', null, opts);
1017
+      } catch (e) {
1018
+        // No support
1019
+      }
1020
+      return supportsPassive;
1021
+    }()),
1022
+
1023
+    gestures: (function checkGestures() {
1024
+      return 'ongesturestart' in win;
1025
+    }()),
1026
+  };
1027
+}());
1028
+
1029
+class SwiperClass {
1030
+  constructor(params = {}) {
1031
+    const self = this;
1032
+    self.params = params;
1033
+
1034
+    // Events
1035
+    self.eventsListeners = {};
1036
+
1037
+    if (self.params && self.params.on) {
1038
+      Object.keys(self.params.on).forEach((eventName) => {
1039
+        self.on(eventName, self.params.on[eventName]);
1040
+      });
1041
+    }
1042
+  }
1043
+
1044
+  on(events, handler, priority) {
1045
+    const self = this;
1046
+    if (typeof handler !== 'function') return self;
1047
+    const method = priority ? 'unshift' : 'push';
1048
+    events.split(' ').forEach((event) => {
1049
+      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
1050
+      self.eventsListeners[event][method](handler);
1051
+    });
1052
+    return self;
1053
+  }
1054
+
1055
+  once(events, handler, priority) {
1056
+    const self = this;
1057
+    if (typeof handler !== 'function') return self;
1058
+    function onceHandler(...args) {
1059
+      self.off(events, onceHandler);
1060
+      if (onceHandler.f7proxy) {
1061
+        delete onceHandler.f7proxy;
1062
+      }
1063
+      handler.apply(self, args);
1064
+    }
1065
+    onceHandler.f7proxy = handler;
1066
+    return self.on(events, onceHandler, priority);
1067
+  }
1068
+
1069
+  off(events, handler) {
1070
+    const self = this;
1071
+    if (!self.eventsListeners) return self;
1072
+    events.split(' ').forEach((event) => {
1073
+      if (typeof handler === 'undefined') {
1074
+        self.eventsListeners[event] = [];
1075
+      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
1076
+        self.eventsListeners[event].forEach((eventHandler, index) => {
1077
+          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
1078
+            self.eventsListeners[event].splice(index, 1);
1079
+          }
1080
+        });
1081
+      }
1082
+    });
1083
+    return self;
1084
+  }
1085
+
1086
+  emit(...args) {
1087
+    const self = this;
1088
+    if (!self.eventsListeners) return self;
1089
+    let events;
1090
+    let data;
1091
+    let context;
1092
+    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
1093
+      events = args[0];
1094
+      data = args.slice(1, args.length);
1095
+      context = self;
1096
+    } else {
1097
+      events = args[0].events;
1098
+      data = args[0].data;
1099
+      context = args[0].context || self;
1100
+    }
1101
+    const eventsArray = Array.isArray(events) ? events : events.split(' ');
1102
+    eventsArray.forEach((event) => {
1103
+      if (self.eventsListeners && self.eventsListeners[event]) {
1104
+        const handlers = [];
1105
+        self.eventsListeners[event].forEach((eventHandler) => {
1106
+          handlers.push(eventHandler);
1107
+        });
1108
+        handlers.forEach((eventHandler) => {
1109
+          eventHandler.apply(context, data);
1110
+        });
1111
+      }
1112
+    });
1113
+    return self;
1114
+  }
1115
+
1116
+  useModulesParams(instanceParams) {
1117
+    const instance = this;
1118
+    if (!instance.modules) return;
1119
+    Object.keys(instance.modules).forEach((moduleName) => {
1120
+      const module = instance.modules[moduleName];
1121
+      // Extend params
1122
+      if (module.params) {
1123
+        Utils.extend(instanceParams, module.params);
1124
+      }
1125
+    });
1126
+  }
1127
+
1128
+  useModules(modulesParams = {}) {
1129
+    const instance = this;
1130
+    if (!instance.modules) return;
1131
+    Object.keys(instance.modules).forEach((moduleName) => {
1132
+      const module = instance.modules[moduleName];
1133
+      const moduleParams = modulesParams[moduleName] || {};
1134
+      // Extend instance methods and props
1135
+      if (module.instance) {
1136
+        Object.keys(module.instance).forEach((modulePropName) => {
1137
+          const moduleProp = module.instance[modulePropName];
1138
+          if (typeof moduleProp === 'function') {
1139
+            instance[modulePropName] = moduleProp.bind(instance);
1140
+          } else {
1141
+            instance[modulePropName] = moduleProp;
1142
+          }
1143
+        });
1144
+      }
1145
+      // Add event listeners
1146
+      if (module.on && instance.on) {
1147
+        Object.keys(module.on).forEach((moduleEventName) => {
1148
+          instance.on(moduleEventName, module.on[moduleEventName]);
1149
+        });
1150
+      }
1151
+
1152
+      // Module create callback
1153
+      if (module.create) {
1154
+        module.create.bind(instance)(moduleParams);
1155
+      }
1156
+    });
1157
+  }
1158
+
1159
+  static set components(components) {
1160
+    const Class = this;
1161
+    if (!Class.use) return;
1162
+    Class.use(components);
1163
+  }
1164
+
1165
+  static installModule(module, ...params) {
1166
+    const Class = this;
1167
+    if (!Class.prototype.modules) Class.prototype.modules = {};
1168
+    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);
1169
+    Class.prototype.modules[name] = module;
1170
+    // Prototype
1171
+    if (module.proto) {
1172
+      Object.keys(module.proto).forEach((key) => {
1173
+        Class.prototype[key] = module.proto[key];
1174
+      });
1175
+    }
1176
+    // Class
1177
+    if (module.static) {
1178
+      Object.keys(module.static).forEach((key) => {
1179
+        Class[key] = module.static[key];
1180
+      });
1181
+    }
1182
+    // Callback
1183
+    if (module.install) {
1184
+      module.install.apply(Class, params);
1185
+    }
1186
+    return Class;
1187
+  }
1188
+
1189
+  static use(module, ...params) {
1190
+    const Class = this;
1191
+    if (Array.isArray(module)) {
1192
+      module.forEach((m) => Class.installModule(m));
1193
+      return Class;
1194
+    }
1195
+    return Class.installModule(module, ...params);
1196
+  }
1197
+}
1198
+
1199
+function updateSize () {
1200
+  const swiper = this;
1201
+  let width;
1202
+  let height;
1203
+  const $el = swiper.$el;
1204
+  if (typeof swiper.params.width !== 'undefined') {
1205
+    width = swiper.params.width;
1206
+  } else {
1207
+    width = $el[0].clientWidth;
1208
+  }
1209
+  if (typeof swiper.params.height !== 'undefined') {
1210
+    height = swiper.params.height;
1211
+  } else {
1212
+    height = $el[0].clientHeight;
1213
+  }
1214
+  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
1215
+    return;
1216
+  }
1217
+
1218
+  // Subtract paddings
1219
+  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
1220
+  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
1221
+
1222
+  Utils.extend(swiper, {
1223
+    width,
1224
+    height,
1225
+    size: swiper.isHorizontal() ? width : height,
1226
+  });
1227
+}
1228
+
1229
+function updateSlides () {
1230
+  const swiper = this;
1231
+  const params = swiper.params;
1232
+
1233
+  const {
1234
+    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,
1235
+  } = swiper;
1236
+  const isVirtual = swiper.virtual && params.virtual.enabled;
1237
+  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
1238
+  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);
1239
+  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
1240
+  let snapGrid = [];
1241
+  const slidesGrid = [];
1242
+  const slidesSizesGrid = [];
1243
+
1244
+  function slidesForMargin(slideIndex) {
1245
+    if (!params.cssMode) return true;
1246
+    if (slideIndex === slides.length - 1) {
1247
+      return false;
1248
+    }
1249
+    return true;
1250
+  }
1251
+
1252
+  let offsetBefore = params.slidesOffsetBefore;
1253
+  if (typeof offsetBefore === 'function') {
1254
+    offsetBefore = params.slidesOffsetBefore.call(swiper);
1255
+  }
1256
+
1257
+  let offsetAfter = params.slidesOffsetAfter;
1258
+  if (typeof offsetAfter === 'function') {
1259
+    offsetAfter = params.slidesOffsetAfter.call(swiper);
1260
+  }
1261
+
1262
+  const previousSnapGridLength = swiper.snapGrid.length;
1263
+  const previousSlidesGridLength = swiper.snapGrid.length;
1264
+
1265
+  let spaceBetween = params.spaceBetween;
1266
+  let slidePosition = -offsetBefore;
1267
+  let prevSlideSize = 0;
1268
+  let index = 0;
1269
+  if (typeof swiperSize === 'undefined') {
1270
+    return;
1271
+  }
1272
+  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1273
+    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
1274
+  }
1275
+
1276
+  swiper.virtualSize = -spaceBetween;
1277
+
1278
+  // reset margins
1279
+  if (rtl) slides.css({ marginLeft: '', marginTop: '' });
1280
+  else slides.css({ marginRight: '', marginBottom: '' });
1281
+
1282
+  let slidesNumberEvenToRows;
1283
+  if (params.slidesPerColumn > 1) {
1284
+    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
1285
+      slidesNumberEvenToRows = slidesLength;
1286
+    } else {
1287
+      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
1288
+    }
1289
+    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
1290
+      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
1291
+    }
1292
+  }
1293
+
1294
+  // Calc slides
1295
+  let slideSize;
1296
+  const slidesPerColumn = params.slidesPerColumn;
1297
+  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
1298
+  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
1299
+  for (let i = 0; i < slidesLength; i += 1) {
1300
+    slideSize = 0;
1301
+    const slide = slides.eq(i);
1302
+    if (params.slidesPerColumn > 1) {
1303
+      // Set slides order
1304
+      let newSlideOrderIndex;
1305
+      let column;
1306
+      let row;
1307
+      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
1308
+        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
1309
+        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
1310
+        const columnsInGroup = groupIndex === 0
1311
+          ? params.slidesPerGroup
1312
+          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
1313
+        row = Math.floor(slideIndexInGroup / columnsInGroup);
1314
+        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;
1315
+
1316
+        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
1317
+        slide
1318
+          .css({
1319
+            '-webkit-box-ordinal-group': newSlideOrderIndex,
1320
+            '-moz-box-ordinal-group': newSlideOrderIndex,
1321
+            '-ms-flex-order': newSlideOrderIndex,
1322
+            '-webkit-order': newSlideOrderIndex,
1323
+            order: newSlideOrderIndex,
1324
+          });
1325
+      } else if (params.slidesPerColumnFill === 'column') {
1326
+        column = Math.floor(i / slidesPerColumn);
1327
+        row = i - (column * slidesPerColumn);
1328
+        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
1329
+          row += 1;
1330
+          if (row >= slidesPerColumn) {
1331
+            row = 0;
1332
+            column += 1;
1333
+          }
1334
+        }
1335
+      } else {
1336
+        row = Math.floor(i / slidesPerRow);
1337
+        column = i - (row * slidesPerRow);
1338
+      }
1339
+      slide.css(
1340
+        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,
1341
+        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)
1342
+      );
1343
+    }
1344
+    if (slide.css('display') === 'none') continue; // eslint-disable-line
1345
+
1346
+    if (params.slidesPerView === 'auto') {
1347
+      const slideStyles = win.getComputedStyle(slide[0], null);
1348
+      const currentTransform = slide[0].style.transform;
1349
+      const currentWebKitTransform = slide[0].style.webkitTransform;
1350
+      if (currentTransform) {
1351
+        slide[0].style.transform = 'none';
1352
+      }
1353
+      if (currentWebKitTransform) {
1354
+        slide[0].style.webkitTransform = 'none';
1355
+      }
1356
+      if (params.roundLengths) {
1357
+        slideSize = swiper.isHorizontal()
1358
+          ? slide.outerWidth(true)
1359
+          : slide.outerHeight(true);
1360
+      } else {
1361
+        // eslint-disable-next-line
1362
+        if (swiper.isHorizontal()) {
1363
+          const width = parseFloat(slideStyles.getPropertyValue('width'));
1364
+          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
1365
+          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
1366
+          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
1367
+          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
1368
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
1369
+          if (boxSizing && boxSizing === 'border-box') {
1370
+            slideSize = width + marginLeft + marginRight;
1371
+          } else {
1372
+            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
1373
+          }
1374
+        } else {
1375
+          const height = parseFloat(slideStyles.getPropertyValue('height'));
1376
+          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
1377
+          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
1378
+          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
1379
+          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
1380
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
1381
+          if (boxSizing && boxSizing === 'border-box') {
1382
+            slideSize = height + marginTop + marginBottom;
1383
+          } else {
1384
+            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
1385
+          }
1386
+        }
1387
+      }
1388
+      if (currentTransform) {
1389
+        slide[0].style.transform = currentTransform;
1390
+      }
1391
+      if (currentWebKitTransform) {
1392
+        slide[0].style.webkitTransform = currentWebKitTransform;
1393
+      }
1394
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
1395
+    } else {
1396
+      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
1397
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
1398
+
1399
+      if (slides[i]) {
1400
+        if (swiper.isHorizontal()) {
1401
+          slides[i].style.width = `${slideSize}px`;
1402
+        } else {
1403
+          slides[i].style.height = `${slideSize}px`;
1404
+        }
1405
+      }
1406
+    }
1407
+    if (slides[i]) {
1408
+      slides[i].swiperSlideSize = slideSize;
1409
+    }
1410
+    slidesSizesGrid.push(slideSize);
1411
+
1412
+
1413
+    if (params.centeredSlides) {
1414
+      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
1415
+      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
1416
+      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
1417
+      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
1418
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1419
+      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1420
+      slidesGrid.push(slidePosition);
1421
+    } else {
1422
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
1423
+      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
1424
+      slidesGrid.push(slidePosition);
1425
+      slidePosition = slidePosition + slideSize + spaceBetween;
1426
+    }
1427
+
1428
+    swiper.virtualSize += slideSize + spaceBetween;
1429
+
1430
+    prevSlideSize = slideSize;
1431
+
1432
+    index += 1;
1433
+  }
1434
+  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
1435
+  let newSlidesGrid;
1436
+
1437
+  if (
1438
+    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
1439
+    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
1440
+  }
1441
+  if (params.setWrapperSize) {
1442
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
1443
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
1444
+  }
1445
+
1446
+  if (params.slidesPerColumn > 1) {
1447
+    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
1448
+    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
1449
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
1450
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
1451
+    if (params.centeredSlides) {
1452
+      newSlidesGrid = [];
1453
+      for (let i = 0; i < snapGrid.length; i += 1) {
1454
+        let slidesGridItem = snapGrid[i];
1455
+        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
1456
+        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
1457
+      }
1458
+      snapGrid = newSlidesGrid;
1459
+    }
1460
+  }
1461
+
1462
+  // Remove last grid elements depending on width
1463
+  if (!params.centeredSlides) {
1464
+    newSlidesGrid = [];
1465
+    for (let i = 0; i < snapGrid.length; i += 1) {
1466
+      let slidesGridItem = snapGrid[i];
1467
+      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
1468
+      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
1469
+        newSlidesGrid.push(slidesGridItem);
1470
+      }
1471
+    }
1472
+    snapGrid = newSlidesGrid;
1473
+    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
1474
+      snapGrid.push(swiper.virtualSize - swiperSize);
1475
+    }
1476
+  }
1477
+  if (snapGrid.length === 0) snapGrid = [0];
1478
+
1479
+  if (params.spaceBetween !== 0) {
1480
+    if (swiper.isHorizontal()) {
1481
+      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });
1482
+      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });
1483
+    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });
1484
+  }
1485
+
1486
+  if (params.centeredSlides && params.centeredSlidesBounds) {
1487
+    let allSlidesSize = 0;
1488
+    slidesSizesGrid.forEach((slideSizeValue) => {
1489
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
1490
+    });
1491
+    allSlidesSize -= params.spaceBetween;
1492
+    const maxSnap = allSlidesSize - swiperSize;
1493
+    snapGrid = snapGrid.map((snap) => {
1494
+      if (snap < 0) return -offsetBefore;
1495
+      if (snap > maxSnap) return maxSnap + offsetAfter;
1496
+      return snap;
1497
+    });
1498
+  }
1499
+
1500
+  if (params.centerInsufficientSlides) {
1501
+    let allSlidesSize = 0;
1502
+    slidesSizesGrid.forEach((slideSizeValue) => {
1503
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
1504
+    });
1505
+    allSlidesSize -= params.spaceBetween;
1506
+    if (allSlidesSize < swiperSize) {
1507
+      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
1508
+      snapGrid.forEach((snap, snapIndex) => {
1509
+        snapGrid[snapIndex] = snap - allSlidesOffset;
1510
+      });
1511
+      slidesGrid.forEach((snap, snapIndex) => {
1512
+        slidesGrid[snapIndex] = snap + allSlidesOffset;
1513
+      });
1514
+    }
1515
+  }
1516
+
1517
+  Utils.extend(swiper, {
1518
+    slides,
1519
+    snapGrid,
1520
+    slidesGrid,
1521
+    slidesSizesGrid,
1522
+  });
1523
+
1524
+  if (slidesLength !== previousSlidesLength) {
1525
+    swiper.emit('slidesLengthChange');
1526
+  }
1527
+  if (snapGrid.length !== previousSnapGridLength) {
1528
+    if (swiper.params.watchOverflow) swiper.checkOverflow();
1529
+    swiper.emit('snapGridLengthChange');
1530
+  }
1531
+  if (slidesGrid.length !== previousSlidesGridLength) {
1532
+    swiper.emit('slidesGridLengthChange');
1533
+  }
1534
+
1535
+  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
1536
+    swiper.updateSlidesOffset();
1537
+  }
1538
+}
1539
+
1540
+function updateAutoHeight (speed) {
1541
+  const swiper = this;
1542
+  const activeSlides = [];
1543
+  let newHeight = 0;
1544
+  let i;
1545
+  if (typeof speed === 'number') {
1546
+    swiper.setTransition(speed);
1547
+  } else if (speed === true) {
1548
+    swiper.setTransition(swiper.params.speed);
1549
+  }
1550
+  // Find slides currently in view
1551
+  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
1552
+    if (swiper.params.centeredSlides) {
1553
+      swiper.visibleSlides.each((index, slide) => {
1554
+        activeSlides.push(slide);
1555
+      });
1556
+    } else {
1557
+      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
1558
+        const index = swiper.activeIndex + i;
1559
+        if (index > swiper.slides.length) break;
1560
+        activeSlides.push(swiper.slides.eq(index)[0]);
1561
+      }
1562
+    }
1563
+  } else {
1564
+    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
1565
+  }
1566
+
1567
+  // Find new height from highest slide in view
1568
+  for (i = 0; i < activeSlides.length; i += 1) {
1569
+    if (typeof activeSlides[i] !== 'undefined') {
1570
+      const height = activeSlides[i].offsetHeight;
1571
+      newHeight = height > newHeight ? height : newHeight;
1572
+    }
1573
+  }
1574
+
1575
+  // Update Height
1576
+  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);
1577
+}
1578
+
1579
+function updateSlidesOffset () {
1580
+  const swiper = this;
1581
+  const slides = swiper.slides;
1582
+  for (let i = 0; i < slides.length; i += 1) {
1583
+    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
1584
+  }
1585
+}
1586
+
1587
+function updateSlidesProgress (translate = (this && this.translate) || 0) {
1588
+  const swiper = this;
1589
+  const params = swiper.params;
1590
+
1591
+  const { slides, rtlTranslate: rtl } = swiper;
1592
+
1593
+  if (slides.length === 0) return;
1594
+  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
1595
+
1596
+  let offsetCenter = -translate;
1597
+  if (rtl) offsetCenter = translate;
1598
+
1599
+  // Visible Slides
1600
+  slides.removeClass(params.slideVisibleClass);
1601
+
1602
+  swiper.visibleSlidesIndexes = [];
1603
+  swiper.visibleSlides = [];
1604
+
1605
+  for (let i = 0; i < slides.length; i += 1) {
1606
+    const slide = slides[i];
1607
+    const slideProgress = (
1608
+      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
1609
+    ) / (slide.swiperSlideSize + params.spaceBetween);
1610
+    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
1611
+      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);
1612
+      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
1613
+      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
1614
+                || (slideAfter > 1 && slideAfter <= swiper.size)
1615
+                || (slideBefore <= 0 && slideAfter >= swiper.size);
1616
+      if (isVisible) {
1617
+        swiper.visibleSlides.push(slide);
1618
+        swiper.visibleSlidesIndexes.push(i);
1619
+        slides.eq(i).addClass(params.slideVisibleClass);
1620
+      }
1621
+    }
1622
+    slide.progress = rtl ? -slideProgress : slideProgress;
1623
+  }
1624
+  swiper.visibleSlides = $(swiper.visibleSlides);
1625
+}
1626
+
1627
+function updateProgress (translate) {
1628
+  const swiper = this;
1629
+  if (typeof translate === 'undefined') {
1630
+    const multiplier = swiper.rtlTranslate ? -1 : 1;
1631
+    // eslint-disable-next-line
1632
+    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
1633
+  }
1634
+  const params = swiper.params;
1635
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1636
+  let { progress, isBeginning, isEnd } = swiper;
1637
+  const wasBeginning = isBeginning;
1638
+  const wasEnd = isEnd;
1639
+  if (translatesDiff === 0) {
1640
+    progress = 0;
1641
+    isBeginning = true;
1642
+    isEnd = true;
1643
+  } else {
1644
+    progress = (translate - swiper.minTranslate()) / (translatesDiff);
1645
+    isBeginning = progress <= 0;
1646
+    isEnd = progress >= 1;
1647
+  }
1648
+  Utils.extend(swiper, {
1649
+    progress,
1650
+    isBeginning,
1651
+    isEnd,
1652
+  });
1653
+
1654
+  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);
1655
+
1656
+  if (isBeginning && !wasBeginning) {
1657
+    swiper.emit('reachBeginning toEdge');
1658
+  }
1659
+  if (isEnd && !wasEnd) {
1660
+    swiper.emit('reachEnd toEdge');
1661
+  }
1662
+  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
1663
+    swiper.emit('fromEdge');
1664
+  }
1665
+
1666
+  swiper.emit('progress', progress);
1667
+}
1668
+
1669
+function updateSlidesClasses () {
1670
+  const swiper = this;
1671
+
1672
+  const {
1673
+    slides, params, $wrapperEl, activeIndex, realIndex,
1674
+  } = swiper;
1675
+  const isVirtual = swiper.virtual && params.virtual.enabled;
1676
+
1677
+  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);
1678
+
1679
+  let activeSlide;
1680
+  if (isVirtual) {
1681
+    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`);
1682
+  } else {
1683
+    activeSlide = slides.eq(activeIndex);
1684
+  }
1685
+
1686
+  // Active classes
1687
+  activeSlide.addClass(params.slideActiveClass);
1688
+
1689
+  if (params.loop) {
1690
+    // Duplicate to all looped slides
1691
+    if (activeSlide.hasClass(params.slideDuplicateClass)) {
1692
+      $wrapperEl
1693
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`)
1694
+        .addClass(params.slideDuplicateActiveClass);
1695
+    } else {
1696
+      $wrapperEl
1697
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`)
1698
+        .addClass(params.slideDuplicateActiveClass);
1699
+    }
1700
+  }
1701
+  // Next Slide
1702
+  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);
1703
+  if (params.loop && nextSlide.length === 0) {
1704
+    nextSlide = slides.eq(0);
1705
+    nextSlide.addClass(params.slideNextClass);
1706
+  }
1707
+  // Prev Slide
1708
+  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);
1709
+  if (params.loop && prevSlide.length === 0) {
1710
+    prevSlide = slides.eq(-1);
1711
+    prevSlide.addClass(params.slidePrevClass);
1712
+  }
1713
+  if (params.loop) {
1714
+    // Duplicate to all looped slides
1715
+    if (nextSlide.hasClass(params.slideDuplicateClass)) {
1716
+      $wrapperEl
1717
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
1718
+        .addClass(params.slideDuplicateNextClass);
1719
+    } else {
1720
+      $wrapperEl
1721
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
1722
+        .addClass(params.slideDuplicateNextClass);
1723
+    }
1724
+    if (prevSlide.hasClass(params.slideDuplicateClass)) {
1725
+      $wrapperEl
1726
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
1727
+        .addClass(params.slideDuplicatePrevClass);
1728
+    } else {
1729
+      $wrapperEl
1730
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
1731
+        .addClass(params.slideDuplicatePrevClass);
1732
+    }
1733
+  }
1734
+}
1735
+
1736
+function updateActiveIndex (newActiveIndex) {
1737
+  const swiper = this;
1738
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1739
+  const {
1740
+    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,
1741
+  } = swiper;
1742
+  let activeIndex = newActiveIndex;
1743
+  let snapIndex;
1744
+  if (typeof activeIndex === 'undefined') {
1745
+    for (let i = 0; i < slidesGrid.length; i += 1) {
1746
+      if (typeof slidesGrid[i + 1] !== 'undefined') {
1747
+        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
1748
+          activeIndex = i;
1749
+        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
1750
+          activeIndex = i + 1;
1751
+        }
1752
+      } else if (translate >= slidesGrid[i]) {
1753
+        activeIndex = i;
1754
+      }
1755
+    }
1756
+    // Normalize slideIndex
1757
+    if (params.normalizeSlideIndex) {
1758
+      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
1759
+    }
1760
+  }
1761
+  if (snapGrid.indexOf(translate) >= 0) {
1762
+    snapIndex = snapGrid.indexOf(translate);
1763
+  } else {
1764
+    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
1765
+    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
1766
+  }
1767
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1768
+  if (activeIndex === previousIndex) {
1769
+    if (snapIndex !== previousSnapIndex) {
1770
+      swiper.snapIndex = snapIndex;
1771
+      swiper.emit('snapIndexChange');
1772
+    }
1773
+    return;
1774
+  }
1775
+
1776
+  // Get real index
1777
+  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
1778
+
1779
+  Utils.extend(swiper, {
1780
+    snapIndex,
1781
+    realIndex,
1782
+    previousIndex,
1783
+    activeIndex,
1784
+  });
1785
+  swiper.emit('activeIndexChange');
1786
+  swiper.emit('snapIndexChange');
1787
+  if (previousRealIndex !== realIndex) {
1788
+    swiper.emit('realIndexChange');
1789
+  }
1790
+  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
1791
+    swiper.emit('slideChange');
1792
+  }
1793
+}
1794
+
1795
+function updateClickedSlide (e) {
1796
+  const swiper = this;
1797
+  const params = swiper.params;
1798
+  const slide = $(e.target).closest(`.${params.slideClass}`)[0];
1799
+  let slideFound = false;
1800
+  if (slide) {
1801
+    for (let i = 0; i < swiper.slides.length; i += 1) {
1802
+      if (swiper.slides[i] === slide) slideFound = true;
1803
+    }
1804
+  }
1805
+
1806
+  if (slide && slideFound) {
1807
+    swiper.clickedSlide = slide;
1808
+    if (swiper.virtual && swiper.params.virtual.enabled) {
1809
+      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
1810
+    } else {
1811
+      swiper.clickedIndex = $(slide).index();
1812
+    }
1813
+  } else {
1814
+    swiper.clickedSlide = undefined;
1815
+    swiper.clickedIndex = undefined;
1816
+    return;
1817
+  }
1818
+  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
1819
+    swiper.slideToClickedSlide();
1820
+  }
1821
+}
1822
+
1823
+var update = {
1824
+  updateSize,
1825
+  updateSlides,
1826
+  updateAutoHeight,
1827
+  updateSlidesOffset,
1828
+  updateSlidesProgress,
1829
+  updateProgress,
1830
+  updateSlidesClasses,
1831
+  updateActiveIndex,
1832
+  updateClickedSlide,
1833
+};
1834
+
1835
+function getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {
1836
+  const swiper = this;
1837
+
1838
+  const {
1839
+    params, rtlTranslate: rtl, translate, $wrapperEl,
1840
+  } = swiper;
1841
+
1842
+  if (params.virtualTranslate) {
1843
+    return rtl ? -translate : translate;
1844
+  }
1845
+  if (params.cssMode) {
1846
+    return translate;
1847
+  }
1848
+
1849
+  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
1850
+  if (rtl) currentTranslate = -currentTranslate;
1851
+
1852
+  return currentTranslate || 0;
1853
+}
1854
+
1855
+function setTranslate (translate, byController) {
1856
+  const swiper = this;
1857
+  const {
1858
+    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,
1859
+  } = swiper;
1860
+  let x = 0;
1861
+  let y = 0;
1862
+  const z = 0;
1863
+
1864
+  if (swiper.isHorizontal()) {
1865
+    x = rtl ? -translate : translate;
1866
+  } else {
1867
+    y = translate;
1868
+  }
1869
+
1870
+  if (params.roundLengths) {
1871
+    x = Math.floor(x);
1872
+    y = Math.floor(y);
1873
+  }
1874
+
1875
+  if (params.cssMode) {
1876
+    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1877
+  } else if (!params.virtualTranslate) {
1878
+    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
1879
+  }
1880
+  swiper.previousTranslate = swiper.translate;
1881
+  swiper.translate = swiper.isHorizontal() ? x : y;
1882
+
1883
+  // Check if we need to update progress
1884
+  let newProgress;
1885
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1886
+  if (translatesDiff === 0) {
1887
+    newProgress = 0;
1888
+  } else {
1889
+    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
1890
+  }
1891
+  if (newProgress !== progress) {
1892
+    swiper.updateProgress(translate);
1893
+  }
1894
+
1895
+  swiper.emit('setTranslate', swiper.translate, byController);
1896
+}
1897
+
1898
+function minTranslate () {
1899
+  return (-this.snapGrid[0]);
1900
+}
1901
+
1902
+function maxTranslate () {
1903
+  return (-this.snapGrid[this.snapGrid.length - 1]);
1904
+}
1905
+
1906
+function translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
1907
+  const swiper = this;
1908
+
1909
+  const {
1910
+    params,
1911
+    wrapperEl,
1912
+  } = swiper;
1913
+
1914
+  if (swiper.animating && params.preventInteractionOnTransition) {
1915
+    return false;
1916
+  }
1917
+
1918
+  const minTranslate = swiper.minTranslate();
1919
+  const maxTranslate = swiper.maxTranslate();
1920
+  let newTranslate;
1921
+  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
1922
+  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
1923
+  else newTranslate = translate;
1924
+
1925
+  // Update progress
1926
+  swiper.updateProgress(newTranslate);
1927
+
1928
+  if (params.cssMode) {
1929
+    const isH = swiper.isHorizontal();
1930
+    if (speed === 0) {
1931
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1932
+    } else {
1933
+      // eslint-disable-next-line
1934
+      if (wrapperEl.scrollTo) {
1935
+        wrapperEl.scrollTo({
1936
+          [isH ? 'left' : 'top']: -newTranslate,
1937
+          behavior: 'smooth',
1938
+        });
1939
+      } else {
1940
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1941
+      }
1942
+    }
1943
+    return true;
1944
+  }
1945
+
1946
+  if (speed === 0) {
1947
+    swiper.setTransition(0);
1948
+    swiper.setTranslate(newTranslate);
1949
+    if (runCallbacks) {
1950
+      swiper.emit('beforeTransitionStart', speed, internal);
1951
+      swiper.emit('transitionEnd');
1952
+    }
1953
+  } else {
1954
+    swiper.setTransition(speed);
1955
+    swiper.setTranslate(newTranslate);
1956
+    if (runCallbacks) {
1957
+      swiper.emit('beforeTransitionStart', speed, internal);
1958
+      swiper.emit('transitionStart');
1959
+    }
1960
+    if (!swiper.animating) {
1961
+      swiper.animating = true;
1962
+      if (!swiper.onTranslateToWrapperTransitionEnd) {
1963
+        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
1964
+          if (!swiper || swiper.destroyed) return;
1965
+          if (e.target !== this) return;
1966
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1967
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1968
+          swiper.onTranslateToWrapperTransitionEnd = null;
1969
+          delete swiper.onTranslateToWrapperTransitionEnd;
1970
+          if (runCallbacks) {
1971
+            swiper.emit('transitionEnd');
1972
+          }
1973
+        };
1974
+      }
1975
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1976
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1977
+    }
1978
+  }
1979
+
1980
+  return true;
1981
+}
1982
+
1983
+var translate = {
1984
+  getTranslate,
1985
+  setTranslate,
1986
+  minTranslate,
1987
+  maxTranslate,
1988
+  translateTo,
1989
+};
1990
+
1991
+function setTransition (duration, byController) {
1992
+  const swiper = this;
1993
+
1994
+  if (!swiper.params.cssMode) {
1995
+    swiper.$wrapperEl.transition(duration);
1996
+  }
1997
+
1998
+  swiper.emit('setTransition', duration, byController);
1999
+}
2000
+
2001
+function transitionStart (runCallbacks = true, direction) {
2002
+  const swiper = this;
2003
+  const { activeIndex, params, previousIndex } = swiper;
2004
+  if (params.cssMode) return;
2005
+  if (params.autoHeight) {
2006
+    swiper.updateAutoHeight();
2007
+  }
2008
+
2009
+  let dir = direction;
2010
+  if (!dir) {
2011
+    if (activeIndex > previousIndex) dir = 'next';
2012
+    else if (activeIndex < previousIndex) dir = 'prev';
2013
+    else dir = 'reset';
2014
+  }
2015
+
2016
+  swiper.emit('transitionStart');
2017
+
2018
+  if (runCallbacks && activeIndex !== previousIndex) {
2019
+    if (dir === 'reset') {
2020
+      swiper.emit('slideResetTransitionStart');
2021
+      return;
2022
+    }
2023
+    swiper.emit('slideChangeTransitionStart');
2024
+    if (dir === 'next') {
2025
+      swiper.emit('slideNextTransitionStart');
2026
+    } else {
2027
+      swiper.emit('slidePrevTransitionStart');
2028
+    }
2029
+  }
2030
+}
2031
+
2032
+function transitionEnd$1 (runCallbacks = true, direction) {
2033
+  const swiper = this;
2034
+  const { activeIndex, previousIndex, params } = swiper;
2035
+  swiper.animating = false;
2036
+  if (params.cssMode) return;
2037
+  swiper.setTransition(0);
2038
+
2039
+  let dir = direction;
2040
+  if (!dir) {
2041
+    if (activeIndex > previousIndex) dir = 'next';
2042
+    else if (activeIndex < previousIndex) dir = 'prev';
2043
+    else dir = 'reset';
2044
+  }
2045
+
2046
+  swiper.emit('transitionEnd');
2047
+
2048
+  if (runCallbacks && activeIndex !== previousIndex) {
2049
+    if (dir === 'reset') {
2050
+      swiper.emit('slideResetTransitionEnd');
2051
+      return;
2052
+    }
2053
+    swiper.emit('slideChangeTransitionEnd');
2054
+    if (dir === 'next') {
2055
+      swiper.emit('slideNextTransitionEnd');
2056
+    } else {
2057
+      swiper.emit('slidePrevTransitionEnd');
2058
+    }
2059
+  }
2060
+}
2061
+
2062
+var transition$1 = {
2063
+  setTransition,
2064
+  transitionStart,
2065
+  transitionEnd: transitionEnd$1,
2066
+};
2067
+
2068
+function slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
2069
+  const swiper = this;
2070
+  let slideIndex = index;
2071
+  if (slideIndex < 0) slideIndex = 0;
2072
+
2073
+  const {
2074
+    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,
2075
+  } = swiper;
2076
+  if (swiper.animating && params.preventInteractionOnTransition) {
2077
+    return false;
2078
+  }
2079
+
2080
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
2081
+  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
2082
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
2083
+
2084
+  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
2085
+    swiper.emit('beforeSlideChangeStart');
2086
+  }
2087
+
2088
+  const translate = -snapGrid[snapIndex];
2089
+
2090
+  // Update progress
2091
+  swiper.updateProgress(translate);
2092
+
2093
+  // Normalize slideIndex
2094
+  if (params.normalizeSlideIndex) {
2095
+    for (let i = 0; i < slidesGrid.length; i += 1) {
2096
+      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
2097
+        slideIndex = i;
2098
+      }
2099
+    }
2100
+  }
2101
+  // Directions locks
2102
+  if (swiper.initialized && slideIndex !== activeIndex) {
2103
+    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
2104
+      return false;
2105
+    }
2106
+    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
2107
+      if ((activeIndex || 0) !== slideIndex) return false;
2108
+    }
2109
+  }
2110
+
2111
+  let direction;
2112
+  if (slideIndex > activeIndex) direction = 'next';
2113
+  else if (slideIndex < activeIndex) direction = 'prev';
2114
+  else direction = 'reset';
2115
+
2116
+
2117
+  // Update Index
2118
+  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
2119
+    swiper.updateActiveIndex(slideIndex);
2120
+    // Update Height
2121
+    if (params.autoHeight) {
2122
+      swiper.updateAutoHeight();
2123
+    }
2124
+    swiper.updateSlidesClasses();
2125
+    if (params.effect !== 'slide') {
2126
+      swiper.setTranslate(translate);
2127
+    }
2128
+    if (direction !== 'reset') {
2129
+      swiper.transitionStart(runCallbacks, direction);
2130
+      swiper.transitionEnd(runCallbacks, direction);
2131
+    }
2132
+    return false;
2133
+  }
2134
+  if (params.cssMode) {
2135
+    const isH = swiper.isHorizontal();
2136
+    let t = -translate;
2137
+    if (rtl) {
2138
+      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
2139
+    }
2140
+    if (speed === 0) {
2141
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2142
+    } else {
2143
+      // eslint-disable-next-line
2144
+      if (wrapperEl.scrollTo) {
2145
+        wrapperEl.scrollTo({
2146
+          [isH ? 'left' : 'top']: t,
2147
+          behavior: 'smooth',
2148
+        });
2149
+      } else {
2150
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2151
+      }
2152
+    }
2153
+    return true;
2154
+  }
2155
+
2156
+  if (speed === 0) {
2157
+    swiper.setTransition(0);
2158
+    swiper.setTranslate(translate);
2159
+    swiper.updateActiveIndex(slideIndex);
2160
+    swiper.updateSlidesClasses();
2161
+    swiper.emit('beforeTransitionStart', speed, internal);
2162
+    swiper.transitionStart(runCallbacks, direction);
2163
+    swiper.transitionEnd(runCallbacks, direction);
2164
+  } else {
2165
+    swiper.setTransition(speed);
2166
+    swiper.setTranslate(translate);
2167
+    swiper.updateActiveIndex(slideIndex);
2168
+    swiper.updateSlidesClasses();
2169
+    swiper.emit('beforeTransitionStart', speed, internal);
2170
+    swiper.transitionStart(runCallbacks, direction);
2171
+    if (!swiper.animating) {
2172
+      swiper.animating = true;
2173
+      if (!swiper.onSlideToWrapperTransitionEnd) {
2174
+        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
2175
+          if (!swiper || swiper.destroyed) return;
2176
+          if (e.target !== this) return;
2177
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2178
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2179
+          swiper.onSlideToWrapperTransitionEnd = null;
2180
+          delete swiper.onSlideToWrapperTransitionEnd;
2181
+          swiper.transitionEnd(runCallbacks, direction);
2182
+        };
2183
+      }
2184
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2185
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2186
+    }
2187
+  }
2188
+
2189
+  return true;
2190
+}
2191
+
2192
+function slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
2193
+  const swiper = this;
2194
+  let newIndex = index;
2195
+  if (swiper.params.loop) {
2196
+    newIndex += swiper.loopedSlides;
2197
+  }
2198
+
2199
+  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
2200
+}
2201
+
2202
+/* eslint no-unused-vars: "off" */
2203
+function slideNext (speed = this.params.speed, runCallbacks = true, internal) {
2204
+  const swiper = this;
2205
+  const { params, animating } = swiper;
2206
+  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
2207
+  if (params.loop) {
2208
+    if (animating) return false;
2209
+    swiper.loopFix();
2210
+    // eslint-disable-next-line
2211
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2212
+  }
2213
+  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2214
+}
2215
+
2216
+/* eslint no-unused-vars: "off" */
2217
+function slidePrev (speed = this.params.speed, runCallbacks = true, internal) {
2218
+  const swiper = this;
2219
+  const {
2220
+    params, animating, snapGrid, slidesGrid, rtlTranslate,
2221
+  } = swiper;
2222
+
2223
+  if (params.loop) {
2224
+    if (animating) return false;
2225
+    swiper.loopFix();
2226
+    // eslint-disable-next-line
2227
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2228
+  }
2229
+  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
2230
+  function normalize(val) {
2231
+    if (val < 0) return -Math.floor(Math.abs(val));
2232
+    return Math.floor(val);
2233
+  }
2234
+  const normalizedTranslate = normalize(translate);
2235
+  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
2236
+  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));
2237
+
2238
+  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
2239
+  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
2240
+  if (typeof prevSnap === 'undefined' && params.cssMode) {
2241
+    snapGrid.forEach((snap) => {
2242
+      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
2243
+    });
2244
+  }
2245
+  let prevIndex;
2246
+  if (typeof prevSnap !== 'undefined') {
2247
+    prevIndex = slidesGrid.indexOf(prevSnap);
2248
+    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
2249
+  }
2250
+  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2251
+}
2252
+
2253
+/* eslint no-unused-vars: "off" */
2254
+function slideReset (speed = this.params.speed, runCallbacks = true, internal) {
2255
+  const swiper = this;
2256
+  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
2257
+}
2258
+
2259
+/* eslint no-unused-vars: "off" */
2260
+function slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
2261
+  const swiper = this;
2262
+  let index = swiper.activeIndex;
2263
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
2264
+  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
2265
+
2266
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
2267
+
2268
+  if (translate >= swiper.snapGrid[snapIndex]) {
2269
+    // The current translate is on or after the current snap index, so the choice
2270
+    // is between the current index and the one after it.
2271
+    const currentSnap = swiper.snapGrid[snapIndex];
2272
+    const nextSnap = swiper.snapGrid[snapIndex + 1];
2273
+    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
2274
+      index += swiper.params.slidesPerGroup;
2275
+    }
2276
+  } else {
2277
+    // The current translate is before the current snap index, so the choice
2278
+    // is between the current index and the one before it.
2279
+    const prevSnap = swiper.snapGrid[snapIndex - 1];
2280
+    const currentSnap = swiper.snapGrid[snapIndex];
2281
+    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {
2282
+      index -= swiper.params.slidesPerGroup;
2283
+    }
2284
+  }
2285
+  index = Math.max(index, 0);
2286
+  index = Math.min(index, swiper.slidesGrid.length - 1);
2287
+
2288
+  return swiper.slideTo(index, speed, runCallbacks, internal);
2289
+}
2290
+
2291
+function slideToClickedSlide () {
2292
+  const swiper = this;
2293
+  const { params, $wrapperEl } = swiper;
2294
+
2295
+  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
2296
+  let slideToIndex = swiper.clickedIndex;
2297
+  let realIndex;
2298
+  if (params.loop) {
2299
+    if (swiper.animating) return;
2300
+    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
2301
+    if (params.centeredSlides) {
2302
+      if (
2303
+        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
2304
+        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
2305
+      ) {
2306
+        swiper.loopFix();
2307
+        slideToIndex = $wrapperEl
2308
+          .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
2309
+          .eq(0)
2310
+          .index();
2311
+
2312
+        Utils.nextTick(() => {
2313
+          swiper.slideTo(slideToIndex);
2314
+        });
2315
+      } else {
2316
+        swiper.slideTo(slideToIndex);
2317
+      }
2318
+    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
2319
+      swiper.loopFix();
2320
+      slideToIndex = $wrapperEl
2321
+        .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
2322
+        .eq(0)
2323
+        .index();
2324
+
2325
+      Utils.nextTick(() => {
2326
+        swiper.slideTo(slideToIndex);
2327
+      });
2328
+    } else {
2329
+      swiper.slideTo(slideToIndex);
2330
+    }
2331
+  } else {
2332
+    swiper.slideTo(slideToIndex);
2333
+  }
2334
+}
2335
+
2336
+var slide = {
2337
+  slideTo,
2338
+  slideToLoop,
2339
+  slideNext,
2340
+  slidePrev,
2341
+  slideReset,
2342
+  slideToClosest,
2343
+  slideToClickedSlide,
2344
+};
2345
+
2346
+function loopCreate () {
2347
+  const swiper = this;
2348
+  const { params, $wrapperEl } = swiper;
2349
+  // Remove duplicated slides
2350
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();
2351
+
2352
+  let slides = $wrapperEl.children(`.${params.slideClass}`);
2353
+
2354
+  if (params.loopFillGroupWithBlank) {
2355
+    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
2356
+    if (blankSlidesNum !== params.slidesPerGroup) {
2357
+      for (let i = 0; i < blankSlidesNum; i += 1) {
2358
+        const blankNode = $(doc.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);
2359
+        $wrapperEl.append(blankNode);
2360
+      }
2361
+      slides = $wrapperEl.children(`.${params.slideClass}`);
2362
+    }
2363
+  }
2364
+
2365
+  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
2366
+
2367
+  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
2368
+  swiper.loopedSlides += params.loopAdditionalSlides;
2369
+  if (swiper.loopedSlides > slides.length) {
2370
+    swiper.loopedSlides = slides.length;
2371
+  }
2372
+
2373
+  const prependSlides = [];
2374
+  const appendSlides = [];
2375
+  slides.each((index, el) => {
2376
+    const slide = $(el);
2377
+    if (index < swiper.loopedSlides) appendSlides.push(el);
2378
+    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
2379
+    slide.attr('data-swiper-slide-index', index);
2380
+  });
2381
+  for (let i = 0; i < appendSlides.length; i += 1) {
2382
+    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
2383
+  }
2384
+  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {
2385
+    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
2386
+  }
2387
+}
2388
+
2389
+function loopFix () {
2390
+  const swiper = this;
2391
+
2392
+  swiper.emit('beforeLoopFix');
2393
+
2394
+  const {
2395
+    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,
2396
+  } = swiper;
2397
+  let newIndex;
2398
+  swiper.allowSlidePrev = true;
2399
+  swiper.allowSlideNext = true;
2400
+
2401
+  const snapTranslate = -snapGrid[activeIndex];
2402
+  const diff = snapTranslate - swiper.getTranslate();
2403
+
2404
+  // Fix For Negative Oversliding
2405
+  if (activeIndex < loopedSlides) {
2406
+    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
2407
+    newIndex += loopedSlides;
2408
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
2409
+    if (slideChanged && diff !== 0) {
2410
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
2411
+    }
2412
+  } else if (activeIndex >= slides.length - loopedSlides) {
2413
+    // Fix For Positive Oversliding
2414
+    newIndex = -slides.length + activeIndex + loopedSlides;
2415
+    newIndex += loopedSlides;
2416
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
2417
+    if (slideChanged && diff !== 0) {
2418
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
2419
+    }
2420
+  }
2421
+  swiper.allowSlidePrev = allowSlidePrev;
2422
+  swiper.allowSlideNext = allowSlideNext;
2423
+
2424
+  swiper.emit('loopFix');
2425
+}
2426
+
2427
+function loopDestroy () {
2428
+  const swiper = this;
2429
+  const { $wrapperEl, params, slides } = swiper;
2430
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();
2431
+  slides.removeAttr('data-swiper-slide-index');
2432
+}
2433
+
2434
+var loop = {
2435
+  loopCreate,
2436
+  loopFix,
2437
+  loopDestroy,
2438
+};
2439
+
2440
+function setGrabCursor (moving) {
2441
+  const swiper = this;
2442
+  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
2443
+  const el = swiper.el;
2444
+  el.style.cursor = 'move';
2445
+  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
2446
+  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
2447
+  el.style.cursor = moving ? 'grabbing' : 'grab';
2448
+}
2449
+
2450
+function unsetGrabCursor () {
2451
+  const swiper = this;
2452
+  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
2453
+  swiper.el.style.cursor = '';
2454
+}
2455
+
2456
+var grabCursor = {
2457
+  setGrabCursor,
2458
+  unsetGrabCursor,
2459
+};
2460
+
2461
+function appendSlide (slides) {
2462
+  const swiper = this;
2463
+  const { $wrapperEl, params } = swiper;
2464
+  if (params.loop) {
2465
+    swiper.loopDestroy();
2466
+  }
2467
+  if (typeof slides === 'object' && 'length' in slides) {
2468
+    for (let i = 0; i < slides.length; i += 1) {
2469
+      if (slides[i]) $wrapperEl.append(slides[i]);
2470
+    }
2471
+  } else {
2472
+    $wrapperEl.append(slides);
2473
+  }
2474
+  if (params.loop) {
2475
+    swiper.loopCreate();
2476
+  }
2477
+  if (!(params.observer && Support.observer)) {
2478
+    swiper.update();
2479
+  }
2480
+}
2481
+
2482
+function prependSlide (slides) {
2483
+  const swiper = this;
2484
+  const { params, $wrapperEl, activeIndex } = swiper;
2485
+
2486
+  if (params.loop) {
2487
+    swiper.loopDestroy();
2488
+  }
2489
+  let newActiveIndex = activeIndex + 1;
2490
+  if (typeof slides === 'object' && 'length' in slides) {
2491
+    for (let i = 0; i < slides.length; i += 1) {
2492
+      if (slides[i]) $wrapperEl.prepend(slides[i]);
2493
+    }
2494
+    newActiveIndex = activeIndex + slides.length;
2495
+  } else {
2496
+    $wrapperEl.prepend(slides);
2497
+  }
2498
+  if (params.loop) {
2499
+    swiper.loopCreate();
2500
+  }
2501
+  if (!(params.observer && Support.observer)) {
2502
+    swiper.update();
2503
+  }
2504
+  swiper.slideTo(newActiveIndex, 0, false);
2505
+}
2506
+
2507
+function addSlide (index, slides) {
2508
+  const swiper = this;
2509
+  const { $wrapperEl, params, activeIndex } = swiper;
2510
+  let activeIndexBuffer = activeIndex;
2511
+  if (params.loop) {
2512
+    activeIndexBuffer -= swiper.loopedSlides;
2513
+    swiper.loopDestroy();
2514
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
2515
+  }
2516
+  const baseLength = swiper.slides.length;
2517
+  if (index <= 0) {
2518
+    swiper.prependSlide(slides);
2519
+    return;
2520
+  }
2521
+  if (index >= baseLength) {
2522
+    swiper.appendSlide(slides);
2523
+    return;
2524
+  }
2525
+  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
2526
+
2527
+  const slidesBuffer = [];
2528
+  for (let i = baseLength - 1; i >= index; i -= 1) {
2529
+    const currentSlide = swiper.slides.eq(i);
2530
+    currentSlide.remove();
2531
+    slidesBuffer.unshift(currentSlide);
2532
+  }
2533
+
2534
+  if (typeof slides === 'object' && 'length' in slides) {
2535
+    for (let i = 0; i < slides.length; i += 1) {
2536
+      if (slides[i]) $wrapperEl.append(slides[i]);
2537
+    }
2538
+    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
2539
+  } else {
2540
+    $wrapperEl.append(slides);
2541
+  }
2542
+
2543
+  for (let i = 0; i < slidesBuffer.length; i += 1) {
2544
+    $wrapperEl.append(slidesBuffer[i]);
2545
+  }
2546
+
2547
+  if (params.loop) {
2548
+    swiper.loopCreate();
2549
+  }
2550
+  if (!(params.observer && Support.observer)) {
2551
+    swiper.update();
2552
+  }
2553
+  if (params.loop) {
2554
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
2555
+  } else {
2556
+    swiper.slideTo(newActiveIndex, 0, false);
2557
+  }
2558
+}
2559
+
2560
+function removeSlide (slidesIndexes) {
2561
+  const swiper = this;
2562
+  const { params, $wrapperEl, activeIndex } = swiper;
2563
+
2564
+  let activeIndexBuffer = activeIndex;
2565
+  if (params.loop) {
2566
+    activeIndexBuffer -= swiper.loopedSlides;
2567
+    swiper.loopDestroy();
2568
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
2569
+  }
2570
+  let newActiveIndex = activeIndexBuffer;
2571
+  let indexToRemove;
2572
+
2573
+  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
2574
+    for (let i = 0; i < slidesIndexes.length; i += 1) {
2575
+      indexToRemove = slidesIndexes[i];
2576
+      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
2577
+      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
2578
+    }
2579
+    newActiveIndex = Math.max(newActiveIndex, 0);
2580
+  } else {
2581
+    indexToRemove = slidesIndexes;
2582
+    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
2583
+    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
2584
+    newActiveIndex = Math.max(newActiveIndex, 0);
2585
+  }
2586
+
2587
+  if (params.loop) {
2588
+    swiper.loopCreate();
2589
+  }
2590
+
2591
+  if (!(params.observer && Support.observer)) {
2592
+    swiper.update();
2593
+  }
2594
+  if (params.loop) {
2595
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
2596
+  } else {
2597
+    swiper.slideTo(newActiveIndex, 0, false);
2598
+  }
2599
+}
2600
+
2601
+function removeAllSlides () {
2602
+  const swiper = this;
2603
+
2604
+  const slidesIndexes = [];
2605
+  for (let i = 0; i < swiper.slides.length; i += 1) {
2606
+    slidesIndexes.push(i);
2607
+  }
2608
+  swiper.removeSlide(slidesIndexes);
2609
+}
2610
+
2611
+var manipulation = {
2612
+  appendSlide,
2613
+  prependSlide,
2614
+  addSlide,
2615
+  removeSlide,
2616
+  removeAllSlides,
2617
+};
2618
+
2619
+const Device = (function Device() {
2620
+  const platform = win.navigator.platform;
2621
+  const ua = win.navigator.userAgent;
2622
+
2623
+  const device = {
2624
+    ios: false,
2625
+    android: false,
2626
+    androidChrome: false,
2627
+    desktop: false,
2628
+    iphone: false,
2629
+    ipod: false,
2630
+    ipad: false,
2631
+    edge: false,
2632
+    ie: false,
2633
+    firefox: false,
2634
+    macos: false,
2635
+    windows: false,
2636
+    cordova: !!(win.cordova || win.phonegap),
2637
+    phonegap: !!(win.cordova || win.phonegap),
2638
+    electron: false,
2639
+  };
2640
+
2641
+  const screenWidth = win.screen.width;
2642
+  const screenHeight = win.screen.height;
2643
+
2644
+  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
2645
+  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
2646
+  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
2647
+  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
2648
+  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
2649
+  const edge = ua.indexOf('Edge/') >= 0;
2650
+  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
2651
+  const windows = platform === 'Win32';
2652
+  const electron = ua.toLowerCase().indexOf('electron') >= 0;
2653
+  let macos = platform === 'MacIntel';
2654
+
2655
+  // iPadOs 13 fix
2656
+  if (!ipad
2657
+    && macos
2658
+    && Support.touch
2659
+    && (
2660
+      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
2661
+      || (screenWidth === 834 && screenHeight === 1194) // Pro 11
2662
+      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
2663
+      || (screenWidth === 768 && screenHeight === 1024) // other
2664
+    )
2665
+  ) {
2666
+    ipad = ua.match(/(Version)\/([\d.]+)/);
2667
+    macos = false;
2668
+  }
2669
+
2670
+  device.ie = ie;
2671
+  device.edge = edge;
2672
+  device.firefox = firefox;
2673
+
2674
+  // Android
2675
+  if (android && !windows) {
2676
+    device.os = 'android';
2677
+    device.osVersion = android[2];
2678
+    device.android = true;
2679
+    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
2680
+  }
2681
+  if (ipad || iphone || ipod) {
2682
+    device.os = 'ios';
2683
+    device.ios = true;
2684
+  }
2685
+  // iOS
2686
+  if (iphone && !ipod) {
2687
+    device.osVersion = iphone[2].replace(/_/g, '.');
2688
+    device.iphone = true;
2689
+  }
2690
+  if (ipad) {
2691
+    device.osVersion = ipad[2].replace(/_/g, '.');
2692
+    device.ipad = true;
2693
+  }
2694
+  if (ipod) {
2695
+    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
2696
+    device.ipod = true;
2697
+  }
2698
+  // iOS 8+ changed UA
2699
+  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
2700
+    if (device.osVersion.split('.')[0] === '10') {
2701
+      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
2702
+    }
2703
+  }
2704
+
2705
+  // Webview
2706
+  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))
2707
+    || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);
2708
+  device.webview = device.webView;
2709
+  device.standalone = device.webView;
2710
+
2711
+  // Desktop
2712
+  device.desktop = !(device.ios || device.android) || electron;
2713
+  if (device.desktop) {
2714
+    device.electron = electron;
2715
+    device.macos = macos;
2716
+    device.windows = windows;
2717
+    if (device.macos) {
2718
+      device.os = 'macos';
2719
+    }
2720
+    if (device.windows) {
2721
+      device.os = 'windows';
2722
+    }
2723
+  }
2724
+
2725
+  // Pixel Ratio
2726
+  device.pixelRatio = win.devicePixelRatio || 1;
2727
+
2728
+  // Export object
2729
+  return device;
2730
+}());
2731
+
2732
+function onTouchStart (event) {
2733
+  const swiper = this;
2734
+  const data = swiper.touchEventsData;
2735
+  const { params, touches } = swiper;
2736
+
2737
+  if (swiper.animating && params.preventInteractionOnTransition) {
2738
+    return;
2739
+  }
2740
+  let e = event;
2741
+  if (e.originalEvent) e = e.originalEvent;
2742
+  const $targetEl = $(e.target);
2743
+
2744
+  if (params.touchEventsTarget === 'wrapper') {
2745
+    if (!$targetEl.closest(swiper.wrapperEl).length) return;
2746
+  }
2747
+  data.isTouchEvent = e.type === 'touchstart';
2748
+  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
2749
+  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
2750
+  if (data.isTouched && data.isMoved) return;
2751
+  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
2752
+    swiper.allowClick = true;
2753
+    return;
2754
+  }
2755
+  if (params.swipeHandler) {
2756
+    if (!$targetEl.closest(params.swipeHandler)[0]) return;
2757
+  }
2758
+
2759
+  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
2760
+  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
2761
+  const startX = touches.currentX;
2762
+  const startY = touches.currentY;
2763
+
2764
+  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
2765
+
2766
+  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
2767
+  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
2768
+  if (
2769
+    edgeSwipeDetection
2770
+    && ((startX <= edgeSwipeThreshold)
2771
+    || (startX >= win.screen.width - edgeSwipeThreshold))
2772
+  ) {
2773
+    return;
2774
+  }
2775
+
2776
+  Utils.extend(data, {
2777
+    isTouched: true,
2778
+    isMoved: false,
2779
+    allowTouchCallbacks: true,
2780
+    isScrolling: undefined,
2781
+    startMoving: undefined,
2782
+  });
2783
+
2784
+  touches.startX = startX;
2785
+  touches.startY = startY;
2786
+  data.touchStartTime = Utils.now();
2787
+  swiper.allowClick = true;
2788
+  swiper.updateSize();
2789
+  swiper.swipeDirection = undefined;
2790
+  if (params.threshold > 0) data.allowThresholdMove = false;
2791
+  if (e.type !== 'touchstart') {
2792
+    let preventDefault = true;
2793
+    if ($targetEl.is(data.formElements)) preventDefault = false;
2794
+    if (
2795
+      doc.activeElement
2796
+      && $(doc.activeElement).is(data.formElements)
2797
+      && doc.activeElement !== $targetEl[0]
2798
+    ) {
2799
+      doc.activeElement.blur();
2800
+    }
2801
+
2802
+    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
2803
+    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
2804
+      e.preventDefault();
2805
+    }
2806
+  }
2807
+  swiper.emit('touchStart', e);
2808
+}
2809
+
2810
+function onTouchMove (event) {
2811
+  const swiper = this;
2812
+  const data = swiper.touchEventsData;
2813
+  const { params, touches, rtlTranslate: rtl } = swiper;
2814
+  let e = event;
2815
+  if (e.originalEvent) e = e.originalEvent;
2816
+  if (!data.isTouched) {
2817
+    if (data.startMoving && data.isScrolling) {
2818
+      swiper.emit('touchMoveOpposite', e);
2819
+    }
2820
+    return;
2821
+  }
2822
+  if (data.isTouchEvent && e.type !== 'touchmove') return;
2823
+  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
2824
+  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
2825
+  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
2826
+  if (e.preventedByNestedSwiper) {
2827
+    touches.startX = pageX;
2828
+    touches.startY = pageY;
2829
+    return;
2830
+  }
2831
+  if (!swiper.allowTouchMove) {
2832
+    // isMoved = true;
2833
+    swiper.allowClick = false;
2834
+    if (data.isTouched) {
2835
+      Utils.extend(touches, {
2836
+        startX: pageX,
2837
+        startY: pageY,
2838
+        currentX: pageX,
2839
+        currentY: pageY,
2840
+      });
2841
+      data.touchStartTime = Utils.now();
2842
+    }
2843
+    return;
2844
+  }
2845
+  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
2846
+    if (swiper.isVertical()) {
2847
+      // Vertical
2848
+      if (
2849
+        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
2850
+        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
2851
+      ) {
2852
+        data.isTouched = false;
2853
+        data.isMoved = false;
2854
+        return;
2855
+      }
2856
+    } else if (
2857
+      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
2858
+      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
2859
+    ) {
2860
+      return;
2861
+    }
2862
+  }
2863
+  if (data.isTouchEvent && doc.activeElement) {
2864
+    if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
2865
+      data.isMoved = true;
2866
+      swiper.allowClick = false;
2867
+      return;
2868
+    }
2869
+  }
2870
+  if (data.allowTouchCallbacks) {
2871
+    swiper.emit('touchMove', e);
2872
+  }
2873
+  if (e.targetTouches && e.targetTouches.length > 1) return;
2874
+
2875
+  touches.currentX = pageX;
2876
+  touches.currentY = pageY;
2877
+
2878
+  const diffX = touches.currentX - touches.startX;
2879
+  const diffY = touches.currentY - touches.startY;
2880
+  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;
2881
+
2882
+  if (typeof data.isScrolling === 'undefined') {
2883
+    let touchAngle;
2884
+    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
2885
+      data.isScrolling = false;
2886
+    } else {
2887
+      // eslint-disable-next-line
2888
+      if ((diffX * diffX) + (diffY * diffY) >= 25) {
2889
+        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
2890
+        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
2891
+      }
2892
+    }
2893
+  }
2894
+  if (data.isScrolling) {
2895
+    swiper.emit('touchMoveOpposite', e);
2896
+  }
2897
+  if (typeof data.startMoving === 'undefined') {
2898
+    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
2899
+      data.startMoving = true;
2900
+    }
2901
+  }
2902
+  if (data.isScrolling) {
2903
+    data.isTouched = false;
2904
+    return;
2905
+  }
2906
+  if (!data.startMoving) {
2907
+    return;
2908
+  }
2909
+  swiper.allowClick = false;
2910
+  if (!params.cssMode && e.cancelable) {
2911
+    e.preventDefault();
2912
+  }
2913
+  if (params.touchMoveStopPropagation && !params.nested) {
2914
+    e.stopPropagation();
2915
+  }
2916
+
2917
+  if (!data.isMoved) {
2918
+    if (params.loop) {
2919
+      swiper.loopFix();
2920
+    }
2921
+    data.startTranslate = swiper.getTranslate();
2922
+    swiper.setTransition(0);
2923
+    if (swiper.animating) {
2924
+      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
2925
+    }
2926
+    data.allowMomentumBounce = false;
2927
+    // Grab Cursor
2928
+    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2929
+      swiper.setGrabCursor(true);
2930
+    }
2931
+    swiper.emit('sliderFirstMove', e);
2932
+  }
2933
+  swiper.emit('sliderMove', e);
2934
+  data.isMoved = true;
2935
+
2936
+  let diff = swiper.isHorizontal() ? diffX : diffY;
2937
+  touches.diff = diff;
2938
+
2939
+  diff *= params.touchRatio;
2940
+  if (rtl) diff = -diff;
2941
+
2942
+  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
2943
+  data.currentTranslate = diff + data.startTranslate;
2944
+
2945
+  let disableParentSwiper = true;
2946
+  let resistanceRatio = params.resistanceRatio;
2947
+  if (params.touchReleaseOnEdges) {
2948
+    resistanceRatio = 0;
2949
+  }
2950
+  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
2951
+    disableParentSwiper = false;
2952
+    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);
2953
+  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
2954
+    disableParentSwiper = false;
2955
+    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);
2956
+  }
2957
+
2958
+  if (disableParentSwiper) {
2959
+    e.preventedByNestedSwiper = true;
2960
+  }
2961
+
2962
+  // Directions locks
2963
+  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
2964
+    data.currentTranslate = data.startTranslate;
2965
+  }
2966
+  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
2967
+    data.currentTranslate = data.startTranslate;
2968
+  }
2969
+
2970
+
2971
+  // Threshold
2972
+  if (params.threshold > 0) {
2973
+    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
2974
+      if (!data.allowThresholdMove) {
2975
+        data.allowThresholdMove = true;
2976
+        touches.startX = touches.currentX;
2977
+        touches.startY = touches.currentY;
2978
+        data.currentTranslate = data.startTranslate;
2979
+        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
2980
+        return;
2981
+      }
2982
+    } else {
2983
+      data.currentTranslate = data.startTranslate;
2984
+      return;
2985
+    }
2986
+  }
2987
+
2988
+  if (!params.followFinger || params.cssMode) return;
2989
+
2990
+  // Update active index in free mode
2991
+  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
2992
+    swiper.updateActiveIndex();
2993
+    swiper.updateSlidesClasses();
2994
+  }
2995
+  if (params.freeMode) {
2996
+    // Velocity
2997
+    if (data.velocities.length === 0) {
2998
+      data.velocities.push({
2999
+        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
3000
+        time: data.touchStartTime,
3001
+      });
3002
+    }
3003
+    data.velocities.push({
3004
+      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
3005
+      time: Utils.now(),
3006
+    });
3007
+  }
3008
+  // Update progress
3009
+  swiper.updateProgress(data.currentTranslate);
3010
+  // Update translate
3011
+  swiper.setTranslate(data.currentTranslate);
3012
+}
3013
+
3014
+function onTouchEnd (event) {
3015
+  const swiper = this;
3016
+  const data = swiper.touchEventsData;
3017
+
3018
+  const {
3019
+    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,
3020
+  } = swiper;
3021
+  let e = event;
3022
+  if (e.originalEvent) e = e.originalEvent;
3023
+  if (data.allowTouchCallbacks) {
3024
+    swiper.emit('touchEnd', e);
3025
+  }
3026
+  data.allowTouchCallbacks = false;
3027
+  if (!data.isTouched) {
3028
+    if (data.isMoved && params.grabCursor) {
3029
+      swiper.setGrabCursor(false);
3030
+    }
3031
+    data.isMoved = false;
3032
+    data.startMoving = false;
3033
+    return;
3034
+  }
3035
+  // Return Grab Cursor
3036
+  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3037
+    swiper.setGrabCursor(false);
3038
+  }
3039
+
3040
+  // Time diff
3041
+  const touchEndTime = Utils.now();
3042
+  const timeDiff = touchEndTime - data.touchStartTime;
3043
+
3044
+  // Tap, doubleTap, Click
3045
+  if (swiper.allowClick) {
3046
+    swiper.updateClickedSlide(e);
3047
+    swiper.emit('tap click', e);
3048
+    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
3049
+      swiper.emit('doubleTap doubleClick', e);
3050
+    }
3051
+  }
3052
+
3053
+  data.lastClickTime = Utils.now();
3054
+  Utils.nextTick(() => {
3055
+    if (!swiper.destroyed) swiper.allowClick = true;
3056
+  });
3057
+
3058
+  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
3059
+    data.isTouched = false;
3060
+    data.isMoved = false;
3061
+    data.startMoving = false;
3062
+    return;
3063
+  }
3064
+  data.isTouched = false;
3065
+  data.isMoved = false;
3066
+  data.startMoving = false;
3067
+
3068
+  let currentPos;
3069
+  if (params.followFinger) {
3070
+    currentPos = rtl ? swiper.translate : -swiper.translate;
3071
+  } else {
3072
+    currentPos = -data.currentTranslate;
3073
+  }
3074
+
3075
+  if (params.cssMode) {
3076
+    return;
3077
+  }
3078
+
3079
+  if (params.freeMode) {
3080
+    if (currentPos < -swiper.minTranslate()) {
3081
+      swiper.slideTo(swiper.activeIndex);
3082
+      return;
3083
+    }
3084
+    if (currentPos > -swiper.maxTranslate()) {
3085
+      if (swiper.slides.length < snapGrid.length) {
3086
+        swiper.slideTo(snapGrid.length - 1);
3087
+      } else {
3088
+        swiper.slideTo(swiper.slides.length - 1);
3089
+      }
3090
+      return;
3091
+    }
3092
+
3093
+    if (params.freeModeMomentum) {
3094
+      if (data.velocities.length > 1) {
3095
+        const lastMoveEvent = data.velocities.pop();
3096
+        const velocityEvent = data.velocities.pop();
3097
+
3098
+        const distance = lastMoveEvent.position - velocityEvent.position;
3099
+        const time = lastMoveEvent.time - velocityEvent.time;
3100
+        swiper.velocity = distance / time;
3101
+        swiper.velocity /= 2;
3102
+        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
3103
+          swiper.velocity = 0;
3104
+        }
3105
+        // this implies that the user stopped moving a finger then released.
3106
+        // There would be no events with distance zero, so the last event is stale.
3107
+        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
3108
+          swiper.velocity = 0;
3109
+        }
3110
+      } else {
3111
+        swiper.velocity = 0;
3112
+      }
3113
+      swiper.velocity *= params.freeModeMomentumVelocityRatio;
3114
+
3115
+      data.velocities.length = 0;
3116
+      let momentumDuration = 1000 * params.freeModeMomentumRatio;
3117
+      const momentumDistance = swiper.velocity * momentumDuration;
3118
+
3119
+      let newPosition = swiper.translate + momentumDistance;
3120
+      if (rtl) newPosition = -newPosition;
3121
+
3122
+      let doBounce = false;
3123
+      let afterBouncePosition;
3124
+      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
3125
+      let needsLoopFix;
3126
+      if (newPosition < swiper.maxTranslate()) {
3127
+        if (params.freeModeMomentumBounce) {
3128
+          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
3129
+            newPosition = swiper.maxTranslate() - bounceAmount;
3130
+          }
3131
+          afterBouncePosition = swiper.maxTranslate();
3132
+          doBounce = true;
3133
+          data.allowMomentumBounce = true;
3134
+        } else {
3135
+          newPosition = swiper.maxTranslate();
3136
+        }
3137
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
3138
+      } else if (newPosition > swiper.minTranslate()) {
3139
+        if (params.freeModeMomentumBounce) {
3140
+          if (newPosition - swiper.minTranslate() > bounceAmount) {
3141
+            newPosition = swiper.minTranslate() + bounceAmount;
3142
+          }
3143
+          afterBouncePosition = swiper.minTranslate();
3144
+          doBounce = true;
3145
+          data.allowMomentumBounce = true;
3146
+        } else {
3147
+          newPosition = swiper.minTranslate();
3148
+        }
3149
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
3150
+      } else if (params.freeModeSticky) {
3151
+        let nextSlide;
3152
+        for (let j = 0; j < snapGrid.length; j += 1) {
3153
+          if (snapGrid[j] > -newPosition) {
3154
+            nextSlide = j;
3155
+            break;
3156
+          }
3157
+        }
3158
+
3159
+        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
3160
+          newPosition = snapGrid[nextSlide];
3161
+        } else {
3162
+          newPosition = snapGrid[nextSlide - 1];
3163
+        }
3164
+        newPosition = -newPosition;
3165
+      }
3166
+      if (needsLoopFix) {
3167
+        swiper.once('transitionEnd', () => {
3168
+          swiper.loopFix();
3169
+        });
3170
+      }
3171
+      // Fix duration
3172
+      if (swiper.velocity !== 0) {
3173
+        if (rtl) {
3174
+          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
3175
+        } else {
3176
+          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
3177
+        }
3178
+        if (params.freeModeSticky) {
3179
+          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
3180
+          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
3181
+          // It's easy to see this when simulating touch with mouse events. To fix this,
3182
+          // limit single-slide swipes to the default slide duration. This also has the
3183
+          // nice side effect of matching slide speed if the user stopped moving before
3184
+          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
3185
+          // For faster swipes, also apply limits (albeit higher ones).
3186
+          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
3187
+          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
3188
+          if (moveDistance < currentSlideSize) {
3189
+            momentumDuration = params.speed;
3190
+          } else if (moveDistance < 2 * currentSlideSize) {
3191
+            momentumDuration = params.speed * 1.5;
3192
+          } else {
3193
+            momentumDuration = params.speed * 2.5;
3194
+          }
3195
+        }
3196
+      } else if (params.freeModeSticky) {
3197
+        swiper.slideToClosest();
3198
+        return;
3199
+      }
3200
+
3201
+      if (params.freeModeMomentumBounce && doBounce) {
3202
+        swiper.updateProgress(afterBouncePosition);
3203
+        swiper.setTransition(momentumDuration);
3204
+        swiper.setTranslate(newPosition);
3205
+        swiper.transitionStart(true, swiper.swipeDirection);
3206
+        swiper.animating = true;
3207
+        $wrapperEl.transitionEnd(() => {
3208
+          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
3209
+          swiper.emit('momentumBounce');
3210
+          swiper.setTransition(params.speed);
3211
+          setTimeout(() => {
3212
+            swiper.setTranslate(afterBouncePosition);
3213
+            $wrapperEl.transitionEnd(() => {
3214
+              if (!swiper || swiper.destroyed) return;
3215
+              swiper.transitionEnd();
3216
+            });
3217
+          }, 0);
3218
+        });
3219
+      } else if (swiper.velocity) {
3220
+        swiper.updateProgress(newPosition);
3221
+        swiper.setTransition(momentumDuration);
3222
+        swiper.setTranslate(newPosition);
3223
+        swiper.transitionStart(true, swiper.swipeDirection);
3224
+        if (!swiper.animating) {
3225
+          swiper.animating = true;
3226
+          $wrapperEl.transitionEnd(() => {
3227
+            if (!swiper || swiper.destroyed) return;
3228
+            swiper.transitionEnd();
3229
+          });
3230
+        }
3231
+      } else {
3232
+        swiper.updateProgress(newPosition);
3233
+      }
3234
+
3235
+      swiper.updateActiveIndex();
3236
+      swiper.updateSlidesClasses();
3237
+    } else if (params.freeModeSticky) {
3238
+      swiper.slideToClosest();
3239
+      return;
3240
+    }
3241
+
3242
+    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
3243
+      swiper.updateProgress();
3244
+      swiper.updateActiveIndex();
3245
+      swiper.updateSlidesClasses();
3246
+    }
3247
+    return;
3248
+  }
3249
+
3250
+  // Find current slide
3251
+  let stopIndex = 0;
3252
+  let groupSize = swiper.slidesSizesGrid[0];
3253
+  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
3254
+    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
3255
+    if (typeof slidesGrid[i + increment] !== 'undefined') {
3256
+      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
3257
+        stopIndex = i;
3258
+        groupSize = slidesGrid[i + increment] - slidesGrid[i];
3259
+      }
3260
+    } else if (currentPos >= slidesGrid[i]) {
3261
+      stopIndex = i;
3262
+      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
3263
+    }
3264
+  }
3265
+
3266
+  // Find current slide size
3267
+  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
3268
+  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
3269
+
3270
+  if (timeDiff > params.longSwipesMs) {
3271
+    // Long touches
3272
+    if (!params.longSwipes) {
3273
+      swiper.slideTo(swiper.activeIndex);
3274
+      return;
3275
+    }
3276
+    if (swiper.swipeDirection === 'next') {
3277
+      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);
3278
+      else swiper.slideTo(stopIndex);
3279
+    }
3280
+    if (swiper.swipeDirection === 'prev') {
3281
+      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);
3282
+      else swiper.slideTo(stopIndex);
3283
+    }
3284
+  } else {
3285
+    // Short swipes
3286
+    if (!params.shortSwipes) {
3287
+      swiper.slideTo(swiper.activeIndex);
3288
+      return;
3289
+    }
3290
+    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
3291
+    if (!isNavButtonTarget) {
3292
+      if (swiper.swipeDirection === 'next') {
3293
+        swiper.slideTo(stopIndex + increment);
3294
+      }
3295
+      if (swiper.swipeDirection === 'prev') {
3296
+        swiper.slideTo(stopIndex);
3297
+      }
3298
+    } else if (e.target === swiper.navigation.nextEl) {
3299
+      swiper.slideTo(stopIndex + increment);
3300
+    } else {
3301
+      swiper.slideTo(stopIndex);
3302
+    }
3303
+  }
3304
+}
3305
+
3306
+function onResize () {
3307
+  const swiper = this;
3308
+
3309
+  const { params, el } = swiper;
3310
+
3311
+  if (el && el.offsetWidth === 0) return;
3312
+
3313
+  // Breakpoints
3314
+  if (params.breakpoints) {
3315
+    swiper.setBreakpoint();
3316
+  }
3317
+
3318
+  // Save locks
3319
+  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;
3320
+
3321
+  // Disable locks on resize
3322
+  swiper.allowSlideNext = true;
3323
+  swiper.allowSlidePrev = true;
3324
+
3325
+  swiper.updateSize();
3326
+  swiper.updateSlides();
3327
+
3328
+  swiper.updateSlidesClasses();
3329
+  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
3330
+    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3331
+  } else {
3332
+    swiper.slideTo(swiper.activeIndex, 0, false, true);
3333
+  }
3334
+
3335
+  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3336
+    swiper.autoplay.run();
3337
+  }
3338
+  // Return locks after resize
3339
+  swiper.allowSlidePrev = allowSlidePrev;
3340
+  swiper.allowSlideNext = allowSlideNext;
3341
+
3342
+  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
3343
+    swiper.checkOverflow();
3344
+  }
3345
+}
3346
+
3347
+function onClick (e) {
3348
+  const swiper = this;
3349
+  if (!swiper.allowClick) {
3350
+    if (swiper.params.preventClicks) e.preventDefault();
3351
+    if (swiper.params.preventClicksPropagation && swiper.animating) {
3352
+      e.stopPropagation();
3353
+      e.stopImmediatePropagation();
3354
+    }
3355
+  }
3356
+}
3357
+
3358
+function onScroll () {
3359
+  const swiper = this;
3360
+  const { wrapperEl, rtlTranslate } = swiper;
3361
+  swiper.previousTranslate = swiper.translate;
3362
+  if (swiper.isHorizontal()) {
3363
+    if (rtlTranslate) {
3364
+      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
3365
+    } else {
3366
+      swiper.translate = -wrapperEl.scrollLeft;
3367
+    }
3368
+  } else {
3369
+    swiper.translate = -wrapperEl.scrollTop;
3370
+  }
3371
+  // eslint-disable-next-line
3372
+  if (swiper.translate === -0) swiper.translate = 0;
3373
+
3374
+  swiper.updateActiveIndex();
3375
+  swiper.updateSlidesClasses();
3376
+
3377
+  let newProgress;
3378
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3379
+  if (translatesDiff === 0) {
3380
+    newProgress = 0;
3381
+  } else {
3382
+    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
3383
+  }
3384
+  if (newProgress !== swiper.progress) {
3385
+    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
3386
+  }
3387
+
3388
+  swiper.emit('setTranslate', swiper.translate, false);
3389
+}
3390
+
3391
+let dummyEventAttached = false;
3392
+function dummyEventListener() {}
3393
+
3394
+function attachEvents() {
3395
+  const swiper = this;
3396
+  const {
3397
+    params, touchEvents, el, wrapperEl,
3398
+  } = swiper;
3399
+
3400
+  swiper.onTouchStart = onTouchStart.bind(swiper);
3401
+  swiper.onTouchMove = onTouchMove.bind(swiper);
3402
+  swiper.onTouchEnd = onTouchEnd.bind(swiper);
3403
+  if (params.cssMode) {
3404
+    swiper.onScroll = onScroll.bind(swiper);
3405
+  }
3406
+
3407
+  swiper.onClick = onClick.bind(swiper);
3408
+
3409
+  const capture = !!params.nested;
3410
+
3411
+  // Touch Events
3412
+  if (!Support.touch && Support.pointerEvents) {
3413
+    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
3414
+    doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
3415
+    doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
3416
+  } else {
3417
+    if (Support.touch) {
3418
+      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
3419
+      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
3420
+      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
3421
+      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
3422
+      if (touchEvents.cancel) {
3423
+        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
3424
+      }
3425
+      if (!dummyEventAttached) {
3426
+        doc.addEventListener('touchstart', dummyEventListener);
3427
+        dummyEventAttached = true;
3428
+      }
3429
+    }
3430
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
3431
+      el.addEventListener('mousedown', swiper.onTouchStart, false);
3432
+      doc.addEventListener('mousemove', swiper.onTouchMove, capture);
3433
+      doc.addEventListener('mouseup', swiper.onTouchEnd, false);
3434
+    }
3435
+  }
3436
+  // Prevent Links Clicks
3437
+  if (params.preventClicks || params.preventClicksPropagation) {
3438
+    el.addEventListener('click', swiper.onClick, true);
3439
+  }
3440
+  if (params.cssMode) {
3441
+    wrapperEl.addEventListener('scroll', swiper.onScroll);
3442
+  }
3443
+
3444
+  // Resize handler
3445
+  if (params.updateOnWindowResize) {
3446
+    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
3447
+  } else {
3448
+    swiper.on('observerUpdate', onResize, true);
3449
+  }
3450
+}
3451
+
3452
+function detachEvents() {
3453
+  const swiper = this;
3454
+
3455
+  const {
3456
+    params, touchEvents, el, wrapperEl,
3457
+  } = swiper;
3458
+
3459
+  const capture = !!params.nested;
3460
+
3461
+  // Touch Events
3462
+  if (!Support.touch && Support.pointerEvents) {
3463
+    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
3464
+    doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
3465
+    doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
3466
+  } else {
3467
+    if (Support.touch) {
3468
+      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
3469
+      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
3470
+      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
3471
+      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
3472
+      if (touchEvents.cancel) {
3473
+        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
3474
+      }
3475
+    }
3476
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
3477
+      el.removeEventListener('mousedown', swiper.onTouchStart, false);
3478
+      doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
3479
+      doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
3480
+    }
3481
+  }
3482
+  // Prevent Links Clicks
3483
+  if (params.preventClicks || params.preventClicksPropagation) {
3484
+    el.removeEventListener('click', swiper.onClick, true);
3485
+  }
3486
+
3487
+  if (params.cssMode) {
3488
+    wrapperEl.removeEventListener('scroll', swiper.onScroll);
3489
+  }
3490
+
3491
+  // Resize handler
3492
+  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
3493
+}
3494
+
3495
+var events = {
3496
+  attachEvents,
3497
+  detachEvents,
3498
+};
3499
+
3500
+function setBreakpoint () {
3501
+  const swiper = this;
3502
+  const {
3503
+    activeIndex, initialized, loopedSlides = 0, params, $el,
3504
+  } = swiper;
3505
+  const breakpoints = params.breakpoints;
3506
+  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;
3507
+
3508
+  // Get breakpoint for window width and update parameters
3509
+  const breakpoint = swiper.getBreakpoint(breakpoints);
3510
+
3511
+  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
3512
+    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
3513
+    if (breakpointOnlyParams) {
3514
+      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {
3515
+        const paramValue = breakpointOnlyParams[param];
3516
+        if (typeof paramValue === 'undefined') return;
3517
+        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
3518
+          breakpointOnlyParams[param] = 'auto';
3519
+        } else if (param === 'slidesPerView') {
3520
+          breakpointOnlyParams[param] = parseFloat(paramValue);
3521
+        } else {
3522
+          breakpointOnlyParams[param] = parseInt(paramValue, 10);
3523
+        }
3524
+      });
3525
+    }
3526
+
3527
+    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
3528
+    const wasMultiRow = params.slidesPerColumn > 1;
3529
+    const isMultiRow = breakpointParams.slidesPerColumn > 1;
3530
+    if (wasMultiRow && !isMultiRow) {
3531
+      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);
3532
+    } else if (!wasMultiRow && isMultiRow) {
3533
+      $el.addClass(`${params.containerModifierClass}multirow`);
3534
+      if (breakpointParams.slidesPerColumnFill === 'column') {
3535
+        $el.addClass(`${params.containerModifierClass}multirow-column`);
3536
+      }
3537
+    }
3538
+
3539
+    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
3540
+    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
3541
+
3542
+    if (directionChanged && initialized) {
3543
+      swiper.changeDirection();
3544
+    }
3545
+
3546
+    Utils.extend(swiper.params, breakpointParams);
3547
+
3548
+    Utils.extend(swiper, {
3549
+      allowTouchMove: swiper.params.allowTouchMove,
3550
+      allowSlideNext: swiper.params.allowSlideNext,
3551
+      allowSlidePrev: swiper.params.allowSlidePrev,
3552
+    });
3553
+
3554
+    swiper.currentBreakpoint = breakpoint;
3555
+
3556
+    if (needsReLoop && initialized) {
3557
+      swiper.loopDestroy();
3558
+      swiper.loopCreate();
3559
+      swiper.updateSlides();
3560
+      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
3561
+    }
3562
+
3563
+    swiper.emit('breakpoint', breakpointParams);
3564
+  }
3565
+}
3566
+
3567
+function getBreakpoint (breakpoints) {
3568
+  // Get breakpoint for window width
3569
+  if (!breakpoints) return undefined;
3570
+  let breakpoint = false;
3571
+
3572
+  const points = Object.keys(breakpoints).map((point) => {
3573
+    if (typeof point === 'string' && point.indexOf('@') === 0) {
3574
+      const minRatio = parseFloat(point.substr(1));
3575
+      const value = win.innerHeight * minRatio;
3576
+      return { value, point };
3577
+    }
3578
+    return { value: point, point };
3579
+  });
3580
+
3581
+  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
3582
+  for (let i = 0; i < points.length; i += 1) {
3583
+    const { point, value } = points[i];
3584
+    if (value <= win.innerWidth) {
3585
+      breakpoint = point;
3586
+    }
3587
+  }
3588
+  return breakpoint || 'max';
3589
+}
3590
+
3591
+var breakpoints = { setBreakpoint, getBreakpoint };
3592
+
3593
+function addClasses () {
3594
+  const swiper = this;
3595
+  const {
3596
+    classNames, params, rtl, $el,
3597
+  } = swiper;
3598
+  const suffixes = [];
3599
+
3600
+  suffixes.push('initialized');
3601
+  suffixes.push(params.direction);
3602
+
3603
+  if (params.freeMode) {
3604
+    suffixes.push('free-mode');
3605
+  }
3606
+  if (params.autoHeight) {
3607
+    suffixes.push('autoheight');
3608
+  }
3609
+  if (rtl) {
3610
+    suffixes.push('rtl');
3611
+  }
3612
+  if (params.slidesPerColumn > 1) {
3613
+    suffixes.push('multirow');
3614
+    if (params.slidesPerColumnFill === 'column') {
3615
+      suffixes.push('multirow-column');
3616
+    }
3617
+  }
3618
+  if (Device.android) {
3619
+    suffixes.push('android');
3620
+  }
3621
+  if (Device.ios) {
3622
+    suffixes.push('ios');
3623
+  }
3624
+
3625
+  if (params.cssMode) {
3626
+    suffixes.push('css-mode');
3627
+  }
3628
+
3629
+  suffixes.forEach((suffix) => {
3630
+    classNames.push(params.containerModifierClass + suffix);
3631
+  });
3632
+
3633
+  $el.addClass(classNames.join(' '));
3634
+}
3635
+
3636
+function removeClasses () {
3637
+  const swiper = this;
3638
+  const { $el, classNames } = swiper;
3639
+
3640
+  $el.removeClass(classNames.join(' '));
3641
+}
3642
+
3643
+var classes = { addClasses, removeClasses };
3644
+
3645
+function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
3646
+  let image;
3647
+  function onReady() {
3648
+    if (callback) callback();
3649
+  }
3650
+  const isPicture = $(imageEl).parent('picture')[0];
3651
+
3652
+  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
3653
+    if (src) {
3654
+      image = new win.Image();
3655
+      image.onload = onReady;
3656
+      image.onerror = onReady;
3657
+      if (sizes) {
3658
+        image.sizes = sizes;
3659
+      }
3660
+      if (srcset) {
3661
+        image.srcset = srcset;
3662
+      }
3663
+      if (src) {
3664
+        image.src = src;
3665
+      }
3666
+    } else {
3667
+      onReady();
3668
+    }
3669
+  } else {
3670
+    // image already loaded...
3671
+    onReady();
3672
+  }
3673
+}
3674
+
3675
+function preloadImages () {
3676
+  const swiper = this;
3677
+  swiper.imagesToLoad = swiper.$el.find('img');
3678
+  function onReady() {
3679
+    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
3680
+    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
3681
+    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
3682
+      if (swiper.params.updateOnImagesReady) swiper.update();
3683
+      swiper.emit('imagesReady');
3684
+    }
3685
+  }
3686
+  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {
3687
+    const imageEl = swiper.imagesToLoad[i];
3688
+    swiper.loadImage(
3689
+      imageEl,
3690
+      imageEl.currentSrc || imageEl.getAttribute('src'),
3691
+      imageEl.srcset || imageEl.getAttribute('srcset'),
3692
+      imageEl.sizes || imageEl.getAttribute('sizes'),
3693
+      true,
3694
+      onReady
3695
+    );
3696
+  }
3697
+}
3698
+
3699
+var images = {
3700
+  loadImage,
3701
+  preloadImages,
3702
+};
3703
+
3704
+function checkOverflow() {
3705
+  const swiper = this;
3706
+  const params = swiper.params;
3707
+  const wasLocked = swiper.isLocked;
3708
+  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);
3709
+
3710
+  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
3711
+    swiper.isLocked = lastSlidePosition <= swiper.size;
3712
+  } else {
3713
+    swiper.isLocked = swiper.snapGrid.length === 1;
3714
+  }
3715
+
3716
+  swiper.allowSlideNext = !swiper.isLocked;
3717
+  swiper.allowSlidePrev = !swiper.isLocked;
3718
+
3719
+  // events
3720
+  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
3721
+
3722
+  if (wasLocked && wasLocked !== swiper.isLocked) {
3723
+    swiper.isEnd = false;
3724
+    swiper.navigation.update();
3725
+  }
3726
+}
3727
+
3728
+var checkOverflow$1 = { checkOverflow };
3729
+
3730
+var defaults = {
3731
+  init: true,
3732
+  direction: 'horizontal',
3733
+  touchEventsTarget: 'container',
3734
+  initialSlide: 0,
3735
+  speed: 300,
3736
+  cssMode: false,
3737
+  updateOnWindowResize: true,
3738
+  //
3739
+  preventInteractionOnTransition: false,
3740
+
3741
+  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
3742
+  edgeSwipeDetection: false,
3743
+  edgeSwipeThreshold: 20,
3744
+
3745
+  // Free mode
3746
+  freeMode: false,
3747
+  freeModeMomentum: true,
3748
+  freeModeMomentumRatio: 1,
3749
+  freeModeMomentumBounce: true,
3750
+  freeModeMomentumBounceRatio: 1,
3751
+  freeModeMomentumVelocityRatio: 1,
3752
+  freeModeSticky: false,
3753
+  freeModeMinimumVelocity: 0.02,
3754
+
3755
+  // Autoheight
3756
+  autoHeight: false,
3757
+
3758
+  // Set wrapper width
3759
+  setWrapperSize: false,
3760
+
3761
+  // Virtual Translate
3762
+  virtualTranslate: false,
3763
+
3764
+  // Effects
3765
+  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
3766
+
3767
+  // Breakpoints
3768
+  breakpoints: undefined,
3769
+
3770
+  // Slides grid
3771
+  spaceBetween: 0,
3772
+  slidesPerView: 1,
3773
+  slidesPerColumn: 1,
3774
+  slidesPerColumnFill: 'column',
3775
+  slidesPerGroup: 1,
3776
+  slidesPerGroupSkip: 0,
3777
+  centeredSlides: false,
3778
+  centeredSlidesBounds: false,
3779
+  slidesOffsetBefore: 0, // in px
3780
+  slidesOffsetAfter: 0, // in px
3781
+  normalizeSlideIndex: true,
3782
+  centerInsufficientSlides: false,
3783
+
3784
+  // Disable swiper and hide navigation when container not overflow
3785
+  watchOverflow: false,
3786
+
3787
+  // Round length
3788
+  roundLengths: false,
3789
+
3790
+  // Touches
3791
+  touchRatio: 1,
3792
+  touchAngle: 45,
3793
+  simulateTouch: true,
3794
+  shortSwipes: true,
3795
+  longSwipes: true,
3796
+  longSwipesRatio: 0.5,
3797
+  longSwipesMs: 300,
3798
+  followFinger: true,
3799
+  allowTouchMove: true,
3800
+  threshold: 0,
3801
+  touchMoveStopPropagation: false,
3802
+  touchStartPreventDefault: true,
3803
+  touchStartForcePreventDefault: false,
3804
+  touchReleaseOnEdges: false,
3805
+
3806
+  // Unique Navigation Elements
3807
+  uniqueNavElements: true,
3808
+
3809
+  // Resistance
3810
+  resistance: true,
3811
+  resistanceRatio: 0.85,
3812
+
3813
+  // Progress
3814
+  watchSlidesProgress: false,
3815
+  watchSlidesVisibility: false,
3816
+
3817
+  // Cursor
3818
+  grabCursor: false,
3819
+
3820
+  // Clicks
3821
+  preventClicks: true,
3822
+  preventClicksPropagation: true,
3823
+  slideToClickedSlide: false,
3824
+
3825
+  // Images
3826
+  preloadImages: true,
3827
+  updateOnImagesReady: true,
3828
+
3829
+  // loop
3830
+  loop: false,
3831
+  loopAdditionalSlides: 0,
3832
+  loopedSlides: null,
3833
+  loopFillGroupWithBlank: false,
3834
+
3835
+  // Swiping/no swiping
3836
+  allowSlidePrev: true,
3837
+  allowSlideNext: true,
3838
+  swipeHandler: null, // '.swipe-handler',
3839
+  noSwiping: true,
3840
+  noSwipingClass: 'swiper-no-swiping',
3841
+  noSwipingSelector: null,
3842
+
3843
+  // Passive Listeners
3844
+  passiveListeners: true,
3845
+
3846
+  // NS
3847
+  containerModifierClass: 'swiper-container-', // NEW
3848
+  slideClass: 'swiper-slide',
3849
+  slideBlankClass: 'swiper-slide-invisible-blank',
3850
+  slideActiveClass: 'swiper-slide-active',
3851
+  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
3852
+  slideVisibleClass: 'swiper-slide-visible',
3853
+  slideDuplicateClass: 'swiper-slide-duplicate',
3854
+  slideNextClass: 'swiper-slide-next',
3855
+  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
3856
+  slidePrevClass: 'swiper-slide-prev',
3857
+  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
3858
+  wrapperClass: 'swiper-wrapper',
3859
+
3860
+  // Callbacks
3861
+  runCallbacksOnInit: true,
3862
+};
3863
+
3864
+/* eslint no-param-reassign: "off" */
3865
+
3866
+const prototypes = {
3867
+  update,
3868
+  translate,
3869
+  transition: transition$1,
3870
+  slide,
3871
+  loop,
3872
+  grabCursor,
3873
+  manipulation,
3874
+  events,
3875
+  breakpoints,
3876
+  checkOverflow: checkOverflow$1,
3877
+  classes,
3878
+  images,
3879
+};
3880
+
3881
+const extendedDefaults = {};
3882
+
3883
+class Swiper extends SwiperClass {
3884
+  constructor(...args) {
3885
+    let el;
3886
+    let params;
3887
+    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
3888
+      params = args[0];
3889
+    } else {
3890
+      [el, params] = args;
3891
+    }
3892
+    if (!params) params = {};
3893
+
3894
+    params = Utils.extend({}, params);
3895
+    if (el && !params.el) params.el = el;
3896
+
3897
+    super(params);
3898
+
3899
+    Object.keys(prototypes).forEach((prototypeGroup) => {
3900
+      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
3901
+        if (!Swiper.prototype[protoMethod]) {
3902
+          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
3903
+        }
3904
+      });
3905
+    });
3906
+
3907
+    // Swiper Instance
3908
+    const swiper = this;
3909
+    if (typeof swiper.modules === 'undefined') {
3910
+      swiper.modules = {};
3911
+    }
3912
+    Object.keys(swiper.modules).forEach((moduleName) => {
3913
+      const module = swiper.modules[moduleName];
3914
+      if (module.params) {
3915
+        const moduleParamName = Object.keys(module.params)[0];
3916
+        const moduleParams = module.params[moduleParamName];
3917
+        if (typeof moduleParams !== 'object' || moduleParams === null) return;
3918
+        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
3919
+        if (params[moduleParamName] === true) {
3920
+          params[moduleParamName] = { enabled: true };
3921
+        }
3922
+        if (
3923
+          typeof params[moduleParamName] === 'object'
3924
+          && !('enabled' in params[moduleParamName])
3925
+        ) {
3926
+          params[moduleParamName].enabled = true;
3927
+        }
3928
+        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
3929
+      }
3930
+    });
3931
+
3932
+    // Extend defaults with modules params
3933
+    const swiperParams = Utils.extend({}, defaults);
3934
+    swiper.useModulesParams(swiperParams);
3935
+
3936
+    // Extend defaults with passed params
3937
+    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
3938
+    swiper.originalParams = Utils.extend({}, swiper.params);
3939
+    swiper.passedParams = Utils.extend({}, params);
3940
+
3941
+    // Save Dom lib
3942
+    swiper.$ = $;
3943
+
3944
+    // Find el
3945
+    const $el = $(swiper.params.el);
3946
+    el = $el[0];
3947
+
3948
+    if (!el) {
3949
+      return undefined;
3950
+    }
3951
+
3952
+    if ($el.length > 1) {
3953
+      const swipers = [];
3954
+      $el.each((index, containerEl) => {
3955
+        const newParams = Utils.extend({}, params, { el: containerEl });
3956
+        swipers.push(new Swiper(newParams));
3957
+      });
3958
+      return swipers;
3959
+    }
3960
+
3961
+    el.swiper = swiper;
3962
+    $el.data('swiper', swiper);
3963
+
3964
+    // Find Wrapper
3965
+    let $wrapperEl;
3966
+    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
3967
+      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));
3968
+      // Children needs to return slot items
3969
+      $wrapperEl.children = (options) => $el.children(options);
3970
+    } else {
3971
+      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);
3972
+    }
3973
+    // Extend Swiper
3974
+    Utils.extend(swiper, {
3975
+      $el,
3976
+      el,
3977
+      $wrapperEl,
3978
+      wrapperEl: $wrapperEl[0],
3979
+
3980
+      // Classes
3981
+      classNames: [],
3982
+
3983
+      // Slides
3984
+      slides: $(),
3985
+      slidesGrid: [],
3986
+      snapGrid: [],
3987
+      slidesSizesGrid: [],
3988
+
3989
+      // isDirection
3990
+      isHorizontal() {
3991
+        return swiper.params.direction === 'horizontal';
3992
+      },
3993
+      isVertical() {
3994
+        return swiper.params.direction === 'vertical';
3995
+      },
3996
+      // RTL
3997
+      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3998
+      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3999
+      wrongRTL: $wrapperEl.css('display') === '-webkit-box',
4000
+
4001
+      // Indexes
4002
+      activeIndex: 0,
4003
+      realIndex: 0,
4004
+
4005
+      //
4006
+      isBeginning: true,
4007
+      isEnd: false,
4008
+
4009
+      // Props
4010
+      translate: 0,
4011
+      previousTranslate: 0,
4012
+      progress: 0,
4013
+      velocity: 0,
4014
+      animating: false,
4015
+
4016
+      // Locks
4017
+      allowSlideNext: swiper.params.allowSlideNext,
4018
+      allowSlidePrev: swiper.params.allowSlidePrev,
4019
+
4020
+      // Touch Events
4021
+      touchEvents: (function touchEvents() {
4022
+        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
4023
+        let desktop = ['mousedown', 'mousemove', 'mouseup'];
4024
+        if (Support.pointerEvents) {
4025
+          desktop = ['pointerdown', 'pointermove', 'pointerup'];
4026
+        }
4027
+        swiper.touchEventsTouch = {
4028
+          start: touch[0],
4029
+          move: touch[1],
4030
+          end: touch[2],
4031
+          cancel: touch[3],
4032
+        };
4033
+        swiper.touchEventsDesktop = {
4034
+          start: desktop[0],
4035
+          move: desktop[1],
4036
+          end: desktop[2],
4037
+        };
4038
+        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
4039
+      }()),
4040
+      touchEventsData: {
4041
+        isTouched: undefined,
4042
+        isMoved: undefined,
4043
+        allowTouchCallbacks: undefined,
4044
+        touchStartTime: undefined,
4045
+        isScrolling: undefined,
4046
+        currentTranslate: undefined,
4047
+        startTranslate: undefined,
4048
+        allowThresholdMove: undefined,
4049
+        // Form elements to match
4050
+        formElements: 'input, select, option, textarea, button, video, label',
4051
+        // Last click time
4052
+        lastClickTime: Utils.now(),
4053
+        clickTimeout: undefined,
4054
+        // Velocities
4055
+        velocities: [],
4056
+        allowMomentumBounce: undefined,
4057
+        isTouchEvent: undefined,
4058
+        startMoving: undefined,
4059
+      },
4060
+
4061
+      // Clicks
4062
+      allowClick: true,
4063
+
4064
+      // Touches
4065
+      allowTouchMove: swiper.params.allowTouchMove,
4066
+
4067
+      touches: {
4068
+        startX: 0,
4069
+        startY: 0,
4070
+        currentX: 0,
4071
+        currentY: 0,
4072
+        diff: 0,
4073
+      },
4074
+
4075
+      // Images
4076
+      imagesToLoad: [],
4077
+      imagesLoaded: 0,
4078
+
4079
+    });
4080
+
4081
+    // Install Modules
4082
+    swiper.useModules();
4083
+
4084
+    // Init
4085
+    if (swiper.params.init) {
4086
+      swiper.init();
4087
+    }
4088
+
4089
+    // Return app instance
4090
+    return swiper;
4091
+  }
4092
+
4093
+  slidesPerViewDynamic() {
4094
+    const swiper = this;
4095
+    const {
4096
+      params, slides, slidesGrid, size: swiperSize, activeIndex,
4097
+    } = swiper;
4098
+    let spv = 1;
4099
+    if (params.centeredSlides) {
4100
+      let slideSize = slides[activeIndex].swiperSlideSize;
4101
+      let breakLoop;
4102
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
4103
+        if (slides[i] && !breakLoop) {
4104
+          slideSize += slides[i].swiperSlideSize;
4105
+          spv += 1;
4106
+          if (slideSize > swiperSize) breakLoop = true;
4107
+        }
4108
+      }
4109
+      for (let i = activeIndex - 1; i >= 0; i -= 1) {
4110
+        if (slides[i] && !breakLoop) {
4111
+          slideSize += slides[i].swiperSlideSize;
4112
+          spv += 1;
4113
+          if (slideSize > swiperSize) breakLoop = true;
4114
+        }
4115
+      }
4116
+    } else {
4117
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
4118
+        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {
4119
+          spv += 1;
4120
+        }
4121
+      }
4122
+    }
4123
+    return spv;
4124
+  }
4125
+
4126
+  update() {
4127
+    const swiper = this;
4128
+    if (!swiper || swiper.destroyed) return;
4129
+    const { snapGrid, params } = swiper;
4130
+    // Breakpoints
4131
+    if (params.breakpoints) {
4132
+      swiper.setBreakpoint();
4133
+    }
4134
+    swiper.updateSize();
4135
+    swiper.updateSlides();
4136
+    swiper.updateProgress();
4137
+    swiper.updateSlidesClasses();
4138
+
4139
+    function setTranslate() {
4140
+      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
4141
+      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
4142
+      swiper.setTranslate(newTranslate);
4143
+      swiper.updateActiveIndex();
4144
+      swiper.updateSlidesClasses();
4145
+    }
4146
+    let translated;
4147
+    if (swiper.params.freeMode) {
4148
+      setTranslate();
4149
+      if (swiper.params.autoHeight) {
4150
+        swiper.updateAutoHeight();
4151
+      }
4152
+    } else {
4153
+      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
4154
+        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
4155
+      } else {
4156
+        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
4157
+      }
4158
+      if (!translated) {
4159
+        setTranslate();
4160
+      }
4161
+    }
4162
+    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
4163
+      swiper.checkOverflow();
4164
+    }
4165
+    swiper.emit('update');
4166
+  }
4167
+
4168
+  changeDirection(newDirection, needUpdate = true) {
4169
+    const swiper = this;
4170
+    const currentDirection = swiper.params.direction;
4171
+    if (!newDirection) {
4172
+      // eslint-disable-next-line
4173
+      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
4174
+    }
4175
+    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
4176
+      return swiper;
4177
+    }
4178
+
4179
+    swiper.$el
4180
+      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)
4181
+      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);
4182
+
4183
+    swiper.params.direction = newDirection;
4184
+
4185
+    swiper.slides.each((slideIndex, slideEl) => {
4186
+      if (newDirection === 'vertical') {
4187
+        slideEl.style.width = '';
4188
+      } else {
4189
+        slideEl.style.height = '';
4190
+      }
4191
+    });
4192
+
4193
+    swiper.emit('changeDirection');
4194
+    if (needUpdate) swiper.update();
4195
+
4196
+    return swiper;
4197
+  }
4198
+
4199
+  init() {
4200
+    const swiper = this;
4201
+    if (swiper.initialized) return;
4202
+
4203
+    swiper.emit('beforeInit');
4204
+
4205
+    // Set breakpoint
4206
+    if (swiper.params.breakpoints) {
4207
+      swiper.setBreakpoint();
4208
+    }
4209
+
4210
+    // Add Classes
4211
+    swiper.addClasses();
4212
+
4213
+    // Create loop
4214
+    if (swiper.params.loop) {
4215
+      swiper.loopCreate();
4216
+    }
4217
+
4218
+    // Update size
4219
+    swiper.updateSize();
4220
+
4221
+    // Update slides
4222
+    swiper.updateSlides();
4223
+
4224
+    if (swiper.params.watchOverflow) {
4225
+      swiper.checkOverflow();
4226
+    }
4227
+
4228
+    // Set Grab Cursor
4229
+    if (swiper.params.grabCursor) {
4230
+      swiper.setGrabCursor();
4231
+    }
4232
+
4233
+    if (swiper.params.preloadImages) {
4234
+      swiper.preloadImages();
4235
+    }
4236
+
4237
+    // Slide To Initial Slide
4238
+    if (swiper.params.loop) {
4239
+      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
4240
+    } else {
4241
+      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
4242
+    }
4243
+
4244
+    // Attach events
4245
+    swiper.attachEvents();
4246
+
4247
+    // Init Flag
4248
+    swiper.initialized = true;
4249
+
4250
+    // Emit
4251
+    swiper.emit('init');
4252
+  }
4253
+
4254
+  destroy(deleteInstance = true, cleanStyles = true) {
4255
+    const swiper = this;
4256
+    const {
4257
+      params, $el, $wrapperEl, slides,
4258
+    } = swiper;
4259
+
4260
+    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
4261
+      return null;
4262
+    }
4263
+
4264
+    swiper.emit('beforeDestroy');
4265
+
4266
+    // Init Flag
4267
+    swiper.initialized = false;
4268
+
4269
+    // Detach events
4270
+    swiper.detachEvents();
4271
+
4272
+    // Destroy loop
4273
+    if (params.loop) {
4274
+      swiper.loopDestroy();
4275
+    }
4276
+
4277
+    // Cleanup styles
4278
+    if (cleanStyles) {
4279
+      swiper.removeClasses();
4280
+      $el.removeAttr('style');
4281
+      $wrapperEl.removeAttr('style');
4282
+      if (slides && slides.length) {
4283
+        slides
4284
+          .removeClass([
4285
+            params.slideVisibleClass,
4286
+            params.slideActiveClass,
4287
+            params.slideNextClass,
4288
+            params.slidePrevClass,
4289
+          ].join(' '))
4290
+          .removeAttr('style')
4291
+          .removeAttr('data-swiper-slide-index');
4292
+      }
4293
+    }
4294
+
4295
+    swiper.emit('destroy');
4296
+
4297
+    // Detach emitter events
4298
+    Object.keys(swiper.eventsListeners).forEach((eventName) => {
4299
+      swiper.off(eventName);
4300
+    });
4301
+
4302
+    if (deleteInstance !== false) {
4303
+      swiper.$el[0].swiper = null;
4304
+      swiper.$el.data('swiper', null);
4305
+      Utils.deleteProps(swiper);
4306
+    }
4307
+    swiper.destroyed = true;
4308
+
4309
+    return null;
4310
+  }
4311
+
4312
+  static extendDefaults(newDefaults) {
4313
+    Utils.extend(extendedDefaults, newDefaults);
4314
+  }
4315
+
4316
+  static get extendedDefaults() {
4317
+    return extendedDefaults;
4318
+  }
4319
+
4320
+  static get defaults() {
4321
+    return defaults;
4322
+  }
4323
+
4324
+  static get Class() {
4325
+    return SwiperClass;
4326
+  }
4327
+
4328
+  static get $() {
4329
+    return $;
4330
+  }
4331
+}
4332
+
4333
+var Device$1 = {
4334
+  name: 'device',
4335
+  proto: {
4336
+    device: Device,
4337
+  },
4338
+  static: {
4339
+    device: Device,
4340
+  },
4341
+};
4342
+
4343
+var Support$1 = {
4344
+  name: 'support',
4345
+  proto: {
4346
+    support: Support,
4347
+  },
4348
+  static: {
4349
+    support: Support,
4350
+  },
4351
+};
4352
+
4353
+const Browser = (function Browser() {
4354
+  function isSafari() {
4355
+    const ua = win.navigator.userAgent.toLowerCase();
4356
+    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
4357
+  }
4358
+  return {
4359
+    isEdge: !!win.navigator.userAgent.match(/Edge/g),
4360
+    isSafari: isSafari(),
4361
+    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),
4362
+  };
4363
+}());
4364
+
4365
+var Browser$1 = {
4366
+  name: 'browser',
4367
+  proto: {
4368
+    browser: Browser,
4369
+  },
4370
+  static: {
4371
+    browser: Browser,
4372
+  },
4373
+};
4374
+
4375
+var Resize = {
4376
+  name: 'resize',
4377
+  create() {
4378
+    const swiper = this;
4379
+    Utils.extend(swiper, {
4380
+      resize: {
4381
+        resizeHandler() {
4382
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
4383
+          swiper.emit('beforeResize');
4384
+          swiper.emit('resize');
4385
+        },
4386
+        orientationChangeHandler() {
4387
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
4388
+          swiper.emit('orientationchange');
4389
+        },
4390
+      },
4391
+    });
4392
+  },
4393
+  on: {
4394
+    init() {
4395
+      const swiper = this;
4396
+      // Emit resize
4397
+      win.addEventListener('resize', swiper.resize.resizeHandler);
4398
+
4399
+      // Emit orientationchange
4400
+      win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
4401
+    },
4402
+    destroy() {
4403
+      const swiper = this;
4404
+      win.removeEventListener('resize', swiper.resize.resizeHandler);
4405
+      win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
4406
+    },
4407
+  },
4408
+};
4409
+
4410
+const Observer = {
4411
+  func: win.MutationObserver || win.WebkitMutationObserver,
4412
+  attach(target, options = {}) {
4413
+    const swiper = this;
4414
+
4415
+    const ObserverFunc = Observer.func;
4416
+    const observer = new ObserverFunc((mutations) => {
4417
+      // The observerUpdate event should only be triggered
4418
+      // once despite the number of mutations.  Additional
4419
+      // triggers are redundant and are very costly
4420
+      if (mutations.length === 1) {
4421
+        swiper.emit('observerUpdate', mutations[0]);
4422
+        return;
4423
+      }
4424
+      const observerUpdate = function observerUpdate() {
4425
+        swiper.emit('observerUpdate', mutations[0]);
4426
+      };
4427
+
4428
+      if (win.requestAnimationFrame) {
4429
+        win.requestAnimationFrame(observerUpdate);
4430
+      } else {
4431
+        win.setTimeout(observerUpdate, 0);
4432
+      }
4433
+    });
4434
+
4435
+    observer.observe(target, {
4436
+      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
4437
+      childList: typeof options.childList === 'undefined' ? true : options.childList,
4438
+      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
4439
+    });
4440
+
4441
+    swiper.observer.observers.push(observer);
4442
+  },
4443
+  init() {
4444
+    const swiper = this;
4445
+    if (!Support.observer || !swiper.params.observer) return;
4446
+    if (swiper.params.observeParents) {
4447
+      const containerParents = swiper.$el.parents();
4448
+      for (let i = 0; i < containerParents.length; i += 1) {
4449
+        swiper.observer.attach(containerParents[i]);
4450
+      }
4451
+    }
4452
+    // Observe container
4453
+    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });
4454
+
4455
+    // Observe wrapper
4456
+    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
4457
+  },
4458
+  destroy() {
4459
+    const swiper = this;
4460
+    swiper.observer.observers.forEach((observer) => {
4461
+      observer.disconnect();
4462
+    });
4463
+    swiper.observer.observers = [];
4464
+  },
4465
+};
4466
+
4467
+var Observer$1 = {
4468
+  name: 'observer',
4469
+  params: {
4470
+    observer: false,
4471
+    observeParents: false,
4472
+    observeSlideChildren: false,
4473
+  },
4474
+  create() {
4475
+    const swiper = this;
4476
+    Utils.extend(swiper, {
4477
+      observer: {
4478
+        init: Observer.init.bind(swiper),
4479
+        attach: Observer.attach.bind(swiper),
4480
+        destroy: Observer.destroy.bind(swiper),
4481
+        observers: [],
4482
+      },
4483
+    });
4484
+  },
4485
+  on: {
4486
+    init() {
4487
+      const swiper = this;
4488
+      swiper.observer.init();
4489
+    },
4490
+    destroy() {
4491
+      const swiper = this;
4492
+      swiper.observer.destroy();
4493
+    },
4494
+  },
4495
+};
4496
+
4497
+const Virtual = {
4498
+  update(force) {
4499
+    const swiper = this;
4500
+    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;
4501
+    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
4502
+    const {
4503
+      from: previousFrom,
4504
+      to: previousTo,
4505
+      slides,
4506
+      slidesGrid: previousSlidesGrid,
4507
+      renderSlide,
4508
+      offset: previousOffset,
4509
+    } = swiper.virtual;
4510
+    swiper.updateActiveIndex();
4511
+    const activeIndex = swiper.activeIndex || 0;
4512
+
4513
+    let offsetProp;
4514
+    if (swiper.rtlTranslate) offsetProp = 'right';
4515
+    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
4516
+
4517
+    let slidesAfter;
4518
+    let slidesBefore;
4519
+    if (centeredSlides) {
4520
+      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
4521
+      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
4522
+    } else {
4523
+      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
4524
+      slidesBefore = slidesPerGroup + addSlidesAfter;
4525
+    }
4526
+    const from = Math.max((activeIndex || 0) - slidesBefore, 0);
4527
+    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
4528
+    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
4529
+
4530
+    Utils.extend(swiper.virtual, {
4531
+      from,
4532
+      to,
4533
+      offset,
4534
+      slidesGrid: swiper.slidesGrid,
4535
+    });
4536
+
4537
+    function onRendered() {
4538
+      swiper.updateSlides();
4539
+      swiper.updateProgress();
4540
+      swiper.updateSlidesClasses();
4541
+      if (swiper.lazy && swiper.params.lazy.enabled) {
4542
+        swiper.lazy.load();
4543
+      }
4544
+    }
4545
+
4546
+    if (previousFrom === from && previousTo === to && !force) {
4547
+      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
4548
+        swiper.slides.css(offsetProp, `${offset}px`);
4549
+      }
4550
+      swiper.updateProgress();
4551
+      return;
4552
+    }
4553
+    if (swiper.params.virtual.renderExternal) {
4554
+      swiper.params.virtual.renderExternal.call(swiper, {
4555
+        offset,
4556
+        from,
4557
+        to,
4558
+        slides: (function getSlides() {
4559
+          const slidesToRender = [];
4560
+          for (let i = from; i <= to; i += 1) {
4561
+            slidesToRender.push(slides[i]);
4562
+          }
4563
+          return slidesToRender;
4564
+        }()),
4565
+      });
4566
+      onRendered();
4567
+      return;
4568
+    }
4569
+    const prependIndexes = [];
4570
+    const appendIndexes = [];
4571
+    if (force) {
4572
+      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();
4573
+    } else {
4574
+      for (let i = previousFrom; i <= previousTo; i += 1) {
4575
+        if (i < from || i > to) {
4576
+          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove();
4577
+        }
4578
+      }
4579
+    }
4580
+    for (let i = 0; i < slides.length; i += 1) {
4581
+      if (i >= from && i <= to) {
4582
+        if (typeof previousTo === 'undefined' || force) {
4583
+          appendIndexes.push(i);
4584
+        } else {
4585
+          if (i > previousTo) appendIndexes.push(i);
4586
+          if (i < previousFrom) prependIndexes.push(i);
4587
+        }
4588
+      }
4589
+    }
4590
+    appendIndexes.forEach((index) => {
4591
+      swiper.$wrapperEl.append(renderSlide(slides[index], index));
4592
+    });
4593
+    prependIndexes.sort((a, b) => b - a).forEach((index) => {
4594
+      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
4595
+    });
4596
+    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);
4597
+    onRendered();
4598
+  },
4599
+  renderSlide(slide, index) {
4600
+    const swiper = this;
4601
+    const params = swiper.params.virtual;
4602
+    if (params.cache && swiper.virtual.cache[index]) {
4603
+      return swiper.virtual.cache[index];
4604
+    }
4605
+    const $slideEl = params.renderSlide
4606
+      ? $(params.renderSlide.call(swiper, slide, index))
4607
+      : $(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`);
4608
+    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
4609
+    if (params.cache) swiper.virtual.cache[index] = $slideEl;
4610
+    return $slideEl;
4611
+  },
4612
+  appendSlide(slides) {
4613
+    const swiper = this;
4614
+    if (typeof slides === 'object' && 'length' in slides) {
4615
+      for (let i = 0; i < slides.length; i += 1) {
4616
+        if (slides[i]) swiper.virtual.slides.push(slides[i]);
4617
+      }
4618
+    } else {
4619
+      swiper.virtual.slides.push(slides);
4620
+    }
4621
+    swiper.virtual.update(true);
4622
+  },
4623
+  prependSlide(slides) {
4624
+    const swiper = this;
4625
+    const activeIndex = swiper.activeIndex;
4626
+    let newActiveIndex = activeIndex + 1;
4627
+    let numberOfNewSlides = 1;
4628
+
4629
+    if (Array.isArray(slides)) {
4630
+      for (let i = 0; i < slides.length; i += 1) {
4631
+        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
4632
+      }
4633
+      newActiveIndex = activeIndex + slides.length;
4634
+      numberOfNewSlides = slides.length;
4635
+    } else {
4636
+      swiper.virtual.slides.unshift(slides);
4637
+    }
4638
+    if (swiper.params.virtual.cache) {
4639
+      const cache = swiper.virtual.cache;
4640
+      const newCache = {};
4641
+      Object.keys(cache).forEach((cachedIndex) => {
4642
+        const $cachedEl = cache[cachedIndex];
4643
+        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
4644
+        if (cachedElIndex) {
4645
+          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
4646
+        }
4647
+        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
4648
+      });
4649
+      swiper.virtual.cache = newCache;
4650
+    }
4651
+    swiper.virtual.update(true);
4652
+    swiper.slideTo(newActiveIndex, 0);
4653
+  },
4654
+  removeSlide(slidesIndexes) {
4655
+    const swiper = this;
4656
+    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
4657
+    let activeIndex = swiper.activeIndex;
4658
+    if (Array.isArray(slidesIndexes)) {
4659
+      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
4660
+        swiper.virtual.slides.splice(slidesIndexes[i], 1);
4661
+        if (swiper.params.virtual.cache) {
4662
+          delete swiper.virtual.cache[slidesIndexes[i]];
4663
+        }
4664
+        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
4665
+        activeIndex = Math.max(activeIndex, 0);
4666
+      }
4667
+    } else {
4668
+      swiper.virtual.slides.splice(slidesIndexes, 1);
4669
+      if (swiper.params.virtual.cache) {
4670
+        delete swiper.virtual.cache[slidesIndexes];
4671
+      }
4672
+      if (slidesIndexes < activeIndex) activeIndex -= 1;
4673
+      activeIndex = Math.max(activeIndex, 0);
4674
+    }
4675
+    swiper.virtual.update(true);
4676
+    swiper.slideTo(activeIndex, 0);
4677
+  },
4678
+  removeAllSlides() {
4679
+    const swiper = this;
4680
+    swiper.virtual.slides = [];
4681
+    if (swiper.params.virtual.cache) {
4682
+      swiper.virtual.cache = {};
4683
+    }
4684
+    swiper.virtual.update(true);
4685
+    swiper.slideTo(0, 0);
4686
+  },
4687
+};
4688
+
4689
+var Virtual$1 = {
4690
+  name: 'virtual',
4691
+  params: {
4692
+    virtual: {
4693
+      enabled: false,
4694
+      slides: [],
4695
+      cache: true,
4696
+      renderSlide: null,
4697
+      renderExternal: null,
4698
+      addSlidesBefore: 0,
4699
+      addSlidesAfter: 0,
4700
+    },
4701
+  },
4702
+  create() {
4703
+    const swiper = this;
4704
+    Utils.extend(swiper, {
4705
+      virtual: {
4706
+        update: Virtual.update.bind(swiper),
4707
+        appendSlide: Virtual.appendSlide.bind(swiper),
4708
+        prependSlide: Virtual.prependSlide.bind(swiper),
4709
+        removeSlide: Virtual.removeSlide.bind(swiper),
4710
+        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
4711
+        renderSlide: Virtual.renderSlide.bind(swiper),
4712
+        slides: swiper.params.virtual.slides,
4713
+        cache: {},
4714
+      },
4715
+    });
4716
+  },
4717
+  on: {
4718
+    beforeInit() {
4719
+      const swiper = this;
4720
+      if (!swiper.params.virtual.enabled) return;
4721
+      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
4722
+      const overwriteParams = {
4723
+        watchSlidesProgress: true,
4724
+      };
4725
+      Utils.extend(swiper.params, overwriteParams);
4726
+      Utils.extend(swiper.originalParams, overwriteParams);
4727
+
4728
+      if (!swiper.params.initialSlide) {
4729
+        swiper.virtual.update();
4730
+      }
4731
+    },
4732
+    setTranslate() {
4733
+      const swiper = this;
4734
+      if (!swiper.params.virtual.enabled) return;
4735
+      swiper.virtual.update();
4736
+    },
4737
+  },
4738
+};
4739
+
4740
+const Keyboard = {
4741
+  handle(event) {
4742
+    const swiper = this;
4743
+    const { rtlTranslate: rtl } = swiper;
4744
+    let e = event;
4745
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
4746
+    const kc = e.keyCode || e.charCode;
4747
+    // Directions locks
4748
+    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {
4749
+      return false;
4750
+    }
4751
+    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {
4752
+      return false;
4753
+    }
4754
+    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
4755
+      return undefined;
4756
+    }
4757
+    if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
4758
+      return undefined;
4759
+    }
4760
+    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
4761
+      let inView = false;
4762
+      // Check that swiper should be inside of visible area of window
4763
+      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {
4764
+        return undefined;
4765
+      }
4766
+      const windowWidth = win.innerWidth;
4767
+      const windowHeight = win.innerHeight;
4768
+      const swiperOffset = swiper.$el.offset();
4769
+      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
4770
+      const swiperCoord = [
4771
+        [swiperOffset.left, swiperOffset.top],
4772
+        [swiperOffset.left + swiper.width, swiperOffset.top],
4773
+        [swiperOffset.left, swiperOffset.top + swiper.height],
4774
+        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],
4775
+      ];
4776
+      for (let i = 0; i < swiperCoord.length; i += 1) {
4777
+        const point = swiperCoord[i];
4778
+        if (
4779
+          point[0] >= 0 && point[0] <= windowWidth
4780
+          && point[1] >= 0 && point[1] <= windowHeight
4781
+        ) {
4782
+          inView = true;
4783
+        }
4784
+      }
4785
+      if (!inView) return undefined;
4786
+    }
4787
+    if (swiper.isHorizontal()) {
4788
+      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
4789
+        if (e.preventDefault) e.preventDefault();
4790
+        else e.returnValue = false;
4791
+      }
4792
+      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();
4793
+      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();
4794
+    } else {
4795
+      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
4796
+        if (e.preventDefault) e.preventDefault();
4797
+        else e.returnValue = false;
4798
+      }
4799
+      if (kc === 34 || kc === 40) swiper.slideNext();
4800
+      if (kc === 33 || kc === 38) swiper.slidePrev();
4801
+    }
4802
+    swiper.emit('keyPress', kc);
4803
+    return undefined;
4804
+  },
4805
+  enable() {
4806
+    const swiper = this;
4807
+    if (swiper.keyboard.enabled) return;
4808
+    $(doc).on('keydown', swiper.keyboard.handle);
4809
+    swiper.keyboard.enabled = true;
4810
+  },
4811
+  disable() {
4812
+    const swiper = this;
4813
+    if (!swiper.keyboard.enabled) return;
4814
+    $(doc).off('keydown', swiper.keyboard.handle);
4815
+    swiper.keyboard.enabled = false;
4816
+  },
4817
+};
4818
+
4819
+var Keyboard$1 = {
4820
+  name: 'keyboard',
4821
+  params: {
4822
+    keyboard: {
4823
+      enabled: false,
4824
+      onlyInViewport: true,
4825
+    },
4826
+  },
4827
+  create() {
4828
+    const swiper = this;
4829
+    Utils.extend(swiper, {
4830
+      keyboard: {
4831
+        enabled: false,
4832
+        enable: Keyboard.enable.bind(swiper),
4833
+        disable: Keyboard.disable.bind(swiper),
4834
+        handle: Keyboard.handle.bind(swiper),
4835
+      },
4836
+    });
4837
+  },
4838
+  on: {
4839
+    init() {
4840
+      const swiper = this;
4841
+      if (swiper.params.keyboard.enabled) {
4842
+        swiper.keyboard.enable();
4843
+      }
4844
+    },
4845
+    destroy() {
4846
+      const swiper = this;
4847
+      if (swiper.keyboard.enabled) {
4848
+        swiper.keyboard.disable();
4849
+      }
4850
+    },
4851
+  },
4852
+};
4853
+
4854
+function isEventSupported() {
4855
+  const eventName = 'onwheel';
4856
+  let isSupported = eventName in doc;
4857
+
4858
+  if (!isSupported) {
4859
+    const element = doc.createElement('div');
4860
+    element.setAttribute(eventName, 'return;');
4861
+    isSupported = typeof element[eventName] === 'function';
4862
+  }
4863
+
4864
+  if (!isSupported
4865
+    && doc.implementation
4866
+    && doc.implementation.hasFeature
4867
+    // always returns true in newer browsers as per the standard.
4868
+    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
4869
+    && doc.implementation.hasFeature('', '') !== true
4870
+  ) {
4871
+    // This is the only way to test support for the `wheel` event in IE9+.
4872
+    isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
4873
+  }
4874
+
4875
+  return isSupported;
4876
+}
4877
+const Mousewheel = {
4878
+  lastScrollTime: Utils.now(),
4879
+  lastEventBeforeSnap: undefined,
4880
+  recentWheelEvents: [],
4881
+  event() {
4882
+    if (win.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
4883
+    return isEventSupported() ? 'wheel' : 'mousewheel';
4884
+  },
4885
+  normalize(e) {
4886
+    // Reasonable defaults
4887
+    const PIXEL_STEP = 10;
4888
+    const LINE_HEIGHT = 40;
4889
+    const PAGE_HEIGHT = 800;
4890
+
4891
+    let sX = 0;
4892
+    let sY = 0; // spinX, spinY
4893
+    let pX = 0;
4894
+    let pY = 0; // pixelX, pixelY
4895
+
4896
+    // Legacy
4897
+    if ('detail' in e) {
4898
+      sY = e.detail;
4899
+    }
4900
+    if ('wheelDelta' in e) {
4901
+      sY = -e.wheelDelta / 120;
4902
+    }
4903
+    if ('wheelDeltaY' in e) {
4904
+      sY = -e.wheelDeltaY / 120;
4905
+    }
4906
+    if ('wheelDeltaX' in e) {
4907
+      sX = -e.wheelDeltaX / 120;
4908
+    }
4909
+
4910
+    // side scrolling on FF with DOMMouseScroll
4911
+    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
4912
+      sX = sY;
4913
+      sY = 0;
4914
+    }
4915
+
4916
+    pX = sX * PIXEL_STEP;
4917
+    pY = sY * PIXEL_STEP;
4918
+
4919
+    if ('deltaY' in e) {
4920
+      pY = e.deltaY;
4921
+    }
4922
+    if ('deltaX' in e) {
4923
+      pX = e.deltaX;
4924
+    }
4925
+
4926
+    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
4927
+      pX = pY;
4928
+      pY = 0;
4929
+    }
4930
+
4931
+    if ((pX || pY) && e.deltaMode) {
4932
+      if (e.deltaMode === 1) { // delta in LINE units
4933
+        pX *= LINE_HEIGHT;
4934
+        pY *= LINE_HEIGHT;
4935
+      } else { // delta in PAGE units
4936
+        pX *= PAGE_HEIGHT;
4937
+        pY *= PAGE_HEIGHT;
4938
+      }
4939
+    }
4940
+
4941
+    // Fall-back if spin cannot be determined
4942
+    if (pX && !sX) {
4943
+      sX = (pX < 1) ? -1 : 1;
4944
+    }
4945
+    if (pY && !sY) {
4946
+      sY = (pY < 1) ? -1 : 1;
4947
+    }
4948
+
4949
+    return {
4950
+      spinX: sX,
4951
+      spinY: sY,
4952
+      pixelX: pX,
4953
+      pixelY: pY,
4954
+    };
4955
+  },
4956
+  handleMouseEnter() {
4957
+    const swiper = this;
4958
+    swiper.mouseEntered = true;
4959
+  },
4960
+  handleMouseLeave() {
4961
+    const swiper = this;
4962
+    swiper.mouseEntered = false;
4963
+  },
4964
+  handle(event) {
4965
+    let e = event;
4966
+    const swiper = this;
4967
+    const params = swiper.params.mousewheel;
4968
+
4969
+    if (swiper.params.cssMode) {
4970
+      e.preventDefault();
4971
+    }
4972
+
4973
+    let target = swiper.$el;
4974
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4975
+      target = $(swiper.params.mousewheel.eventsTarged);
4976
+    }
4977
+    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
4978
+
4979
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
4980
+    let delta = 0;
4981
+    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
4982
+
4983
+    const data = Mousewheel.normalize(e);
4984
+
4985
+    if (params.forceToAxis) {
4986
+      if (swiper.isHorizontal()) {
4987
+        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
4988
+        else return true;
4989
+      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
4990
+      else return true;
4991
+    } else {
4992
+      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
4993
+    }
4994
+
4995
+    if (delta === 0) return true;
4996
+
4997
+    if (params.invert) delta = -delta;
4998
+
4999
+    if (!swiper.params.freeMode) {
5000
+      // Register the new event in a variable which stores the relevant data
5001
+      const newEvent = {
5002
+        time: Utils.now(),
5003
+        delta: Math.abs(delta),
5004
+        direction: Math.sign(delta),
5005
+        raw: event,
5006
+      };
5007
+
5008
+      // Keep the most recent events
5009
+      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
5010
+      if (recentWheelEvents.length >= 2) {
5011
+        recentWheelEvents.shift(); // only store the last N events
5012
+      }
5013
+      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
5014
+      recentWheelEvents.push(newEvent);
5015
+
5016
+      // If there is at least one previous recorded event:
5017
+      //   If direction has changed or
5018
+      //   if the scroll is quicker than the previous one:
5019
+      //     Animate the slider.
5020
+      // Else (this is the first time the wheel is moved):
5021
+      //     Animate the slider.
5022
+      if (prevEvent) {
5023
+        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
5024
+          swiper.mousewheel.animateSlider(newEvent);
5025
+        }
5026
+      } else {
5027
+        swiper.mousewheel.animateSlider(newEvent);
5028
+      }
5029
+
5030
+      // If it's time to release the scroll:
5031
+      //   Return now so you don't hit the preventDefault.
5032
+      if (swiper.mousewheel.releaseScroll(newEvent)) {
5033
+        return true;
5034
+      }
5035
+    } else {
5036
+      // Freemode or scrollContainer:
5037
+
5038
+      // If we recently snapped after a momentum scroll, then ignore wheel events
5039
+      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
5040
+      // or if it's a new scroll (larger delta or inverse sign as last event before
5041
+      // an end-of-momentum snap).
5042
+      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
5043
+      const { lastEventBeforeSnap } = swiper.mousewheel;
5044
+      const ignoreWheelEvents = lastEventBeforeSnap
5045
+        && newEvent.time < lastEventBeforeSnap.time + 500
5046
+        && newEvent.delta <= lastEventBeforeSnap.delta
5047
+        && newEvent.direction === lastEventBeforeSnap.direction;
5048
+      if (!ignoreWheelEvents) {
5049
+        swiper.mousewheel.lastEventBeforeSnap = undefined;
5050
+
5051
+        if (swiper.params.loop) {
5052
+          swiper.loopFix();
5053
+        }
5054
+        let position = swiper.getTranslate() + (delta * params.sensitivity);
5055
+        const wasBeginning = swiper.isBeginning;
5056
+        const wasEnd = swiper.isEnd;
5057
+
5058
+        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
5059
+        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
5060
+
5061
+        swiper.setTransition(0);
5062
+        swiper.setTranslate(position);
5063
+        swiper.updateProgress();
5064
+        swiper.updateActiveIndex();
5065
+        swiper.updateSlidesClasses();
5066
+
5067
+        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
5068
+          swiper.updateSlidesClasses();
5069
+        }
5070
+
5071
+        if (swiper.params.freeModeSticky) {
5072
+          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
5073
+          // the end of a momentum scroll by storing recent (N=15?) wheel events.
5074
+          // 1. do all N events have decreasing or same (absolute value) delta?
5075
+          // 2. did all N events arrive in the last M (M=500?) msecs?
5076
+          // 3. does the earliest event have an (absolute value) delta that's
5077
+          //    at least P (P=1?) larger than the most recent event's delta?
5078
+          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
5079
+          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
5080
+          // Snap immediately and ignore remaining wheel events in this scroll.
5081
+          // See comment above for "remaining wheel events in this scroll" determination.
5082
+          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
5083
+          clearTimeout(swiper.mousewheel.timeout);
5084
+          swiper.mousewheel.timeout = undefined;
5085
+          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
5086
+          if (recentWheelEvents.length >= 15) {
5087
+            recentWheelEvents.shift(); // only store the last N events
5088
+          }
5089
+          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
5090
+          const firstEvent = recentWheelEvents[0];
5091
+          recentWheelEvents.push(newEvent);
5092
+          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
5093
+            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
5094
+            recentWheelEvents.splice(0);
5095
+          } else if (recentWheelEvents.length >= 15
5096
+              && newEvent.time - firstEvent.time < 500
5097
+              && firstEvent.delta - newEvent.delta >= 1
5098
+              && newEvent.delta <= 6
5099
+          ) {
5100
+            // We're at the end of the deceleration of a momentum scroll, so there's no need
5101
+            // to wait for more events. Snap ASAP on the next tick.
5102
+            // Also, because there's some remaining momentum we'll bias the snap in the
5103
+            // direction of the ongoing scroll because it's better UX for the scroll to snap
5104
+            // in the same direction as the scroll instead of reversing to snap.  Therefore,
5105
+            // if it's already scrolled more than 20% in the current direction, keep going.
5106
+            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
5107
+            swiper.mousewheel.lastEventBeforeSnap = newEvent;
5108
+            recentWheelEvents.splice(0);
5109
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
5110
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5111
+            }, 0); // no delay; move on next tick
5112
+          }
5113
+          if (!swiper.mousewheel.timeout) {
5114
+            // if we get here, then we haven't detected the end of a momentum scroll, so
5115
+            // we'll consider a scroll "complete" when there haven't been any wheel events
5116
+            // for 500ms.
5117
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
5118
+              const snapToThreshold = 0.5;
5119
+              swiper.mousewheel.lastEventBeforeSnap = newEvent;
5120
+              recentWheelEvents.splice(0);
5121
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5122
+            }, 500);
5123
+          }
5124
+        }
5125
+
5126
+        // Emit event
5127
+        if (!ignoreWheelEvents) swiper.emit('scroll', e);
5128
+
5129
+        // Stop autoplay
5130
+        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
5131
+        // Return page scroll on edge positions
5132
+        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
5133
+      }
5134
+    }
5135
+
5136
+    if (e.preventDefault) e.preventDefault();
5137
+    else e.returnValue = false;
5138
+    return false;
5139
+  },
5140
+  animateSlider(newEvent) {
5141
+    const swiper = this;
5142
+    // If the movement is NOT big enough and
5143
+    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
5144
+    //   Don't go any further (avoid insignificant scroll movement).
5145
+    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
5146
+      // Return false as a default
5147
+      return true;
5148
+    }
5149
+    // If user is scrolling towards the end:
5150
+    //   If the slider hasn't hit the latest slide or
5151
+    //   if the slider is a loop and
5152
+    //   if the slider isn't moving right now:
5153
+    //     Go to next slide and
5154
+    //     emit a scroll event.
5155
+    // Else (the user is scrolling towards the beginning) and
5156
+    // if the slider hasn't hit the first slide or
5157
+    // if the slider is a loop and
5158
+    // if the slider isn't moving right now:
5159
+    //   Go to prev slide and
5160
+    //   emit a scroll event.
5161
+    if (newEvent.direction < 0) {
5162
+      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
5163
+        swiper.slideNext();
5164
+        swiper.emit('scroll', newEvent.raw);
5165
+      }
5166
+    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
5167
+      swiper.slidePrev();
5168
+      swiper.emit('scroll', newEvent.raw);
5169
+    }
5170
+    // If you got here is because an animation has been triggered so store the current time
5171
+    swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();
5172
+    // Return false as a default
5173
+    return false;
5174
+  },
5175
+  releaseScroll(newEvent) {
5176
+    const swiper = this;
5177
+    const params = swiper.params.mousewheel;
5178
+    if (newEvent.direction < 0) {
5179
+      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
5180
+        // Return true to animate scroll on edges
5181
+        return true;
5182
+      }
5183
+    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
5184
+      // Return true to animate scroll on edges
5185
+      return true;
5186
+    }
5187
+    return false;
5188
+  },
5189
+  enable() {
5190
+    const swiper = this;
5191
+    const event = Mousewheel.event();
5192
+    if (swiper.params.cssMode) {
5193
+      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
5194
+      return true;
5195
+    }
5196
+    if (!event) return false;
5197
+    if (swiper.mousewheel.enabled) return false;
5198
+    let target = swiper.$el;
5199
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
5200
+      target = $(swiper.params.mousewheel.eventsTarged);
5201
+    }
5202
+    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
5203
+    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
5204
+    target.on(event, swiper.mousewheel.handle);
5205
+    swiper.mousewheel.enabled = true;
5206
+    return true;
5207
+  },
5208
+  disable() {
5209
+    const swiper = this;
5210
+    const event = Mousewheel.event();
5211
+    if (swiper.params.cssMode) {
5212
+      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
5213
+      return true;
5214
+    }
5215
+    if (!event) return false;
5216
+    if (!swiper.mousewheel.enabled) return false;
5217
+    let target = swiper.$el;
5218
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
5219
+      target = $(swiper.params.mousewheel.eventsTarged);
5220
+    }
5221
+    target.off(event, swiper.mousewheel.handle);
5222
+    swiper.mousewheel.enabled = false;
5223
+    return true;
5224
+  },
5225
+};
5226
+
5227
+var Mousewheel$1 = {
5228
+  name: 'mousewheel',
5229
+  params: {
5230
+    mousewheel: {
5231
+      enabled: false,
5232
+      releaseOnEdges: false,
5233
+      invert: false,
5234
+      forceToAxis: false,
5235
+      sensitivity: 1,
5236
+      eventsTarged: 'container',
5237
+    },
5238
+  },
5239
+  create() {
5240
+    const swiper = this;
5241
+    Utils.extend(swiper, {
5242
+      mousewheel: {
5243
+        enabled: false,
5244
+        enable: Mousewheel.enable.bind(swiper),
5245
+        disable: Mousewheel.disable.bind(swiper),
5246
+        handle: Mousewheel.handle.bind(swiper),
5247
+        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
5248
+        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
5249
+        animateSlider: Mousewheel.animateSlider.bind(swiper),
5250
+        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
5251
+        lastScrollTime: Utils.now(),
5252
+        lastEventBeforeSnap: undefined,
5253
+        recentWheelEvents: [],
5254
+      },
5255
+    });
5256
+  },
5257
+  on: {
5258
+    init() {
5259
+      const swiper = this;
5260
+      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
5261
+        swiper.mousewheel.disable();
5262
+      }
5263
+      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
5264
+    },
5265
+    destroy() {
5266
+      const swiper = this;
5267
+      if (swiper.params.cssMode) {
5268
+        swiper.mousewheel.enable();
5269
+      }
5270
+      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
5271
+    },
5272
+  },
5273
+};
5274
+
5275
+const Navigation = {
5276
+  update() {
5277
+    // Update Navigation Buttons
5278
+    const swiper = this;
5279
+    const params = swiper.params.navigation;
5280
+
5281
+    if (swiper.params.loop) return;
5282
+    const { $nextEl, $prevEl } = swiper.navigation;
5283
+
5284
+    if ($prevEl && $prevEl.length > 0) {
5285
+      if (swiper.isBeginning) {
5286
+        $prevEl.addClass(params.disabledClass);
5287
+      } else {
5288
+        $prevEl.removeClass(params.disabledClass);
5289
+      }
5290
+      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5291
+    }
5292
+    if ($nextEl && $nextEl.length > 0) {
5293
+      if (swiper.isEnd) {
5294
+        $nextEl.addClass(params.disabledClass);
5295
+      } else {
5296
+        $nextEl.removeClass(params.disabledClass);
5297
+      }
5298
+      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5299
+    }
5300
+  },
5301
+  onPrevClick(e) {
5302
+    const swiper = this;
5303
+    e.preventDefault();
5304
+    if (swiper.isBeginning && !swiper.params.loop) return;
5305
+    swiper.slidePrev();
5306
+  },
5307
+  onNextClick(e) {
5308
+    const swiper = this;
5309
+    e.preventDefault();
5310
+    if (swiper.isEnd && !swiper.params.loop) return;
5311
+    swiper.slideNext();
5312
+  },
5313
+  init() {
5314
+    const swiper = this;
5315
+    const params = swiper.params.navigation;
5316
+    if (!(params.nextEl || params.prevEl)) return;
5317
+
5318
+    let $nextEl;
5319
+    let $prevEl;
5320
+    if (params.nextEl) {
5321
+      $nextEl = $(params.nextEl);
5322
+      if (
5323
+        swiper.params.uniqueNavElements
5324
+        && typeof params.nextEl === 'string'
5325
+        && $nextEl.length > 1
5326
+        && swiper.$el.find(params.nextEl).length === 1
5327
+      ) {
5328
+        $nextEl = swiper.$el.find(params.nextEl);
5329
+      }
5330
+    }
5331
+    if (params.prevEl) {
5332
+      $prevEl = $(params.prevEl);
5333
+      if (
5334
+        swiper.params.uniqueNavElements
5335
+        && typeof params.prevEl === 'string'
5336
+        && $prevEl.length > 1
5337
+        && swiper.$el.find(params.prevEl).length === 1
5338
+      ) {
5339
+        $prevEl = swiper.$el.find(params.prevEl);
5340
+      }
5341
+    }
5342
+
5343
+    if ($nextEl && $nextEl.length > 0) {
5344
+      $nextEl.on('click', swiper.navigation.onNextClick);
5345
+    }
5346
+    if ($prevEl && $prevEl.length > 0) {
5347
+      $prevEl.on('click', swiper.navigation.onPrevClick);
5348
+    }
5349
+
5350
+    Utils.extend(swiper.navigation, {
5351
+      $nextEl,
5352
+      nextEl: $nextEl && $nextEl[0],
5353
+      $prevEl,
5354
+      prevEl: $prevEl && $prevEl[0],
5355
+    });
5356
+  },
5357
+  destroy() {
5358
+    const swiper = this;
5359
+    const { $nextEl, $prevEl } = swiper.navigation;
5360
+    if ($nextEl && $nextEl.length) {
5361
+      $nextEl.off('click', swiper.navigation.onNextClick);
5362
+      $nextEl.removeClass(swiper.params.navigation.disabledClass);
5363
+    }
5364
+    if ($prevEl && $prevEl.length) {
5365
+      $prevEl.off('click', swiper.navigation.onPrevClick);
5366
+      $prevEl.removeClass(swiper.params.navigation.disabledClass);
5367
+    }
5368
+  },
5369
+};
5370
+
5371
+var Navigation$1 = {
5372
+  name: 'navigation',
5373
+  params: {
5374
+    navigation: {
5375
+      nextEl: null,
5376
+      prevEl: null,
5377
+
5378
+      hideOnClick: false,
5379
+      disabledClass: 'swiper-button-disabled',
5380
+      hiddenClass: 'swiper-button-hidden',
5381
+      lockClass: 'swiper-button-lock',
5382
+    },
5383
+  },
5384
+  create() {
5385
+    const swiper = this;
5386
+    Utils.extend(swiper, {
5387
+      navigation: {
5388
+        init: Navigation.init.bind(swiper),
5389
+        update: Navigation.update.bind(swiper),
5390
+        destroy: Navigation.destroy.bind(swiper),
5391
+        onNextClick: Navigation.onNextClick.bind(swiper),
5392
+        onPrevClick: Navigation.onPrevClick.bind(swiper),
5393
+      },
5394
+    });
5395
+  },
5396
+  on: {
5397
+    init() {
5398
+      const swiper = this;
5399
+      swiper.navigation.init();
5400
+      swiper.navigation.update();
5401
+    },
5402
+    toEdge() {
5403
+      const swiper = this;
5404
+      swiper.navigation.update();
5405
+    },
5406
+    fromEdge() {
5407
+      const swiper = this;
5408
+      swiper.navigation.update();
5409
+    },
5410
+    destroy() {
5411
+      const swiper = this;
5412
+      swiper.navigation.destroy();
5413
+    },
5414
+    click(e) {
5415
+      const swiper = this;
5416
+      const { $nextEl, $prevEl } = swiper.navigation;
5417
+      if (
5418
+        swiper.params.navigation.hideOnClick
5419
+        && !$(e.target).is($prevEl)
5420
+        && !$(e.target).is($nextEl)
5421
+      ) {
5422
+        let isHidden;
5423
+        if ($nextEl) {
5424
+          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
5425
+        } else if ($prevEl) {
5426
+          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
5427
+        }
5428
+        if (isHidden === true) {
5429
+          swiper.emit('navigationShow', swiper);
5430
+        } else {
5431
+          swiper.emit('navigationHide', swiper);
5432
+        }
5433
+        if ($nextEl) {
5434
+          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
5435
+        }
5436
+        if ($prevEl) {
5437
+          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
5438
+        }
5439
+      }
5440
+    },
5441
+  },
5442
+};
5443
+
5444
+const Pagination = {
5445
+  update() {
5446
+    // Render || Update Pagination bullets/items
5447
+    const swiper = this;
5448
+    const rtl = swiper.rtl;
5449
+    const params = swiper.params.pagination;
5450
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
5451
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
5452
+    const $el = swiper.pagination.$el;
5453
+    // Current/Total
5454
+    let current;
5455
+    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
5456
+    if (swiper.params.loop) {
5457
+      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
5458
+      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
5459
+        current -= (slidesLength - (swiper.loopedSlides * 2));
5460
+      }
5461
+      if (current > total - 1) current -= total;
5462
+      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
5463
+    } else if (typeof swiper.snapIndex !== 'undefined') {
5464
+      current = swiper.snapIndex;
5465
+    } else {
5466
+      current = swiper.activeIndex || 0;
5467
+    }
5468
+    // Types
5469
+    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
5470
+      const bullets = swiper.pagination.bullets;
5471
+      let firstIndex;
5472
+      let lastIndex;
5473
+      let midIndex;
5474
+      if (params.dynamicBullets) {
5475
+        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
5476
+        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);
5477
+        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
5478
+          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
5479
+          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
5480
+            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
5481
+          } else if (swiper.pagination.dynamicBulletIndex < 0) {
5482
+            swiper.pagination.dynamicBulletIndex = 0;
5483
+          }
5484
+        }
5485
+        firstIndex = current - swiper.pagination.dynamicBulletIndex;
5486
+        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
5487
+        midIndex = (lastIndex + firstIndex) / 2;
5488
+      }
5489
+      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);
5490
+      if ($el.length > 1) {
5491
+        bullets.each((index, bullet) => {
5492
+          const $bullet = $(bullet);
5493
+          const bulletIndex = $bullet.index();
5494
+          if (bulletIndex === current) {
5495
+            $bullet.addClass(params.bulletActiveClass);
5496
+          }
5497
+          if (params.dynamicBullets) {
5498
+            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
5499
+              $bullet.addClass(`${params.bulletActiveClass}-main`);
5500
+            }
5501
+            if (bulletIndex === firstIndex) {
5502
+              $bullet
5503
+                .prev()
5504
+                .addClass(`${params.bulletActiveClass}-prev`)
5505
+                .prev()
5506
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
5507
+            }
5508
+            if (bulletIndex === lastIndex) {
5509
+              $bullet
5510
+                .next()
5511
+                .addClass(`${params.bulletActiveClass}-next`)
5512
+                .next()
5513
+                .addClass(`${params.bulletActiveClass}-next-next`);
5514
+            }
5515
+          }
5516
+        });
5517
+      } else {
5518
+        const $bullet = bullets.eq(current);
5519
+        const bulletIndex = $bullet.index();
5520
+        $bullet.addClass(params.bulletActiveClass);
5521
+        if (params.dynamicBullets) {
5522
+          const $firstDisplayedBullet = bullets.eq(firstIndex);
5523
+          const $lastDisplayedBullet = bullets.eq(lastIndex);
5524
+          for (let i = firstIndex; i <= lastIndex; i += 1) {
5525
+            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);
5526
+          }
5527
+          if (swiper.params.loop) {
5528
+            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
5529
+              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {
5530
+                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);
5531
+              }
5532
+              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);
5533
+            } else {
5534
+              $firstDisplayedBullet
5535
+                .prev()
5536
+                .addClass(`${params.bulletActiveClass}-prev`)
5537
+                .prev()
5538
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
5539
+              $lastDisplayedBullet
5540
+                .next()
5541
+                .addClass(`${params.bulletActiveClass}-next`)
5542
+                .next()
5543
+                .addClass(`${params.bulletActiveClass}-next-next`);
5544
+            }
5545
+          } else {
5546
+            $firstDisplayedBullet
5547
+              .prev()
5548
+              .addClass(`${params.bulletActiveClass}-prev`)
5549
+              .prev()
5550
+              .addClass(`${params.bulletActiveClass}-prev-prev`);
5551
+            $lastDisplayedBullet
5552
+              .next()
5553
+              .addClass(`${params.bulletActiveClass}-next`)
5554
+              .next()
5555
+              .addClass(`${params.bulletActiveClass}-next-next`);
5556
+          }
5557
+        }
5558
+      }
5559
+      if (params.dynamicBullets) {
5560
+        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
5561
+        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
5562
+        const offsetProp = rtl ? 'right' : 'left';
5563
+        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);
5564
+      }
5565
+    }
5566
+    if (params.type === 'fraction') {
5567
+      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));
5568
+      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));
5569
+    }
5570
+    if (params.type === 'progressbar') {
5571
+      let progressbarDirection;
5572
+      if (params.progressbarOpposite) {
5573
+        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
5574
+      } else {
5575
+        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
5576
+      }
5577
+      const scale = (current + 1) / total;
5578
+      let scaleX = 1;
5579
+      let scaleY = 1;
5580
+      if (progressbarDirection === 'horizontal') {
5581
+        scaleX = scale;
5582
+      } else {
5583
+        scaleY = scale;
5584
+      }
5585
+      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);
5586
+    }
5587
+    if (params.type === 'custom' && params.renderCustom) {
5588
+      $el.html(params.renderCustom(swiper, current + 1, total));
5589
+      swiper.emit('paginationRender', swiper, $el[0]);
5590
+    } else {
5591
+      swiper.emit('paginationUpdate', swiper, $el[0]);
5592
+    }
5593
+    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5594
+  },
5595
+  render() {
5596
+    // Render Container
5597
+    const swiper = this;
5598
+    const params = swiper.params.pagination;
5599
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
5600
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
5601
+
5602
+    const $el = swiper.pagination.$el;
5603
+    let paginationHTML = '';
5604
+    if (params.type === 'bullets') {
5605
+      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
5606
+      for (let i = 0; i < numberOfBullets; i += 1) {
5607
+        if (params.renderBullet) {
5608
+          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
5609
+        } else {
5610
+          paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`;
5611
+        }
5612
+      }
5613
+      $el.html(paginationHTML);
5614
+      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);
5615
+    }
5616
+    if (params.type === 'fraction') {
5617
+      if (params.renderFraction) {
5618
+        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
5619
+      } else {
5620
+        paginationHTML = `<span class="${params.currentClass}"></span>`
5621
+        + ' / '
5622
+        + `<span class="${params.totalClass}"></span>`;
5623
+      }
5624
+      $el.html(paginationHTML);
5625
+    }
5626
+    if (params.type === 'progressbar') {
5627
+      if (params.renderProgressbar) {
5628
+        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
5629
+      } else {
5630
+        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
5631
+      }
5632
+      $el.html(paginationHTML);
5633
+    }
5634
+    if (params.type !== 'custom') {
5635
+      swiper.emit('paginationRender', swiper.pagination.$el[0]);
5636
+    }
5637
+  },
5638
+  init() {
5639
+    const swiper = this;
5640
+    const params = swiper.params.pagination;
5641
+    if (!params.el) return;
5642
+
5643
+    let $el = $(params.el);
5644
+    if ($el.length === 0) return;
5645
+
5646
+    if (
5647
+      swiper.params.uniqueNavElements
5648
+      && typeof params.el === 'string'
5649
+      && $el.length > 1
5650
+      && swiper.$el.find(params.el).length === 1
5651
+    ) {
5652
+      $el = swiper.$el.find(params.el);
5653
+    }
5654
+
5655
+    if (params.type === 'bullets' && params.clickable) {
5656
+      $el.addClass(params.clickableClass);
5657
+    }
5658
+
5659
+    $el.addClass(params.modifierClass + params.type);
5660
+
5661
+    if (params.type === 'bullets' && params.dynamicBullets) {
5662
+      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);
5663
+      swiper.pagination.dynamicBulletIndex = 0;
5664
+      if (params.dynamicMainBullets < 1) {
5665
+        params.dynamicMainBullets = 1;
5666
+      }
5667
+    }
5668
+    if (params.type === 'progressbar' && params.progressbarOpposite) {
5669
+      $el.addClass(params.progressbarOppositeClass);
5670
+    }
5671
+
5672
+    if (params.clickable) {
5673
+      $el.on('click', `.${params.bulletClass}`, function onClick(e) {
5674
+        e.preventDefault();
5675
+        let index = $(this).index() * swiper.params.slidesPerGroup;
5676
+        if (swiper.params.loop) index += swiper.loopedSlides;
5677
+        swiper.slideTo(index);
5678
+      });
5679
+    }
5680
+
5681
+    Utils.extend(swiper.pagination, {
5682
+      $el,
5683
+      el: $el[0],
5684
+    });
5685
+  },
5686
+  destroy() {
5687
+    const swiper = this;
5688
+    const params = swiper.params.pagination;
5689
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
5690
+    const $el = swiper.pagination.$el;
5691
+
5692
+    $el.removeClass(params.hiddenClass);
5693
+    $el.removeClass(params.modifierClass + params.type);
5694
+    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
5695
+    if (params.clickable) {
5696
+      $el.off('click', `.${params.bulletClass}`);
5697
+    }
5698
+  },
5699
+};
5700
+
5701
+var Pagination$1 = {
5702
+  name: 'pagination',
5703
+  params: {
5704
+    pagination: {
5705
+      el: null,
5706
+      bulletElement: 'span',
5707
+      clickable: false,
5708
+      hideOnClick: false,
5709
+      renderBullet: null,
5710
+      renderProgressbar: null,
5711
+      renderFraction: null,
5712
+      renderCustom: null,
5713
+      progressbarOpposite: false,
5714
+      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
5715
+      dynamicBullets: false,
5716
+      dynamicMainBullets: 1,
5717
+      formatFractionCurrent: (number) => number,
5718
+      formatFractionTotal: (number) => number,
5719
+      bulletClass: 'swiper-pagination-bullet',
5720
+      bulletActiveClass: 'swiper-pagination-bullet-active',
5721
+      modifierClass: 'swiper-pagination-', // NEW
5722
+      currentClass: 'swiper-pagination-current',
5723
+      totalClass: 'swiper-pagination-total',
5724
+      hiddenClass: 'swiper-pagination-hidden',
5725
+      progressbarFillClass: 'swiper-pagination-progressbar-fill',
5726
+      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
5727
+      clickableClass: 'swiper-pagination-clickable', // NEW
5728
+      lockClass: 'swiper-pagination-lock',
5729
+    },
5730
+  },
5731
+  create() {
5732
+    const swiper = this;
5733
+    Utils.extend(swiper, {
5734
+      pagination: {
5735
+        init: Pagination.init.bind(swiper),
5736
+        render: Pagination.render.bind(swiper),
5737
+        update: Pagination.update.bind(swiper),
5738
+        destroy: Pagination.destroy.bind(swiper),
5739
+        dynamicBulletIndex: 0,
5740
+      },
5741
+    });
5742
+  },
5743
+  on: {
5744
+    init() {
5745
+      const swiper = this;
5746
+      swiper.pagination.init();
5747
+      swiper.pagination.render();
5748
+      swiper.pagination.update();
5749
+    },
5750
+    activeIndexChange() {
5751
+      const swiper = this;
5752
+      if (swiper.params.loop) {
5753
+        swiper.pagination.update();
5754
+      } else if (typeof swiper.snapIndex === 'undefined') {
5755
+        swiper.pagination.update();
5756
+      }
5757
+    },
5758
+    snapIndexChange() {
5759
+      const swiper = this;
5760
+      if (!swiper.params.loop) {
5761
+        swiper.pagination.update();
5762
+      }
5763
+    },
5764
+    slidesLengthChange() {
5765
+      const swiper = this;
5766
+      if (swiper.params.loop) {
5767
+        swiper.pagination.render();
5768
+        swiper.pagination.update();
5769
+      }
5770
+    },
5771
+    snapGridLengthChange() {
5772
+      const swiper = this;
5773
+      if (!swiper.params.loop) {
5774
+        swiper.pagination.render();
5775
+        swiper.pagination.update();
5776
+      }
5777
+    },
5778
+    destroy() {
5779
+      const swiper = this;
5780
+      swiper.pagination.destroy();
5781
+    },
5782
+    click(e) {
5783
+      const swiper = this;
5784
+      if (
5785
+        swiper.params.pagination.el
5786
+        && swiper.params.pagination.hideOnClick
5787
+        && swiper.pagination.$el.length > 0
5788
+        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
5789
+      ) {
5790
+        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
5791
+        if (isHidden === true) {
5792
+          swiper.emit('paginationShow', swiper);
5793
+        } else {
5794
+          swiper.emit('paginationHide', swiper);
5795
+        }
5796
+        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
5797
+      }
5798
+    },
5799
+  },
5800
+};
5801
+
5802
+const Scrollbar = {
5803
+  setTranslate() {
5804
+    const swiper = this;
5805
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5806
+    const { scrollbar, rtlTranslate: rtl, progress } = swiper;
5807
+    const {
5808
+      dragSize, trackSize, $dragEl, $el,
5809
+    } = scrollbar;
5810
+    const params = swiper.params.scrollbar;
5811
+
5812
+    let newSize = dragSize;
5813
+    let newPos = (trackSize - dragSize) * progress;
5814
+    if (rtl) {
5815
+      newPos = -newPos;
5816
+      if (newPos > 0) {
5817
+        newSize = dragSize - newPos;
5818
+        newPos = 0;
5819
+      } else if (-newPos + dragSize > trackSize) {
5820
+        newSize = trackSize + newPos;
5821
+      }
5822
+    } else if (newPos < 0) {
5823
+      newSize = dragSize + newPos;
5824
+      newPos = 0;
5825
+    } else if (newPos + dragSize > trackSize) {
5826
+      newSize = trackSize - newPos;
5827
+    }
5828
+    if (swiper.isHorizontal()) {
5829
+      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);
5830
+      $dragEl[0].style.width = `${newSize}px`;
5831
+    } else {
5832
+      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);
5833
+      $dragEl[0].style.height = `${newSize}px`;
5834
+    }
5835
+    if (params.hide) {
5836
+      clearTimeout(swiper.scrollbar.timeout);
5837
+      $el[0].style.opacity = 1;
5838
+      swiper.scrollbar.timeout = setTimeout(() => {
5839
+        $el[0].style.opacity = 0;
5840
+        $el.transition(400);
5841
+      }, 1000);
5842
+    }
5843
+  },
5844
+  setTransition(duration) {
5845
+    const swiper = this;
5846
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5847
+    swiper.scrollbar.$dragEl.transition(duration);
5848
+  },
5849
+  updateSize() {
5850
+    const swiper = this;
5851
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5852
+
5853
+    const { scrollbar } = swiper;
5854
+    const { $dragEl, $el } = scrollbar;
5855
+
5856
+    $dragEl[0].style.width = '';
5857
+    $dragEl[0].style.height = '';
5858
+    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
5859
+
5860
+    const divider = swiper.size / swiper.virtualSize;
5861
+    const moveDivider = divider * (trackSize / swiper.size);
5862
+    let dragSize;
5863
+    if (swiper.params.scrollbar.dragSize === 'auto') {
5864
+      dragSize = trackSize * divider;
5865
+    } else {
5866
+      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
5867
+    }
5868
+
5869
+    if (swiper.isHorizontal()) {
5870
+      $dragEl[0].style.width = `${dragSize}px`;
5871
+    } else {
5872
+      $dragEl[0].style.height = `${dragSize}px`;
5873
+    }
5874
+
5875
+    if (divider >= 1) {
5876
+      $el[0].style.display = 'none';
5877
+    } else {
5878
+      $el[0].style.display = '';
5879
+    }
5880
+    if (swiper.params.scrollbar.hide) {
5881
+      $el[0].style.opacity = 0;
5882
+    }
5883
+    Utils.extend(scrollbar, {
5884
+      trackSize,
5885
+      divider,
5886
+      moveDivider,
5887
+      dragSize,
5888
+    });
5889
+    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
5890
+  },
5891
+  getPointerPosition(e) {
5892
+    const swiper = this;
5893
+    if (swiper.isHorizontal()) {
5894
+      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
5895
+    }
5896
+    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
5897
+  },
5898
+  setDragPosition(e) {
5899
+    const swiper = this;
5900
+    const { scrollbar, rtlTranslate: rtl } = swiper;
5901
+    const {
5902
+      $el,
5903
+      dragSize,
5904
+      trackSize,
5905
+      dragStartPos,
5906
+    } = scrollbar;
5907
+
5908
+    let positionRatio;
5909
+    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
5910
+      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
5911
+    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
5912
+    if (rtl) {
5913
+      positionRatio = 1 - positionRatio;
5914
+    }
5915
+
5916
+    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
5917
+
5918
+    swiper.updateProgress(position);
5919
+    swiper.setTranslate(position);
5920
+    swiper.updateActiveIndex();
5921
+    swiper.updateSlidesClasses();
5922
+  },
5923
+  onDragStart(e) {
5924
+    const swiper = this;
5925
+    const params = swiper.params.scrollbar;
5926
+    const { scrollbar, $wrapperEl } = swiper;
5927
+    const { $el, $dragEl } = scrollbar;
5928
+    swiper.scrollbar.isTouched = true;
5929
+    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
5930
+      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
5931
+    e.preventDefault();
5932
+    e.stopPropagation();
5933
+
5934
+    $wrapperEl.transition(100);
5935
+    $dragEl.transition(100);
5936
+    scrollbar.setDragPosition(e);
5937
+
5938
+    clearTimeout(swiper.scrollbar.dragTimeout);
5939
+
5940
+    $el.transition(0);
5941
+    if (params.hide) {
5942
+      $el.css('opacity', 1);
5943
+    }
5944
+    if (swiper.params.cssMode) {
5945
+      swiper.$wrapperEl.css('scroll-snap-type', 'none');
5946
+    }
5947
+    swiper.emit('scrollbarDragStart', e);
5948
+  },
5949
+  onDragMove(e) {
5950
+    const swiper = this;
5951
+    const { scrollbar, $wrapperEl } = swiper;
5952
+    const { $el, $dragEl } = scrollbar;
5953
+
5954
+    if (!swiper.scrollbar.isTouched) return;
5955
+    if (e.preventDefault) e.preventDefault();
5956
+    else e.returnValue = false;
5957
+    scrollbar.setDragPosition(e);
5958
+    $wrapperEl.transition(0);
5959
+    $el.transition(0);
5960
+    $dragEl.transition(0);
5961
+    swiper.emit('scrollbarDragMove', e);
5962
+  },
5963
+  onDragEnd(e) {
5964
+    const swiper = this;
5965
+
5966
+    const params = swiper.params.scrollbar;
5967
+    const { scrollbar, $wrapperEl } = swiper;
5968
+    const { $el } = scrollbar;
5969
+
5970
+    if (!swiper.scrollbar.isTouched) return;
5971
+    swiper.scrollbar.isTouched = false;
5972
+    if (swiper.params.cssMode) {
5973
+      swiper.$wrapperEl.css('scroll-snap-type', '');
5974
+      $wrapperEl.transition('');
5975
+    }
5976
+    if (params.hide) {
5977
+      clearTimeout(swiper.scrollbar.dragTimeout);
5978
+      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {
5979
+        $el.css('opacity', 0);
5980
+        $el.transition(400);
5981
+      }, 1000);
5982
+    }
5983
+    swiper.emit('scrollbarDragEnd', e);
5984
+    if (params.snapOnRelease) {
5985
+      swiper.slideToClosest();
5986
+    }
5987
+  },
5988
+  enableDraggable() {
5989
+    const swiper = this;
5990
+    if (!swiper.params.scrollbar.el) return;
5991
+    const {
5992
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
5993
+    } = swiper;
5994
+    const $el = scrollbar.$el;
5995
+    const target = $el[0];
5996
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
5997
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
5998
+    if (!Support.touch) {
5999
+      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6000
+      doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6001
+      doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6002
+    } else {
6003
+      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6004
+      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6005
+      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6006
+    }
6007
+  },
6008
+  disableDraggable() {
6009
+    const swiper = this;
6010
+    if (!swiper.params.scrollbar.el) return;
6011
+    const {
6012
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
6013
+    } = swiper;
6014
+    const $el = scrollbar.$el;
6015
+    const target = $el[0];
6016
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
6017
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
6018
+    if (!Support.touch) {
6019
+      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6020
+      doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6021
+      doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6022
+    } else {
6023
+      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6024
+      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6025
+      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6026
+    }
6027
+  },
6028
+  init() {
6029
+    const swiper = this;
6030
+    if (!swiper.params.scrollbar.el) return;
6031
+    const { scrollbar, $el: $swiperEl } = swiper;
6032
+    const params = swiper.params.scrollbar;
6033
+
6034
+    let $el = $(params.el);
6035
+    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
6036
+      $el = $swiperEl.find(params.el);
6037
+    }
6038
+
6039
+    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);
6040
+    if ($dragEl.length === 0) {
6041
+      $dragEl = $(`<div class="${swiper.params.scrollbar.dragClass}"></div>`);
6042
+      $el.append($dragEl);
6043
+    }
6044
+
6045
+    Utils.extend(scrollbar, {
6046
+      $el,
6047
+      el: $el[0],
6048
+      $dragEl,
6049
+      dragEl: $dragEl[0],
6050
+    });
6051
+
6052
+    if (params.draggable) {
6053
+      scrollbar.enableDraggable();
6054
+    }
6055
+  },
6056
+  destroy() {
6057
+    const swiper = this;
6058
+    swiper.scrollbar.disableDraggable();
6059
+  },
6060
+};
6061
+
6062
+var Scrollbar$1 = {
6063
+  name: 'scrollbar',
6064
+  params: {
6065
+    scrollbar: {
6066
+      el: null,
6067
+      dragSize: 'auto',
6068
+      hide: false,
6069
+      draggable: false,
6070
+      snapOnRelease: true,
6071
+      lockClass: 'swiper-scrollbar-lock',
6072
+      dragClass: 'swiper-scrollbar-drag',
6073
+    },
6074
+  },
6075
+  create() {
6076
+    const swiper = this;
6077
+    Utils.extend(swiper, {
6078
+      scrollbar: {
6079
+        init: Scrollbar.init.bind(swiper),
6080
+        destroy: Scrollbar.destroy.bind(swiper),
6081
+        updateSize: Scrollbar.updateSize.bind(swiper),
6082
+        setTranslate: Scrollbar.setTranslate.bind(swiper),
6083
+        setTransition: Scrollbar.setTransition.bind(swiper),
6084
+        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
6085
+        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
6086
+        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
6087
+        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
6088
+        onDragStart: Scrollbar.onDragStart.bind(swiper),
6089
+        onDragMove: Scrollbar.onDragMove.bind(swiper),
6090
+        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
6091
+        isTouched: false,
6092
+        timeout: null,
6093
+        dragTimeout: null,
6094
+      },
6095
+    });
6096
+  },
6097
+  on: {
6098
+    init() {
6099
+      const swiper = this;
6100
+      swiper.scrollbar.init();
6101
+      swiper.scrollbar.updateSize();
6102
+      swiper.scrollbar.setTranslate();
6103
+    },
6104
+    update() {
6105
+      const swiper = this;
6106
+      swiper.scrollbar.updateSize();
6107
+    },
6108
+    resize() {
6109
+      const swiper = this;
6110
+      swiper.scrollbar.updateSize();
6111
+    },
6112
+    observerUpdate() {
6113
+      const swiper = this;
6114
+      swiper.scrollbar.updateSize();
6115
+    },
6116
+    setTranslate() {
6117
+      const swiper = this;
6118
+      swiper.scrollbar.setTranslate();
6119
+    },
6120
+    setTransition(duration) {
6121
+      const swiper = this;
6122
+      swiper.scrollbar.setTransition(duration);
6123
+    },
6124
+    destroy() {
6125
+      const swiper = this;
6126
+      swiper.scrollbar.destroy();
6127
+    },
6128
+  },
6129
+};
6130
+
6131
+const Parallax = {
6132
+  setTransform(el, progress) {
6133
+    const swiper = this;
6134
+    const { rtl } = swiper;
6135
+
6136
+    const $el = $(el);
6137
+    const rtlFactor = rtl ? -1 : 1;
6138
+
6139
+    const p = $el.attr('data-swiper-parallax') || '0';
6140
+    let x = $el.attr('data-swiper-parallax-x');
6141
+    let y = $el.attr('data-swiper-parallax-y');
6142
+    const scale = $el.attr('data-swiper-parallax-scale');
6143
+    const opacity = $el.attr('data-swiper-parallax-opacity');
6144
+
6145
+    if (x || y) {
6146
+      x = x || '0';
6147
+      y = y || '0';
6148
+    } else if (swiper.isHorizontal()) {
6149
+      x = p;
6150
+      y = '0';
6151
+    } else {
6152
+      y = p;
6153
+      x = '0';
6154
+    }
6155
+
6156
+    if ((x).indexOf('%') >= 0) {
6157
+      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
6158
+    } else {
6159
+      x = `${x * progress * rtlFactor}px`;
6160
+    }
6161
+    if ((y).indexOf('%') >= 0) {
6162
+      y = `${parseInt(y, 10) * progress}%`;
6163
+    } else {
6164
+      y = `${y * progress}px`;
6165
+    }
6166
+
6167
+    if (typeof opacity !== 'undefined' && opacity !== null) {
6168
+      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
6169
+      $el[0].style.opacity = currentOpacity;
6170
+    }
6171
+    if (typeof scale === 'undefined' || scale === null) {
6172
+      $el.transform(`translate3d(${x}, ${y}, 0px)`);
6173
+    } else {
6174
+      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
6175
+      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);
6176
+    }
6177
+  },
6178
+  setTranslate() {
6179
+    const swiper = this;
6180
+    const {
6181
+      $el, slides, progress, snapGrid,
6182
+    } = swiper;
6183
+    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6184
+      .each((index, el) => {
6185
+        swiper.parallax.setTransform(el, progress);
6186
+      });
6187
+    slides.each((slideIndex, slideEl) => {
6188
+      let slideProgress = slideEl.progress;
6189
+      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
6190
+        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
6191
+      }
6192
+      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
6193
+      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6194
+        .each((index, el) => {
6195
+          swiper.parallax.setTransform(el, slideProgress);
6196
+        });
6197
+    });
6198
+  },
6199
+  setTransition(duration = this.params.speed) {
6200
+    const swiper = this;
6201
+    const { $el } = swiper;
6202
+    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6203
+      .each((index, parallaxEl) => {
6204
+        const $parallaxEl = $(parallaxEl);
6205
+        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
6206
+        if (duration === 0) parallaxDuration = 0;
6207
+        $parallaxEl.transition(parallaxDuration);
6208
+      });
6209
+  },
6210
+};
6211
+
6212
+var Parallax$1 = {
6213
+  name: 'parallax',
6214
+  params: {
6215
+    parallax: {
6216
+      enabled: false,
6217
+    },
6218
+  },
6219
+  create() {
6220
+    const swiper = this;
6221
+    Utils.extend(swiper, {
6222
+      parallax: {
6223
+        setTransform: Parallax.setTransform.bind(swiper),
6224
+        setTranslate: Parallax.setTranslate.bind(swiper),
6225
+        setTransition: Parallax.setTransition.bind(swiper),
6226
+      },
6227
+    });
6228
+  },
6229
+  on: {
6230
+    beforeInit() {
6231
+      const swiper = this;
6232
+      if (!swiper.params.parallax.enabled) return;
6233
+      swiper.params.watchSlidesProgress = true;
6234
+      swiper.originalParams.watchSlidesProgress = true;
6235
+    },
6236
+    init() {
6237
+      const swiper = this;
6238
+      if (!swiper.params.parallax.enabled) return;
6239
+      swiper.parallax.setTranslate();
6240
+    },
6241
+    setTranslate() {
6242
+      const swiper = this;
6243
+      if (!swiper.params.parallax.enabled) return;
6244
+      swiper.parallax.setTranslate();
6245
+    },
6246
+    setTransition(duration) {
6247
+      const swiper = this;
6248
+      if (!swiper.params.parallax.enabled) return;
6249
+      swiper.parallax.setTransition(duration);
6250
+    },
6251
+  },
6252
+};
6253
+
6254
+const Zoom = {
6255
+  // Calc Scale From Multi-touches
6256
+  getDistanceBetweenTouches(e) {
6257
+    if (e.targetTouches.length < 2) return 1;
6258
+    const x1 = e.targetTouches[0].pageX;
6259
+    const y1 = e.targetTouches[0].pageY;
6260
+    const x2 = e.targetTouches[1].pageX;
6261
+    const y2 = e.targetTouches[1].pageY;
6262
+    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));
6263
+    return distance;
6264
+  },
6265
+  // Events
6266
+  onGestureStart(e) {
6267
+    const swiper = this;
6268
+    const params = swiper.params.zoom;
6269
+    const zoom = swiper.zoom;
6270
+    const { gesture } = zoom;
6271
+    zoom.fakeGestureTouched = false;
6272
+    zoom.fakeGestureMoved = false;
6273
+    if (!Support.gestures) {
6274
+      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
6275
+        return;
6276
+      }
6277
+      zoom.fakeGestureTouched = true;
6278
+      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
6279
+    }
6280
+    if (!gesture.$slideEl || !gesture.$slideEl.length) {
6281
+      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);
6282
+      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
6283
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6284
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
6285
+      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6286
+      if (gesture.$imageWrapEl.length === 0) {
6287
+        gesture.$imageEl = undefined;
6288
+        return;
6289
+      }
6290
+    }
6291
+    if (gesture.$imageEl) {
6292
+      gesture.$imageEl.transition(0);
6293
+    }
6294
+    swiper.zoom.isScaling = true;
6295
+  },
6296
+  onGestureChange(e) {
6297
+    const swiper = this;
6298
+    const params = swiper.params.zoom;
6299
+    const zoom = swiper.zoom;
6300
+    const { gesture } = zoom;
6301
+    if (!Support.gestures) {
6302
+      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
6303
+        return;
6304
+      }
6305
+      zoom.fakeGestureMoved = true;
6306
+      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
6307
+    }
6308
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6309
+    if (Support.gestures) {
6310
+      zoom.scale = e.scale * zoom.currentScale;
6311
+    } else {
6312
+      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
6313
+    }
6314
+    if (zoom.scale > gesture.maxRatio) {
6315
+      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);
6316
+    }
6317
+    if (zoom.scale < params.minRatio) {
6318
+      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);
6319
+    }
6320
+    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);
6321
+  },
6322
+  onGestureEnd(e) {
6323
+    const swiper = this;
6324
+    const params = swiper.params.zoom;
6325
+    const zoom = swiper.zoom;
6326
+    const { gesture } = zoom;
6327
+    if (!Support.gestures) {
6328
+      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
6329
+        return;
6330
+      }
6331
+      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
6332
+        return;
6333
+      }
6334
+      zoom.fakeGestureTouched = false;
6335
+      zoom.fakeGestureMoved = false;
6336
+    }
6337
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6338
+    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
6339
+    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
6340
+    zoom.currentScale = zoom.scale;
6341
+    zoom.isScaling = false;
6342
+    if (zoom.scale === 1) gesture.$slideEl = undefined;
6343
+  },
6344
+  onTouchStart(e) {
6345
+    const swiper = this;
6346
+    const zoom = swiper.zoom;
6347
+    const { gesture, image } = zoom;
6348
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6349
+    if (image.isTouched) return;
6350
+    if (Device.android && e.cancelable) e.preventDefault();
6351
+    image.isTouched = true;
6352
+    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
6353
+    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
6354
+  },
6355
+  onTouchMove(e) {
6356
+    const swiper = this;
6357
+    const zoom = swiper.zoom;
6358
+    const { gesture, image, velocity } = zoom;
6359
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6360
+    swiper.allowClick = false;
6361
+    if (!image.isTouched || !gesture.$slideEl) return;
6362
+
6363
+    if (!image.isMoved) {
6364
+      image.width = gesture.$imageEl[0].offsetWidth;
6365
+      image.height = gesture.$imageEl[0].offsetHeight;
6366
+      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
6367
+      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
6368
+      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
6369
+      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
6370
+      gesture.$imageWrapEl.transition(0);
6371
+      if (swiper.rtl) {
6372
+        image.startX = -image.startX;
6373
+        image.startY = -image.startY;
6374
+      }
6375
+    }
6376
+    // Define if we need image drag
6377
+    const scaledWidth = image.width * zoom.scale;
6378
+    const scaledHeight = image.height * zoom.scale;
6379
+
6380
+    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
6381
+
6382
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
6383
+    image.maxX = -image.minX;
6384
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
6385
+    image.maxY = -image.minY;
6386
+
6387
+    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
6388
+    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
6389
+
6390
+    if (!image.isMoved && !zoom.isScaling) {
6391
+      if (
6392
+        swiper.isHorizontal()
6393
+        && (
6394
+          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
6395
+          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
6396
+        )
6397
+      ) {
6398
+        image.isTouched = false;
6399
+        return;
6400
+      } if (
6401
+        !swiper.isHorizontal()
6402
+        && (
6403
+          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
6404
+          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
6405
+        )
6406
+      ) {
6407
+        image.isTouched = false;
6408
+        return;
6409
+      }
6410
+    }
6411
+    if (e.cancelable) {
6412
+      e.preventDefault();
6413
+    }
6414
+    e.stopPropagation();
6415
+
6416
+    image.isMoved = true;
6417
+    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
6418
+    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
6419
+
6420
+    if (image.currentX < image.minX) {
6421
+      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);
6422
+    }
6423
+    if (image.currentX > image.maxX) {
6424
+      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);
6425
+    }
6426
+
6427
+    if (image.currentY < image.minY) {
6428
+      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);
6429
+    }
6430
+    if (image.currentY > image.maxY) {
6431
+      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);
6432
+    }
6433
+
6434
+    // Velocity
6435
+    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
6436
+    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
6437
+    if (!velocity.prevTime) velocity.prevTime = Date.now();
6438
+    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
6439
+    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
6440
+    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
6441
+    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
6442
+    velocity.prevPositionX = image.touchesCurrent.x;
6443
+    velocity.prevPositionY = image.touchesCurrent.y;
6444
+    velocity.prevTime = Date.now();
6445
+
6446
+    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
6447
+  },
6448
+  onTouchEnd() {
6449
+    const swiper = this;
6450
+    const zoom = swiper.zoom;
6451
+    const { gesture, image, velocity } = zoom;
6452
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6453
+    if (!image.isTouched || !image.isMoved) {
6454
+      image.isTouched = false;
6455
+      image.isMoved = false;
6456
+      return;
6457
+    }
6458
+    image.isTouched = false;
6459
+    image.isMoved = false;
6460
+    let momentumDurationX = 300;
6461
+    let momentumDurationY = 300;
6462
+    const momentumDistanceX = velocity.x * momentumDurationX;
6463
+    const newPositionX = image.currentX + momentumDistanceX;
6464
+    const momentumDistanceY = velocity.y * momentumDurationY;
6465
+    const newPositionY = image.currentY + momentumDistanceY;
6466
+
6467
+    // Fix duration
6468
+    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
6469
+    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
6470
+    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
6471
+
6472
+    image.currentX = newPositionX;
6473
+    image.currentY = newPositionY;
6474
+
6475
+    // Define if we need image drag
6476
+    const scaledWidth = image.width * zoom.scale;
6477
+    const scaledHeight = image.height * zoom.scale;
6478
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
6479
+    image.maxX = -image.minX;
6480
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
6481
+    image.maxY = -image.minY;
6482
+    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
6483
+    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
6484
+
6485
+    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
6486
+  },
6487
+  onTransitionEnd() {
6488
+    const swiper = this;
6489
+    const zoom = swiper.zoom;
6490
+    const { gesture } = zoom;
6491
+    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
6492
+      if (gesture.$imageEl) {
6493
+        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
6494
+      }
6495
+      if (gesture.$imageWrapEl) {
6496
+        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
6497
+      }
6498
+
6499
+      zoom.scale = 1;
6500
+      zoom.currentScale = 1;
6501
+
6502
+      gesture.$slideEl = undefined;
6503
+      gesture.$imageEl = undefined;
6504
+      gesture.$imageWrapEl = undefined;
6505
+    }
6506
+  },
6507
+  // Toggle Zoom
6508
+  toggle(e) {
6509
+    const swiper = this;
6510
+    const zoom = swiper.zoom;
6511
+
6512
+    if (zoom.scale && zoom.scale !== 1) {
6513
+      // Zoom Out
6514
+      zoom.out();
6515
+    } else {
6516
+      // Zoom In
6517
+      zoom.in(e);
6518
+    }
6519
+  },
6520
+  in(e) {
6521
+    const swiper = this;
6522
+
6523
+    const zoom = swiper.zoom;
6524
+    const params = swiper.params.zoom;
6525
+    const { gesture, image } = zoom;
6526
+
6527
+    if (!gesture.$slideEl) {
6528
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
6529
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
6530
+      } else {
6531
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
6532
+      }
6533
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6534
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
6535
+    }
6536
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6537
+
6538
+    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);
6539
+
6540
+    let touchX;
6541
+    let touchY;
6542
+    let offsetX;
6543
+    let offsetY;
6544
+    let diffX;
6545
+    let diffY;
6546
+    let translateX;
6547
+    let translateY;
6548
+    let imageWidth;
6549
+    let imageHeight;
6550
+    let scaledWidth;
6551
+    let scaledHeight;
6552
+    let translateMinX;
6553
+    let translateMinY;
6554
+    let translateMaxX;
6555
+    let translateMaxY;
6556
+    let slideWidth;
6557
+    let slideHeight;
6558
+
6559
+    if (typeof image.touchesStart.x === 'undefined' && e) {
6560
+      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
6561
+      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
6562
+    } else {
6563
+      touchX = image.touchesStart.x;
6564
+      touchY = image.touchesStart.y;
6565
+    }
6566
+
6567
+    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6568
+    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6569
+    if (e) {
6570
+      slideWidth = gesture.$slideEl[0].offsetWidth;
6571
+      slideHeight = gesture.$slideEl[0].offsetHeight;
6572
+      offsetX = gesture.$slideEl.offset().left;
6573
+      offsetY = gesture.$slideEl.offset().top;
6574
+      diffX = (offsetX + (slideWidth / 2)) - touchX;
6575
+      diffY = (offsetY + (slideHeight / 2)) - touchY;
6576
+
6577
+      imageWidth = gesture.$imageEl[0].offsetWidth;
6578
+      imageHeight = gesture.$imageEl[0].offsetHeight;
6579
+      scaledWidth = imageWidth * zoom.scale;
6580
+      scaledHeight = imageHeight * zoom.scale;
6581
+
6582
+      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
6583
+      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
6584
+      translateMaxX = -translateMinX;
6585
+      translateMaxY = -translateMinY;
6586
+
6587
+      translateX = diffX * zoom.scale;
6588
+      translateY = diffY * zoom.scale;
6589
+
6590
+      if (translateX < translateMinX) {
6591
+        translateX = translateMinX;
6592
+      }
6593
+      if (translateX > translateMaxX) {
6594
+        translateX = translateMaxX;
6595
+      }
6596
+
6597
+      if (translateY < translateMinY) {
6598
+        translateY = translateMinY;
6599
+      }
6600
+      if (translateY > translateMaxY) {
6601
+        translateY = translateMaxY;
6602
+      }
6603
+    } else {
6604
+      translateX = 0;
6605
+      translateY = 0;
6606
+    }
6607
+    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);
6608
+    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
6609
+  },
6610
+  out() {
6611
+    const swiper = this;
6612
+
6613
+    const zoom = swiper.zoom;
6614
+    const params = swiper.params.zoom;
6615
+    const { gesture } = zoom;
6616
+
6617
+    if (!gesture.$slideEl) {
6618
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
6619
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
6620
+      } else {
6621
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
6622
+      }
6623
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6624
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
6625
+    }
6626
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
6627
+
6628
+    zoom.scale = 1;
6629
+    zoom.currentScale = 1;
6630
+    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
6631
+    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
6632
+    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);
6633
+    gesture.$slideEl = undefined;
6634
+  },
6635
+  // Attach/Detach Events
6636
+  enable() {
6637
+    const swiper = this;
6638
+    const zoom = swiper.zoom;
6639
+    if (zoom.enabled) return;
6640
+    zoom.enabled = true;
6641
+
6642
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
6643
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
6644
+
6645
+    const slideSelector = `.${swiper.params.slideClass}`;
6646
+
6647
+    // Scale image
6648
+    if (Support.gestures) {
6649
+      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
6650
+      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
6651
+      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
6652
+    } else if (swiper.touchEvents.start === 'touchstart') {
6653
+      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
6654
+      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
6655
+      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
6656
+      if (swiper.touchEvents.cancel) {
6657
+        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
6658
+      }
6659
+    }
6660
+
6661
+    // Move image
6662
+    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
6663
+  },
6664
+  disable() {
6665
+    const swiper = this;
6666
+    const zoom = swiper.zoom;
6667
+    if (!zoom.enabled) return;
6668
+
6669
+    swiper.zoom.enabled = false;
6670
+
6671
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
6672
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
6673
+
6674
+    const slideSelector = `.${swiper.params.slideClass}`;
6675
+
6676
+    // Scale image
6677
+    if (Support.gestures) {
6678
+      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
6679
+      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
6680
+      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
6681
+    } else if (swiper.touchEvents.start === 'touchstart') {
6682
+      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
6683
+      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
6684
+      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
6685
+      if (swiper.touchEvents.cancel) {
6686
+        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
6687
+      }
6688
+    }
6689
+
6690
+    // Move image
6691
+    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
6692
+  },
6693
+};
6694
+
6695
+var Zoom$1 = {
6696
+  name: 'zoom',
6697
+  params: {
6698
+    zoom: {
6699
+      enabled: false,
6700
+      maxRatio: 3,
6701
+      minRatio: 1,
6702
+      toggle: true,
6703
+      containerClass: 'swiper-zoom-container',
6704
+      zoomedSlideClass: 'swiper-slide-zoomed',
6705
+    },
6706
+  },
6707
+  create() {
6708
+    const swiper = this;
6709
+    const zoom = {
6710
+      enabled: false,
6711
+      scale: 1,
6712
+      currentScale: 1,
6713
+      isScaling: false,
6714
+      gesture: {
6715
+        $slideEl: undefined,
6716
+        slideWidth: undefined,
6717
+        slideHeight: undefined,
6718
+        $imageEl: undefined,
6719
+        $imageWrapEl: undefined,
6720
+        maxRatio: 3,
6721
+      },
6722
+      image: {
6723
+        isTouched: undefined,
6724
+        isMoved: undefined,
6725
+        currentX: undefined,
6726
+        currentY: undefined,
6727
+        minX: undefined,
6728
+        minY: undefined,
6729
+        maxX: undefined,
6730
+        maxY: undefined,
6731
+        width: undefined,
6732
+        height: undefined,
6733
+        startX: undefined,
6734
+        startY: undefined,
6735
+        touchesStart: {},
6736
+        touchesCurrent: {},
6737
+      },
6738
+      velocity: {
6739
+        x: undefined,
6740
+        y: undefined,
6741
+        prevPositionX: undefined,
6742
+        prevPositionY: undefined,
6743
+        prevTime: undefined,
6744
+      },
6745
+    };
6746
+
6747
+    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {
6748
+      zoom[methodName] = Zoom[methodName].bind(swiper);
6749
+    });
6750
+    Utils.extend(swiper, {
6751
+      zoom,
6752
+    });
6753
+
6754
+    let scale = 1;
6755
+    Object.defineProperty(swiper.zoom, 'scale', {
6756
+      get() {
6757
+        return scale;
6758
+      },
6759
+      set(value) {
6760
+        if (scale !== value) {
6761
+          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
6762
+          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
6763
+          swiper.emit('zoomChange', value, imageEl, slideEl);
6764
+        }
6765
+        scale = value;
6766
+      },
6767
+    });
6768
+  },
6769
+  on: {
6770
+    init() {
6771
+      const swiper = this;
6772
+      if (swiper.params.zoom.enabled) {
6773
+        swiper.zoom.enable();
6774
+      }
6775
+    },
6776
+    destroy() {
6777
+      const swiper = this;
6778
+      swiper.zoom.disable();
6779
+    },
6780
+    touchStart(e) {
6781
+      const swiper = this;
6782
+      if (!swiper.zoom.enabled) return;
6783
+      swiper.zoom.onTouchStart(e);
6784
+    },
6785
+    touchEnd(e) {
6786
+      const swiper = this;
6787
+      if (!swiper.zoom.enabled) return;
6788
+      swiper.zoom.onTouchEnd(e);
6789
+    },
6790
+    doubleTap(e) {
6791
+      const swiper = this;
6792
+      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
6793
+        swiper.zoom.toggle(e);
6794
+      }
6795
+    },
6796
+    transitionEnd() {
6797
+      const swiper = this;
6798
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
6799
+        swiper.zoom.onTransitionEnd();
6800
+      }
6801
+    },
6802
+    slideChange() {
6803
+      const swiper = this;
6804
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
6805
+        swiper.zoom.onTransitionEnd();
6806
+      }
6807
+    },
6808
+  },
6809
+};
6810
+
6811
+const Lazy = {
6812
+  loadInSlide(index, loadInDuplicate = true) {
6813
+    const swiper = this;
6814
+    const params = swiper.params.lazy;
6815
+    if (typeof index === 'undefined') return;
6816
+    if (swiper.slides.length === 0) return;
6817
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
6818
+
6819
+    const $slideEl = isVirtual
6820
+      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`)
6821
+      : swiper.slides.eq(index);
6822
+
6823
+    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);
6824
+    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
6825
+      $images = $images.add($slideEl[0]);
6826
+    }
6827
+    if ($images.length === 0) return;
6828
+
6829
+    $images.each((imageIndex, imageEl) => {
6830
+      const $imageEl = $(imageEl);
6831
+      $imageEl.addClass(params.loadingClass);
6832
+
6833
+      const background = $imageEl.attr('data-background');
6834
+      const src = $imageEl.attr('data-src');
6835
+      const srcset = $imageEl.attr('data-srcset');
6836
+      const sizes = $imageEl.attr('data-sizes');
6837
+      const $pictureEl = $imageEl.parent('picture');
6838
+
6839
+      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {
6840
+        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;
6841
+        if (background) {
6842
+          $imageEl.css('background-image', `url("${background}")`);
6843
+          $imageEl.removeAttr('data-background');
6844
+        } else {
6845
+          if (srcset) {
6846
+            $imageEl.attr('srcset', srcset);
6847
+            $imageEl.removeAttr('data-srcset');
6848
+          }
6849
+          if (sizes) {
6850
+            $imageEl.attr('sizes', sizes);
6851
+            $imageEl.removeAttr('data-sizes');
6852
+          }
6853
+          if ($pictureEl.length) {
6854
+            $pictureEl.children('source').each((sourceIndex, sourceEl) => {
6855
+              const $source = $(sourceEl);
6856
+
6857
+              if ($source.attr('data-srcset')) {
6858
+                $source.attr('srcset', $source.attr('data-srcset'));
6859
+                $source.removeAttr('data-srcset');
6860
+              }
6861
+            });
6862
+          }
6863
+          if (src) {
6864
+            $imageEl.attr('src', src);
6865
+            $imageEl.removeAttr('data-src');
6866
+          }
6867
+        }
6868
+
6869
+        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
6870
+        $slideEl.find(`.${params.preloaderClass}`).remove();
6871
+        if (swiper.params.loop && loadInDuplicate) {
6872
+          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
6873
+          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
6874
+            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`);
6875
+            swiper.lazy.loadInSlide(originalSlide.index(), false);
6876
+          } else {
6877
+            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`);
6878
+            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
6879
+          }
6880
+        }
6881
+        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
6882
+        if (swiper.params.autoHeight) {
6883
+          swiper.updateAutoHeight();
6884
+        }
6885
+      });
6886
+
6887
+      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
6888
+    });
6889
+  },
6890
+  load() {
6891
+    const swiper = this;
6892
+    const {
6893
+      $wrapperEl, params: swiperParams, slides, activeIndex,
6894
+    } = swiper;
6895
+    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;
6896
+    const params = swiperParams.lazy;
6897
+
6898
+    let slidesPerView = swiperParams.slidesPerView;
6899
+    if (slidesPerView === 'auto') {
6900
+      slidesPerView = 0;
6901
+    }
6902
+
6903
+    function slideExist(index) {
6904
+      if (isVirtual) {
6905
+        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) {
6906
+          return true;
6907
+        }
6908
+      } else if (slides[index]) return true;
6909
+      return false;
6910
+    }
6911
+
6912
+    function slideIndex(slideEl) {
6913
+      if (isVirtual) {
6914
+        return $(slideEl).attr('data-swiper-slide-index');
6915
+      }
6916
+      return $(slideEl).index();
6917
+    }
6918
+
6919
+    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
6920
+    if (swiper.params.watchSlidesVisibility) {
6921
+      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {
6922
+        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
6923
+        swiper.lazy.loadInSlide(index);
6924
+      });
6925
+    } else if (slidesPerView > 1) {
6926
+      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
6927
+        if (slideExist(i)) swiper.lazy.loadInSlide(i);
6928
+      }
6929
+    } else {
6930
+      swiper.lazy.loadInSlide(activeIndex);
6931
+    }
6932
+    if (params.loadPrevNext) {
6933
+      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
6934
+        const amount = params.loadPrevNextAmount;
6935
+        const spv = slidesPerView;
6936
+        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
6937
+        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
6938
+        // Next Slides
6939
+        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {
6940
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6941
+        }
6942
+        // Prev Slides
6943
+        for (let i = minIndex; i < activeIndex; i += 1) {
6944
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6945
+        }
6946
+      } else {
6947
+        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);
6948
+        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
6949
+
6950
+        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);
6951
+        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
6952
+      }
6953
+    }
6954
+  },
6955
+};
6956
+
6957
+var Lazy$1 = {
6958
+  name: 'lazy',
6959
+  params: {
6960
+    lazy: {
6961
+      enabled: false,
6962
+      loadPrevNext: false,
6963
+      loadPrevNextAmount: 1,
6964
+      loadOnTransitionStart: false,
6965
+
6966
+      elementClass: 'swiper-lazy',
6967
+      loadingClass: 'swiper-lazy-loading',
6968
+      loadedClass: 'swiper-lazy-loaded',
6969
+      preloaderClass: 'swiper-lazy-preloader',
6970
+    },
6971
+  },
6972
+  create() {
6973
+    const swiper = this;
6974
+    Utils.extend(swiper, {
6975
+      lazy: {
6976
+        initialImageLoaded: false,
6977
+        load: Lazy.load.bind(swiper),
6978
+        loadInSlide: Lazy.loadInSlide.bind(swiper),
6979
+      },
6980
+    });
6981
+  },
6982
+  on: {
6983
+    beforeInit() {
6984
+      const swiper = this;
6985
+      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
6986
+        swiper.params.preloadImages = false;
6987
+      }
6988
+    },
6989
+    init() {
6990
+      const swiper = this;
6991
+      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
6992
+        swiper.lazy.load();
6993
+      }
6994
+    },
6995
+    scroll() {
6996
+      const swiper = this;
6997
+      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
6998
+        swiper.lazy.load();
6999
+      }
7000
+    },
7001
+    resize() {
7002
+      const swiper = this;
7003
+      if (swiper.params.lazy.enabled) {
7004
+        swiper.lazy.load();
7005
+      }
7006
+    },
7007
+    scrollbarDragMove() {
7008
+      const swiper = this;
7009
+      if (swiper.params.lazy.enabled) {
7010
+        swiper.lazy.load();
7011
+      }
7012
+    },
7013
+    transitionStart() {
7014
+      const swiper = this;
7015
+      if (swiper.params.lazy.enabled) {
7016
+        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
7017
+          swiper.lazy.load();
7018
+        }
7019
+      }
7020
+    },
7021
+    transitionEnd() {
7022
+      const swiper = this;
7023
+      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
7024
+        swiper.lazy.load();
7025
+      }
7026
+    },
7027
+    slideChange() {
7028
+      const swiper = this;
7029
+      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
7030
+        swiper.lazy.load();
7031
+      }
7032
+    },
7033
+  },
7034
+};
7035
+
7036
+/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
7037
+
7038
+const Controller = {
7039
+  LinearSpline: function LinearSpline(x, y) {
7040
+    const binarySearch = (function search() {
7041
+      let maxIndex;
7042
+      let minIndex;
7043
+      let guess;
7044
+      return (array, val) => {
7045
+        minIndex = -1;
7046
+        maxIndex = array.length;
7047
+        while (maxIndex - minIndex > 1) {
7048
+          guess = maxIndex + minIndex >> 1;
7049
+          if (array[guess] <= val) {
7050
+            minIndex = guess;
7051
+          } else {
7052
+            maxIndex = guess;
7053
+          }
7054
+        }
7055
+        return maxIndex;
7056
+      };
7057
+    }());
7058
+    this.x = x;
7059
+    this.y = y;
7060
+    this.lastIndex = x.length - 1;
7061
+    // Given an x value (x2), return the expected y2 value:
7062
+    // (x1,y1) is the known point before given value,
7063
+    // (x3,y3) is the known point after given value.
7064
+    let i1;
7065
+    let i3;
7066
+
7067
+    this.interpolate = function interpolate(x2) {
7068
+      if (!x2) return 0;
7069
+
7070
+      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
7071
+      i3 = binarySearch(this.x, x2);
7072
+      i1 = i3 - 1;
7073
+
7074
+      // We have our indexes i1 & i3, so we can calculate already:
7075
+      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
7076
+      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
7077
+    };
7078
+    return this;
7079
+  },
7080
+  // xxx: for now i will just save one spline function to to
7081
+  getInterpolateFunction(c) {
7082
+    const swiper = this;
7083
+    if (!swiper.controller.spline) {
7084
+      swiper.controller.spline = swiper.params.loop
7085
+        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
7086
+        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
7087
+    }
7088
+  },
7089
+  setTranslate(setTranslate, byController) {
7090
+    const swiper = this;
7091
+    const controlled = swiper.controller.control;
7092
+    let multiplier;
7093
+    let controlledTranslate;
7094
+    function setControlledTranslate(c) {
7095
+      // this will create an Interpolate function based on the snapGrids
7096
+      // x is the Grid of the scrolled scroller and y will be the controlled scroller
7097
+      // it makes sense to create this only once and recall it for the interpolation
7098
+      // the function does a lot of value caching for performance
7099
+      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
7100
+      if (swiper.params.controller.by === 'slide') {
7101
+        swiper.controller.getInterpolateFunction(c);
7102
+        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
7103
+        // but it did not work out
7104
+        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
7105
+      }
7106
+
7107
+      if (!controlledTranslate || swiper.params.controller.by === 'container') {
7108
+        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
7109
+        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
7110
+      }
7111
+
7112
+      if (swiper.params.controller.inverse) {
7113
+        controlledTranslate = c.maxTranslate() - controlledTranslate;
7114
+      }
7115
+      c.updateProgress(controlledTranslate);
7116
+      c.setTranslate(controlledTranslate, swiper);
7117
+      c.updateActiveIndex();
7118
+      c.updateSlidesClasses();
7119
+    }
7120
+    if (Array.isArray(controlled)) {
7121
+      for (let i = 0; i < controlled.length; i += 1) {
7122
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
7123
+          setControlledTranslate(controlled[i]);
7124
+        }
7125
+      }
7126
+    } else if (controlled instanceof Swiper && byController !== controlled) {
7127
+      setControlledTranslate(controlled);
7128
+    }
7129
+  },
7130
+  setTransition(duration, byController) {
7131
+    const swiper = this;
7132
+    const controlled = swiper.controller.control;
7133
+    let i;
7134
+    function setControlledTransition(c) {
7135
+      c.setTransition(duration, swiper);
7136
+      if (duration !== 0) {
7137
+        c.transitionStart();
7138
+        if (c.params.autoHeight) {
7139
+          Utils.nextTick(() => {
7140
+            c.updateAutoHeight();
7141
+          });
7142
+        }
7143
+        c.$wrapperEl.transitionEnd(() => {
7144
+          if (!controlled) return;
7145
+          if (c.params.loop && swiper.params.controller.by === 'slide') {
7146
+            c.loopFix();
7147
+          }
7148
+          c.transitionEnd();
7149
+        });
7150
+      }
7151
+    }
7152
+    if (Array.isArray(controlled)) {
7153
+      for (i = 0; i < controlled.length; i += 1) {
7154
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
7155
+          setControlledTransition(controlled[i]);
7156
+        }
7157
+      }
7158
+    } else if (controlled instanceof Swiper && byController !== controlled) {
7159
+      setControlledTransition(controlled);
7160
+    }
7161
+  },
7162
+};
7163
+var Controller$1 = {
7164
+  name: 'controller',
7165
+  params: {
7166
+    controller: {
7167
+      control: undefined,
7168
+      inverse: false,
7169
+      by: 'slide', // or 'container'
7170
+    },
7171
+  },
7172
+  create() {
7173
+    const swiper = this;
7174
+    Utils.extend(swiper, {
7175
+      controller: {
7176
+        control: swiper.params.controller.control,
7177
+        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
7178
+        setTranslate: Controller.setTranslate.bind(swiper),
7179
+        setTransition: Controller.setTransition.bind(swiper),
7180
+      },
7181
+    });
7182
+  },
7183
+  on: {
7184
+    update() {
7185
+      const swiper = this;
7186
+      if (!swiper.controller.control) return;
7187
+      if (swiper.controller.spline) {
7188
+        swiper.controller.spline = undefined;
7189
+        delete swiper.controller.spline;
7190
+      }
7191
+    },
7192
+    resize() {
7193
+      const swiper = this;
7194
+      if (!swiper.controller.control) return;
7195
+      if (swiper.controller.spline) {
7196
+        swiper.controller.spline = undefined;
7197
+        delete swiper.controller.spline;
7198
+      }
7199
+    },
7200
+    observerUpdate() {
7201
+      const swiper = this;
7202
+      if (!swiper.controller.control) return;
7203
+      if (swiper.controller.spline) {
7204
+        swiper.controller.spline = undefined;
7205
+        delete swiper.controller.spline;
7206
+      }
7207
+    },
7208
+    setTranslate(translate, byController) {
7209
+      const swiper = this;
7210
+      if (!swiper.controller.control) return;
7211
+      swiper.controller.setTranslate(translate, byController);
7212
+    },
7213
+    setTransition(duration, byController) {
7214
+      const swiper = this;
7215
+      if (!swiper.controller.control) return;
7216
+      swiper.controller.setTransition(duration, byController);
7217
+    },
7218
+  },
7219
+};
7220
+
7221
+const a11y = {
7222
+  makeElFocusable($el) {
7223
+    $el.attr('tabIndex', '0');
7224
+    return $el;
7225
+  },
7226
+  makeElNotFocusable($el) {
7227
+    $el.attr('tabIndex', '-1');
7228
+    return $el;
7229
+  },
7230
+  addElRole($el, role) {
7231
+    $el.attr('role', role);
7232
+    return $el;
7233
+  },
7234
+  addElLabel($el, label) {
7235
+    $el.attr('aria-label', label);
7236
+    return $el;
7237
+  },
7238
+  disableEl($el) {
7239
+    $el.attr('aria-disabled', true);
7240
+    return $el;
7241
+  },
7242
+  enableEl($el) {
7243
+    $el.attr('aria-disabled', false);
7244
+    return $el;
7245
+  },
7246
+  onEnterKey(e) {
7247
+    const swiper = this;
7248
+    const params = swiper.params.a11y;
7249
+    if (e.keyCode !== 13) return;
7250
+    const $targetEl = $(e.target);
7251
+    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
7252
+      if (!(swiper.isEnd && !swiper.params.loop)) {
7253
+        swiper.slideNext();
7254
+      }
7255
+      if (swiper.isEnd) {
7256
+        swiper.a11y.notify(params.lastSlideMessage);
7257
+      } else {
7258
+        swiper.a11y.notify(params.nextSlideMessage);
7259
+      }
7260
+    }
7261
+    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
7262
+      if (!(swiper.isBeginning && !swiper.params.loop)) {
7263
+        swiper.slidePrev();
7264
+      }
7265
+      if (swiper.isBeginning) {
7266
+        swiper.a11y.notify(params.firstSlideMessage);
7267
+      } else {
7268
+        swiper.a11y.notify(params.prevSlideMessage);
7269
+      }
7270
+    }
7271
+    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {
7272
+      $targetEl[0].click();
7273
+    }
7274
+  },
7275
+  notify(message) {
7276
+    const swiper = this;
7277
+    const notification = swiper.a11y.liveRegion;
7278
+    if (notification.length === 0) return;
7279
+    notification.html('');
7280
+    notification.html(message);
7281
+  },
7282
+  updateNavigation() {
7283
+    const swiper = this;
7284
+
7285
+    if (swiper.params.loop || !swiper.navigation) return;
7286
+    const { $nextEl, $prevEl } = swiper.navigation;
7287
+
7288
+    if ($prevEl && $prevEl.length > 0) {
7289
+      if (swiper.isBeginning) {
7290
+        swiper.a11y.disableEl($prevEl);
7291
+        swiper.a11y.makeElNotFocusable($prevEl);
7292
+      } else {
7293
+        swiper.a11y.enableEl($prevEl);
7294
+        swiper.a11y.makeElFocusable($prevEl);
7295
+      }
7296
+    }
7297
+    if ($nextEl && $nextEl.length > 0) {
7298
+      if (swiper.isEnd) {
7299
+        swiper.a11y.disableEl($nextEl);
7300
+        swiper.a11y.makeElNotFocusable($nextEl);
7301
+      } else {
7302
+        swiper.a11y.enableEl($nextEl);
7303
+        swiper.a11y.makeElFocusable($nextEl);
7304
+      }
7305
+    }
7306
+  },
7307
+  updatePagination() {
7308
+    const swiper = this;
7309
+    const params = swiper.params.a11y;
7310
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7311
+      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {
7312
+        const $bulletEl = $(bulletEl);
7313
+        swiper.a11y.makeElFocusable($bulletEl);
7314
+        swiper.a11y.addElRole($bulletEl, 'button');
7315
+        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
7316
+      });
7317
+    }
7318
+  },
7319
+  init() {
7320
+    const swiper = this;
7321
+
7322
+    swiper.$el.append(swiper.a11y.liveRegion);
7323
+
7324
+    // Navigation
7325
+    const params = swiper.params.a11y;
7326
+    let $nextEl;
7327
+    let $prevEl;
7328
+    if (swiper.navigation && swiper.navigation.$nextEl) {
7329
+      $nextEl = swiper.navigation.$nextEl;
7330
+    }
7331
+    if (swiper.navigation && swiper.navigation.$prevEl) {
7332
+      $prevEl = swiper.navigation.$prevEl;
7333
+    }
7334
+    if ($nextEl) {
7335
+      swiper.a11y.makeElFocusable($nextEl);
7336
+      swiper.a11y.addElRole($nextEl, 'button');
7337
+      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
7338
+      $nextEl.on('keydown', swiper.a11y.onEnterKey);
7339
+    }
7340
+    if ($prevEl) {
7341
+      swiper.a11y.makeElFocusable($prevEl);
7342
+      swiper.a11y.addElRole($prevEl, 'button');
7343
+      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
7344
+      $prevEl.on('keydown', swiper.a11y.onEnterKey);
7345
+    }
7346
+
7347
+    // Pagination
7348
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7349
+      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
7350
+    }
7351
+  },
7352
+  destroy() {
7353
+    const swiper = this;
7354
+    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
7355
+
7356
+    let $nextEl;
7357
+    let $prevEl;
7358
+    if (swiper.navigation && swiper.navigation.$nextEl) {
7359
+      $nextEl = swiper.navigation.$nextEl;
7360
+    }
7361
+    if (swiper.navigation && swiper.navigation.$prevEl) {
7362
+      $prevEl = swiper.navigation.$prevEl;
7363
+    }
7364
+    if ($nextEl) {
7365
+      $nextEl.off('keydown', swiper.a11y.onEnterKey);
7366
+    }
7367
+    if ($prevEl) {
7368
+      $prevEl.off('keydown', swiper.a11y.onEnterKey);
7369
+    }
7370
+
7371
+    // Pagination
7372
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7373
+      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
7374
+    }
7375
+  },
7376
+};
7377
+var A11y = {
7378
+  name: 'a11y',
7379
+  params: {
7380
+    a11y: {
7381
+      enabled: true,
7382
+      notificationClass: 'swiper-notification',
7383
+      prevSlideMessage: 'Previous slide',
7384
+      nextSlideMessage: 'Next slide',
7385
+      firstSlideMessage: 'This is the first slide',
7386
+      lastSlideMessage: 'This is the last slide',
7387
+      paginationBulletMessage: 'Go to slide {{index}}',
7388
+    },
7389
+  },
7390
+  create() {
7391
+    const swiper = this;
7392
+    Utils.extend(swiper, {
7393
+      a11y: {
7394
+        liveRegion: $(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`),
7395
+      },
7396
+    });
7397
+    Object.keys(a11y).forEach((methodName) => {
7398
+      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
7399
+    });
7400
+  },
7401
+  on: {
7402
+    init() {
7403
+      const swiper = this;
7404
+      if (!swiper.params.a11y.enabled) return;
7405
+      swiper.a11y.init();
7406
+      swiper.a11y.updateNavigation();
7407
+    },
7408
+    toEdge() {
7409
+      const swiper = this;
7410
+      if (!swiper.params.a11y.enabled) return;
7411
+      swiper.a11y.updateNavigation();
7412
+    },
7413
+    fromEdge() {
7414
+      const swiper = this;
7415
+      if (!swiper.params.a11y.enabled) return;
7416
+      swiper.a11y.updateNavigation();
7417
+    },
7418
+    paginationUpdate() {
7419
+      const swiper = this;
7420
+      if (!swiper.params.a11y.enabled) return;
7421
+      swiper.a11y.updatePagination();
7422
+    },
7423
+    destroy() {
7424
+      const swiper = this;
7425
+      if (!swiper.params.a11y.enabled) return;
7426
+      swiper.a11y.destroy();
7427
+    },
7428
+  },
7429
+};
7430
+
7431
+const History = {
7432
+  init() {
7433
+    const swiper = this;
7434
+    if (!swiper.params.history) return;
7435
+    if (!win.history || !win.history.pushState) {
7436
+      swiper.params.history.enabled = false;
7437
+      swiper.params.hashNavigation.enabled = true;
7438
+      return;
7439
+    }
7440
+    const history = swiper.history;
7441
+    history.initialized = true;
7442
+    history.paths = History.getPathValues();
7443
+    if (!history.paths.key && !history.paths.value) return;
7444
+    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
7445
+    if (!swiper.params.history.replaceState) {
7446
+      win.addEventListener('popstate', swiper.history.setHistoryPopState);
7447
+    }
7448
+  },
7449
+  destroy() {
7450
+    const swiper = this;
7451
+    if (!swiper.params.history.replaceState) {
7452
+      win.removeEventListener('popstate', swiper.history.setHistoryPopState);
7453
+    }
7454
+  },
7455
+  setHistoryPopState() {
7456
+    const swiper = this;
7457
+    swiper.history.paths = History.getPathValues();
7458
+    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
7459
+  },
7460
+  getPathValues() {
7461
+    const pathArray = win.location.pathname.slice(1).split('/').filter((part) => part !== '');
7462
+    const total = pathArray.length;
7463
+    const key = pathArray[total - 2];
7464
+    const value = pathArray[total - 1];
7465
+    return { key, value };
7466
+  },
7467
+  setHistory(key, index) {
7468
+    const swiper = this;
7469
+    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
7470
+    const slide = swiper.slides.eq(index);
7471
+    let value = History.slugify(slide.attr('data-history'));
7472
+    if (!win.location.pathname.includes(key)) {
7473
+      value = `${key}/${value}`;
7474
+    }
7475
+    const currentState = win.history.state;
7476
+    if (currentState && currentState.value === value) {
7477
+      return;
7478
+    }
7479
+    if (swiper.params.history.replaceState) {
7480
+      win.history.replaceState({ value }, null, value);
7481
+    } else {
7482
+      win.history.pushState({ value }, null, value);
7483
+    }
7484
+  },
7485
+  slugify(text) {
7486
+    return text.toString()
7487
+      .replace(/\s+/g, '-')
7488
+      .replace(/[^\w-]+/g, '')
7489
+      .replace(/--+/g, '-')
7490
+      .replace(/^-+/, '')
7491
+      .replace(/-+$/, '');
7492
+  },
7493
+  scrollToSlide(speed, value, runCallbacks) {
7494
+    const swiper = this;
7495
+    if (value) {
7496
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
7497
+        const slide = swiper.slides.eq(i);
7498
+        const slideHistory = History.slugify(slide.attr('data-history'));
7499
+        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
7500
+          const index = slide.index();
7501
+          swiper.slideTo(index, speed, runCallbacks);
7502
+        }
7503
+      }
7504
+    } else {
7505
+      swiper.slideTo(0, speed, runCallbacks);
7506
+    }
7507
+  },
7508
+};
7509
+
7510
+var History$1 = {
7511
+  name: 'history',
7512
+  params: {
7513
+    history: {
7514
+      enabled: false,
7515
+      replaceState: false,
7516
+      key: 'slides',
7517
+    },
7518
+  },
7519
+  create() {
7520
+    const swiper = this;
7521
+    Utils.extend(swiper, {
7522
+      history: {
7523
+        init: History.init.bind(swiper),
7524
+        setHistory: History.setHistory.bind(swiper),
7525
+        setHistoryPopState: History.setHistoryPopState.bind(swiper),
7526
+        scrollToSlide: History.scrollToSlide.bind(swiper),
7527
+        destroy: History.destroy.bind(swiper),
7528
+      },
7529
+    });
7530
+  },
7531
+  on: {
7532
+    init() {
7533
+      const swiper = this;
7534
+      if (swiper.params.history.enabled) {
7535
+        swiper.history.init();
7536
+      }
7537
+    },
7538
+    destroy() {
7539
+      const swiper = this;
7540
+      if (swiper.params.history.enabled) {
7541
+        swiper.history.destroy();
7542
+      }
7543
+    },
7544
+    transitionEnd() {
7545
+      const swiper = this;
7546
+      if (swiper.history.initialized) {
7547
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
7548
+      }
7549
+    },
7550
+    slideChange() {
7551
+      const swiper = this;
7552
+      if (swiper.history.initialized && swiper.params.cssMode) {
7553
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
7554
+      }
7555
+    },
7556
+  },
7557
+};
7558
+
7559
+const HashNavigation = {
7560
+  onHashCange() {
7561
+    const swiper = this;
7562
+    swiper.emit('hashChange');
7563
+    const newHash = doc.location.hash.replace('#', '');
7564
+    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
7565
+    if (newHash !== activeSlideHash) {
7566
+      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index();
7567
+      if (typeof newIndex === 'undefined') return;
7568
+      swiper.slideTo(newIndex);
7569
+    }
7570
+  },
7571
+  setHash() {
7572
+    const swiper = this;
7573
+    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
7574
+    if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
7575
+      win.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));
7576
+      swiper.emit('hashSet');
7577
+    } else {
7578
+      const slide = swiper.slides.eq(swiper.activeIndex);
7579
+      const hash = slide.attr('data-hash') || slide.attr('data-history');
7580
+      doc.location.hash = hash || '';
7581
+      swiper.emit('hashSet');
7582
+    }
7583
+  },
7584
+  init() {
7585
+    const swiper = this;
7586
+    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;
7587
+    swiper.hashNavigation.initialized = true;
7588
+    const hash = doc.location.hash.replace('#', '');
7589
+    if (hash) {
7590
+      const speed = 0;
7591
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
7592
+        const slide = swiper.slides.eq(i);
7593
+        const slideHash = slide.attr('data-hash') || slide.attr('data-history');
7594
+        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
7595
+          const index = slide.index();
7596
+          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
7597
+        }
7598
+      }
7599
+    }
7600
+    if (swiper.params.hashNavigation.watchState) {
7601
+      $(win).on('hashchange', swiper.hashNavigation.onHashCange);
7602
+    }
7603
+  },
7604
+  destroy() {
7605
+    const swiper = this;
7606
+    if (swiper.params.hashNavigation.watchState) {
7607
+      $(win).off('hashchange', swiper.hashNavigation.onHashCange);
7608
+    }
7609
+  },
7610
+};
7611
+var HashNavigation$1 = {
7612
+  name: 'hash-navigation',
7613
+  params: {
7614
+    hashNavigation: {
7615
+      enabled: false,
7616
+      replaceState: false,
7617
+      watchState: false,
7618
+    },
7619
+  },
7620
+  create() {
7621
+    const swiper = this;
7622
+    Utils.extend(swiper, {
7623
+      hashNavigation: {
7624
+        initialized: false,
7625
+        init: HashNavigation.init.bind(swiper),
7626
+        destroy: HashNavigation.destroy.bind(swiper),
7627
+        setHash: HashNavigation.setHash.bind(swiper),
7628
+        onHashCange: HashNavigation.onHashCange.bind(swiper),
7629
+      },
7630
+    });
7631
+  },
7632
+  on: {
7633
+    init() {
7634
+      const swiper = this;
7635
+      if (swiper.params.hashNavigation.enabled) {
7636
+        swiper.hashNavigation.init();
7637
+      }
7638
+    },
7639
+    destroy() {
7640
+      const swiper = this;
7641
+      if (swiper.params.hashNavigation.enabled) {
7642
+        swiper.hashNavigation.destroy();
7643
+      }
7644
+    },
7645
+    transitionEnd() {
7646
+      const swiper = this;
7647
+      if (swiper.hashNavigation.initialized) {
7648
+        swiper.hashNavigation.setHash();
7649
+      }
7650
+    },
7651
+    slideChange() {
7652
+      const swiper = this;
7653
+      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
7654
+        swiper.hashNavigation.setHash();
7655
+      }
7656
+    },
7657
+  },
7658
+};
7659
+
7660
+/* eslint no-underscore-dangle: "off" */
7661
+
7662
+const Autoplay = {
7663
+  run() {
7664
+    const swiper = this;
7665
+    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
7666
+    let delay = swiper.params.autoplay.delay;
7667
+    if ($activeSlideEl.attr('data-swiper-autoplay')) {
7668
+      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
7669
+    }
7670
+    clearTimeout(swiper.autoplay.timeout);
7671
+    swiper.autoplay.timeout = Utils.nextTick(() => {
7672
+      if (swiper.params.autoplay.reverseDirection) {
7673
+        if (swiper.params.loop) {
7674
+          swiper.loopFix();
7675
+          swiper.slidePrev(swiper.params.speed, true, true);
7676
+          swiper.emit('autoplay');
7677
+        } else if (!swiper.isBeginning) {
7678
+          swiper.slidePrev(swiper.params.speed, true, true);
7679
+          swiper.emit('autoplay');
7680
+        } else if (!swiper.params.autoplay.stopOnLastSlide) {
7681
+          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
7682
+          swiper.emit('autoplay');
7683
+        } else {
7684
+          swiper.autoplay.stop();
7685
+        }
7686
+      } else if (swiper.params.loop) {
7687
+        swiper.loopFix();
7688
+        swiper.slideNext(swiper.params.speed, true, true);
7689
+        swiper.emit('autoplay');
7690
+      } else if (!swiper.isEnd) {
7691
+        swiper.slideNext(swiper.params.speed, true, true);
7692
+        swiper.emit('autoplay');
7693
+      } else if (!swiper.params.autoplay.stopOnLastSlide) {
7694
+        swiper.slideTo(0, swiper.params.speed, true, true);
7695
+        swiper.emit('autoplay');
7696
+      } else {
7697
+        swiper.autoplay.stop();
7698
+      }
7699
+      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
7700
+    }, delay);
7701
+  },
7702
+  start() {
7703
+    const swiper = this;
7704
+    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
7705
+    if (swiper.autoplay.running) return false;
7706
+    swiper.autoplay.running = true;
7707
+    swiper.emit('autoplayStart');
7708
+    swiper.autoplay.run();
7709
+    return true;
7710
+  },
7711
+  stop() {
7712
+    const swiper = this;
7713
+    if (!swiper.autoplay.running) return false;
7714
+    if (typeof swiper.autoplay.timeout === 'undefined') return false;
7715
+
7716
+    if (swiper.autoplay.timeout) {
7717
+      clearTimeout(swiper.autoplay.timeout);
7718
+      swiper.autoplay.timeout = undefined;
7719
+    }
7720
+    swiper.autoplay.running = false;
7721
+    swiper.emit('autoplayStop');
7722
+    return true;
7723
+  },
7724
+  pause(speed) {
7725
+    const swiper = this;
7726
+    if (!swiper.autoplay.running) return;
7727
+    if (swiper.autoplay.paused) return;
7728
+    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
7729
+    swiper.autoplay.paused = true;
7730
+    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
7731
+      swiper.autoplay.paused = false;
7732
+      swiper.autoplay.run();
7733
+    } else {
7734
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
7735
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
7736
+    }
7737
+  },
7738
+};
7739
+
7740
+var Autoplay$1 = {
7741
+  name: 'autoplay',
7742
+  params: {
7743
+    autoplay: {
7744
+      enabled: false,
7745
+      delay: 3000,
7746
+      waitForTransition: true,
7747
+      disableOnInteraction: true,
7748
+      stopOnLastSlide: false,
7749
+      reverseDirection: false,
7750
+    },
7751
+  },
7752
+  create() {
7753
+    const swiper = this;
7754
+    Utils.extend(swiper, {
7755
+      autoplay: {
7756
+        running: false,
7757
+        paused: false,
7758
+        run: Autoplay.run.bind(swiper),
7759
+        start: Autoplay.start.bind(swiper),
7760
+        stop: Autoplay.stop.bind(swiper),
7761
+        pause: Autoplay.pause.bind(swiper),
7762
+        onVisibilityChange() {
7763
+          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
7764
+            swiper.autoplay.pause();
7765
+          }
7766
+          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
7767
+            swiper.autoplay.run();
7768
+            swiper.autoplay.paused = false;
7769
+          }
7770
+        },
7771
+        onTransitionEnd(e) {
7772
+          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
7773
+          if (e.target !== this) return;
7774
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
7775
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
7776
+          swiper.autoplay.paused = false;
7777
+          if (!swiper.autoplay.running) {
7778
+            swiper.autoplay.stop();
7779
+          } else {
7780
+            swiper.autoplay.run();
7781
+          }
7782
+        },
7783
+      },
7784
+    });
7785
+  },
7786
+  on: {
7787
+    init() {
7788
+      const swiper = this;
7789
+      if (swiper.params.autoplay.enabled) {
7790
+        swiper.autoplay.start();
7791
+        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
7792
+      }
7793
+    },
7794
+    beforeTransitionStart(speed, internal) {
7795
+      const swiper = this;
7796
+      if (swiper.autoplay.running) {
7797
+        if (internal || !swiper.params.autoplay.disableOnInteraction) {
7798
+          swiper.autoplay.pause(speed);
7799
+        } else {
7800
+          swiper.autoplay.stop();
7801
+        }
7802
+      }
7803
+    },
7804
+    sliderFirstMove() {
7805
+      const swiper = this;
7806
+      if (swiper.autoplay.running) {
7807
+        if (swiper.params.autoplay.disableOnInteraction) {
7808
+          swiper.autoplay.stop();
7809
+        } else {
7810
+          swiper.autoplay.pause();
7811
+        }
7812
+      }
7813
+    },
7814
+    touchEnd() {
7815
+      const swiper = this;
7816
+      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
7817
+        swiper.autoplay.run();
7818
+      }
7819
+    },
7820
+    destroy() {
7821
+      const swiper = this;
7822
+      if (swiper.autoplay.running) {
7823
+        swiper.autoplay.stop();
7824
+      }
7825
+      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
7826
+    },
7827
+  },
7828
+};
7829
+
7830
+const Fade = {
7831
+  setTranslate() {
7832
+    const swiper = this;
7833
+    const { slides } = swiper;
7834
+    for (let i = 0; i < slides.length; i += 1) {
7835
+      const $slideEl = swiper.slides.eq(i);
7836
+      const offset = $slideEl[0].swiperSlideOffset;
7837
+      let tx = -offset;
7838
+      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
7839
+      let ty = 0;
7840
+      if (!swiper.isHorizontal()) {
7841
+        ty = tx;
7842
+        tx = 0;
7843
+      }
7844
+      const slideOpacity = swiper.params.fadeEffect.crossFade
7845
+        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
7846
+        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
7847
+      $slideEl
7848
+        .css({
7849
+          opacity: slideOpacity,
7850
+        })
7851
+        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);
7852
+    }
7853
+  },
7854
+  setTransition(duration) {
7855
+    const swiper = this;
7856
+    const { slides, $wrapperEl } = swiper;
7857
+    slides.transition(duration);
7858
+    if (swiper.params.virtualTranslate && duration !== 0) {
7859
+      let eventTriggered = false;
7860
+      slides.transitionEnd(() => {
7861
+        if (eventTriggered) return;
7862
+        if (!swiper || swiper.destroyed) return;
7863
+        eventTriggered = true;
7864
+        swiper.animating = false;
7865
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
7866
+        for (let i = 0; i < triggerEvents.length; i += 1) {
7867
+          $wrapperEl.trigger(triggerEvents[i]);
7868
+        }
7869
+      });
7870
+    }
7871
+  },
7872
+};
7873
+
7874
+var EffectFade = {
7875
+  name: 'effect-fade',
7876
+  params: {
7877
+    fadeEffect: {
7878
+      crossFade: false,
7879
+    },
7880
+  },
7881
+  create() {
7882
+    const swiper = this;
7883
+    Utils.extend(swiper, {
7884
+      fadeEffect: {
7885
+        setTranslate: Fade.setTranslate.bind(swiper),
7886
+        setTransition: Fade.setTransition.bind(swiper),
7887
+      },
7888
+    });
7889
+  },
7890
+  on: {
7891
+    beforeInit() {
7892
+      const swiper = this;
7893
+      if (swiper.params.effect !== 'fade') return;
7894
+      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);
7895
+      const overwriteParams = {
7896
+        slidesPerView: 1,
7897
+        slidesPerColumn: 1,
7898
+        slidesPerGroup: 1,
7899
+        watchSlidesProgress: true,
7900
+        spaceBetween: 0,
7901
+        virtualTranslate: true,
7902
+      };
7903
+      Utils.extend(swiper.params, overwriteParams);
7904
+      Utils.extend(swiper.originalParams, overwriteParams);
7905
+    },
7906
+    setTranslate() {
7907
+      const swiper = this;
7908
+      if (swiper.params.effect !== 'fade') return;
7909
+      swiper.fadeEffect.setTranslate();
7910
+    },
7911
+    setTransition(duration) {
7912
+      const swiper = this;
7913
+      if (swiper.params.effect !== 'fade') return;
7914
+      swiper.fadeEffect.setTransition(duration);
7915
+    },
7916
+  },
7917
+};
7918
+
7919
+const Cube = {
7920
+  setTranslate() {
7921
+    const swiper = this;
7922
+    const {
7923
+      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,
7924
+    } = swiper;
7925
+    const params = swiper.params.cubeEffect;
7926
+    const isHorizontal = swiper.isHorizontal();
7927
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
7928
+    let wrapperRotate = 0;
7929
+    let $cubeShadowEl;
7930
+    if (params.shadow) {
7931
+      if (isHorizontal) {
7932
+        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
7933
+        if ($cubeShadowEl.length === 0) {
7934
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7935
+          $wrapperEl.append($cubeShadowEl);
7936
+        }
7937
+        $cubeShadowEl.css({ height: `${swiperWidth}px` });
7938
+      } else {
7939
+        $cubeShadowEl = $el.find('.swiper-cube-shadow');
7940
+        if ($cubeShadowEl.length === 0) {
7941
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7942
+          $el.append($cubeShadowEl);
7943
+        }
7944
+      }
7945
+    }
7946
+    for (let i = 0; i < slides.length; i += 1) {
7947
+      const $slideEl = slides.eq(i);
7948
+      let slideIndex = i;
7949
+      if (isVirtual) {
7950
+        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
7951
+      }
7952
+      let slideAngle = slideIndex * 90;
7953
+      let round = Math.floor(slideAngle / 360);
7954
+      if (rtl) {
7955
+        slideAngle = -slideAngle;
7956
+        round = Math.floor(-slideAngle / 360);
7957
+      }
7958
+      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
7959
+      let tx = 0;
7960
+      let ty = 0;
7961
+      let tz = 0;
7962
+      if (slideIndex % 4 === 0) {
7963
+        tx = -round * 4 * swiperSize;
7964
+        tz = 0;
7965
+      } else if ((slideIndex - 1) % 4 === 0) {
7966
+        tx = 0;
7967
+        tz = -round * 4 * swiperSize;
7968
+      } else if ((slideIndex - 2) % 4 === 0) {
7969
+        tx = swiperSize + (round * 4 * swiperSize);
7970
+        tz = swiperSize;
7971
+      } else if ((slideIndex - 3) % 4 === 0) {
7972
+        tx = -swiperSize;
7973
+        tz = (3 * swiperSize) + (swiperSize * 4 * round);
7974
+      }
7975
+      if (rtl) {
7976
+        tx = -tx;
7977
+      }
7978
+
7979
+      if (!isHorizontal) {
7980
+        ty = tx;
7981
+        tx = 0;
7982
+      }
7983
+
7984
+      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
7985
+      if (progress <= 1 && progress > -1) {
7986
+        wrapperRotate = (slideIndex * 90) + (progress * 90);
7987
+        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);
7988
+      }
7989
+      $slideEl.transform(transform);
7990
+      if (params.slideShadows) {
7991
+        // Set shadows
7992
+        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7993
+        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7994
+        if (shadowBefore.length === 0) {
7995
+          shadowBefore = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
7996
+          $slideEl.append(shadowBefore);
7997
+        }
7998
+        if (shadowAfter.length === 0) {
7999
+          shadowAfter = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
8000
+          $slideEl.append(shadowAfter);
8001
+        }
8002
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
8003
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
8004
+      }
8005
+    }
8006
+    $wrapperEl.css({
8007
+      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,
8008
+      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,
8009
+      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,
8010
+      'transform-origin': `50% 50% -${swiperSize / 2}px`,
8011
+    });
8012
+
8013
+    if (params.shadow) {
8014
+      if (isHorizontal) {
8015
+        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);
8016
+      } else {
8017
+        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
8018
+        const multiplier = 1.5 - (
8019
+          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
8020
+          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
8021
+        );
8022
+        const scale1 = params.shadowScale;
8023
+        const scale2 = params.shadowScale / multiplier;
8024
+        const offset = params.shadowOffset;
8025
+        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);
8026
+      }
8027
+    }
8028
+    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
8029
+    $wrapperEl
8030
+      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);
8031
+  },
8032
+  setTransition(duration) {
8033
+    const swiper = this;
8034
+    const { $el, slides } = swiper;
8035
+    slides
8036
+      .transition(duration)
8037
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8038
+      .transition(duration);
8039
+    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
8040
+      $el.find('.swiper-cube-shadow').transition(duration);
8041
+    }
8042
+  },
8043
+};
8044
+
8045
+var EffectCube = {
8046
+  name: 'effect-cube',
8047
+  params: {
8048
+    cubeEffect: {
8049
+      slideShadows: true,
8050
+      shadow: true,
8051
+      shadowOffset: 20,
8052
+      shadowScale: 0.94,
8053
+    },
8054
+  },
8055
+  create() {
8056
+    const swiper = this;
8057
+    Utils.extend(swiper, {
8058
+      cubeEffect: {
8059
+        setTranslate: Cube.setTranslate.bind(swiper),
8060
+        setTransition: Cube.setTransition.bind(swiper),
8061
+      },
8062
+    });
8063
+  },
8064
+  on: {
8065
+    beforeInit() {
8066
+      const swiper = this;
8067
+      if (swiper.params.effect !== 'cube') return;
8068
+      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);
8069
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
8070
+      const overwriteParams = {
8071
+        slidesPerView: 1,
8072
+        slidesPerColumn: 1,
8073
+        slidesPerGroup: 1,
8074
+        watchSlidesProgress: true,
8075
+        resistanceRatio: 0,
8076
+        spaceBetween: 0,
8077
+        centeredSlides: false,
8078
+        virtualTranslate: true,
8079
+      };
8080
+      Utils.extend(swiper.params, overwriteParams);
8081
+      Utils.extend(swiper.originalParams, overwriteParams);
8082
+    },
8083
+    setTranslate() {
8084
+      const swiper = this;
8085
+      if (swiper.params.effect !== 'cube') return;
8086
+      swiper.cubeEffect.setTranslate();
8087
+    },
8088
+    setTransition(duration) {
8089
+      const swiper = this;
8090
+      if (swiper.params.effect !== 'cube') return;
8091
+      swiper.cubeEffect.setTransition(duration);
8092
+    },
8093
+  },
8094
+};
8095
+
8096
+const Flip = {
8097
+  setTranslate() {
8098
+    const swiper = this;
8099
+    const { slides, rtlTranslate: rtl } = swiper;
8100
+    for (let i = 0; i < slides.length; i += 1) {
8101
+      const $slideEl = slides.eq(i);
8102
+      let progress = $slideEl[0].progress;
8103
+      if (swiper.params.flipEffect.limitRotation) {
8104
+        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
8105
+      }
8106
+      const offset = $slideEl[0].swiperSlideOffset;
8107
+      const rotate = -180 * progress;
8108
+      let rotateY = rotate;
8109
+      let rotateX = 0;
8110
+      let tx = -offset;
8111
+      let ty = 0;
8112
+      if (!swiper.isHorizontal()) {
8113
+        ty = tx;
8114
+        tx = 0;
8115
+        rotateX = -rotateY;
8116
+        rotateY = 0;
8117
+      } else if (rtl) {
8118
+        rotateY = -rotateY;
8119
+      }
8120
+
8121
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
8122
+
8123
+      if (swiper.params.flipEffect.slideShadows) {
8124
+        // Set shadows
8125
+        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8126
+        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8127
+        if (shadowBefore.length === 0) {
8128
+          shadowBefore = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`);
8129
+          $slideEl.append(shadowBefore);
8130
+        }
8131
+        if (shadowAfter.length === 0) {
8132
+          shadowAfter = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`);
8133
+          $slideEl.append(shadowAfter);
8134
+        }
8135
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
8136
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
8137
+      }
8138
+      $slideEl
8139
+        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);
8140
+    }
8141
+  },
8142
+  setTransition(duration) {
8143
+    const swiper = this;
8144
+    const { slides, activeIndex, $wrapperEl } = swiper;
8145
+    slides
8146
+      .transition(duration)
8147
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8148
+      .transition(duration);
8149
+    if (swiper.params.virtualTranslate && duration !== 0) {
8150
+      let eventTriggered = false;
8151
+      // eslint-disable-next-line
8152
+      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
8153
+        if (eventTriggered) return;
8154
+        if (!swiper || swiper.destroyed) return;
8155
+        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
8156
+        eventTriggered = true;
8157
+        swiper.animating = false;
8158
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
8159
+        for (let i = 0; i < triggerEvents.length; i += 1) {
8160
+          $wrapperEl.trigger(triggerEvents[i]);
8161
+        }
8162
+      });
8163
+    }
8164
+  },
8165
+};
8166
+
8167
+var EffectFlip = {
8168
+  name: 'effect-flip',
8169
+  params: {
8170
+    flipEffect: {
8171
+      slideShadows: true,
8172
+      limitRotation: true,
8173
+    },
8174
+  },
8175
+  create() {
8176
+    const swiper = this;
8177
+    Utils.extend(swiper, {
8178
+      flipEffect: {
8179
+        setTranslate: Flip.setTranslate.bind(swiper),
8180
+        setTransition: Flip.setTransition.bind(swiper),
8181
+      },
8182
+    });
8183
+  },
8184
+  on: {
8185
+    beforeInit() {
8186
+      const swiper = this;
8187
+      if (swiper.params.effect !== 'flip') return;
8188
+      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);
8189
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
8190
+      const overwriteParams = {
8191
+        slidesPerView: 1,
8192
+        slidesPerColumn: 1,
8193
+        slidesPerGroup: 1,
8194
+        watchSlidesProgress: true,
8195
+        spaceBetween: 0,
8196
+        virtualTranslate: true,
8197
+      };
8198
+      Utils.extend(swiper.params, overwriteParams);
8199
+      Utils.extend(swiper.originalParams, overwriteParams);
8200
+    },
8201
+    setTranslate() {
8202
+      const swiper = this;
8203
+      if (swiper.params.effect !== 'flip') return;
8204
+      swiper.flipEffect.setTranslate();
8205
+    },
8206
+    setTransition(duration) {
8207
+      const swiper = this;
8208
+      if (swiper.params.effect !== 'flip') return;
8209
+      swiper.flipEffect.setTransition(duration);
8210
+    },
8211
+  },
8212
+};
8213
+
8214
+const Coverflow = {
8215
+  setTranslate() {
8216
+    const swiper = this;
8217
+    const {
8218
+      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,
8219
+    } = swiper;
8220
+    const params = swiper.params.coverflowEffect;
8221
+    const isHorizontal = swiper.isHorizontal();
8222
+    const transform = swiper.translate;
8223
+    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
8224
+    const rotate = isHorizontal ? params.rotate : -params.rotate;
8225
+    const translate = params.depth;
8226
+    // Each slide offset from center
8227
+    for (let i = 0, length = slides.length; i < length; i += 1) {
8228
+      const $slideEl = slides.eq(i);
8229
+      const slideSize = slidesSizesGrid[i];
8230
+      const slideOffset = $slideEl[0].swiperSlideOffset;
8231
+      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
8232
+
8233
+      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
8234
+      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
8235
+      // var rotateZ = 0
8236
+      let translateZ = -translate * Math.abs(offsetMultiplier);
8237
+
8238
+      let stretch = params.stretch;
8239
+      // Allow percentage to make a relative stretch for responsive sliders
8240
+      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
8241
+        stretch = ((parseFloat(params.stretch) / 100) * slideSize);
8242
+      }
8243
+      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
8244
+      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;
8245
+
8246
+      // Fix for ultra small values
8247
+      if (Math.abs(translateX) < 0.001) translateX = 0;
8248
+      if (Math.abs(translateY) < 0.001) translateY = 0;
8249
+      if (Math.abs(translateZ) < 0.001) translateZ = 0;
8250
+      if (Math.abs(rotateY) < 0.001) rotateY = 0;
8251
+      if (Math.abs(rotateX) < 0.001) rotateX = 0;
8252
+
8253
+      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
8254
+
8255
+      $slideEl.transform(slideTransform);
8256
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
8257
+      if (params.slideShadows) {
8258
+        // Set shadows
8259
+        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8260
+        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8261
+        if ($shadowBeforeEl.length === 0) {
8262
+          $shadowBeforeEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
8263
+          $slideEl.append($shadowBeforeEl);
8264
+        }
8265
+        if ($shadowAfterEl.length === 0) {
8266
+          $shadowAfterEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
8267
+          $slideEl.append($shadowAfterEl);
8268
+        }
8269
+        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
8270
+        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
8271
+      }
8272
+    }
8273
+
8274
+    // Set correct perspective for IE10
8275
+    if (Support.pointerEvents || Support.prefixedPointerEvents) {
8276
+      const ws = $wrapperEl[0].style;
8277
+      ws.perspectiveOrigin = `${center}px 50%`;
8278
+    }
8279
+  },
8280
+  setTransition(duration) {
8281
+    const swiper = this;
8282
+    swiper.slides
8283
+      .transition(duration)
8284
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8285
+      .transition(duration);
8286
+  },
8287
+};
8288
+
8289
+var EffectCoverflow = {
8290
+  name: 'effect-coverflow',
8291
+  params: {
8292
+    coverflowEffect: {
8293
+      rotate: 50,
8294
+      stretch: 0,
8295
+      depth: 100,
8296
+      modifier: 1,
8297
+      slideShadows: true,
8298
+    },
8299
+  },
8300
+  create() {
8301
+    const swiper = this;
8302
+    Utils.extend(swiper, {
8303
+      coverflowEffect: {
8304
+        setTranslate: Coverflow.setTranslate.bind(swiper),
8305
+        setTransition: Coverflow.setTransition.bind(swiper),
8306
+      },
8307
+    });
8308
+  },
8309
+  on: {
8310
+    beforeInit() {
8311
+      const swiper = this;
8312
+      if (swiper.params.effect !== 'coverflow') return;
8313
+
8314
+      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);
8315
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
8316
+
8317
+      swiper.params.watchSlidesProgress = true;
8318
+      swiper.originalParams.watchSlidesProgress = true;
8319
+    },
8320
+    setTranslate() {
8321
+      const swiper = this;
8322
+      if (swiper.params.effect !== 'coverflow') return;
8323
+      swiper.coverflowEffect.setTranslate();
8324
+    },
8325
+    setTransition(duration) {
8326
+      const swiper = this;
8327
+      if (swiper.params.effect !== 'coverflow') return;
8328
+      swiper.coverflowEffect.setTransition(duration);
8329
+    },
8330
+  },
8331
+};
8332
+
8333
+const Thumbs = {
8334
+  init() {
8335
+    const swiper = this;
8336
+    const { thumbs: thumbsParams } = swiper.params;
8337
+    const SwiperClass = swiper.constructor;
8338
+    if (thumbsParams.swiper instanceof SwiperClass) {
8339
+      swiper.thumbs.swiper = thumbsParams.swiper;
8340
+      Utils.extend(swiper.thumbs.swiper.originalParams, {
8341
+        watchSlidesProgress: true,
8342
+        slideToClickedSlide: false,
8343
+      });
8344
+      Utils.extend(swiper.thumbs.swiper.params, {
8345
+        watchSlidesProgress: true,
8346
+        slideToClickedSlide: false,
8347
+      });
8348
+    } else if (Utils.isObject(thumbsParams.swiper)) {
8349
+      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
8350
+        watchSlidesVisibility: true,
8351
+        watchSlidesProgress: true,
8352
+        slideToClickedSlide: false,
8353
+      }));
8354
+      swiper.thumbs.swiperCreated = true;
8355
+    }
8356
+    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
8357
+    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
8358
+  },
8359
+  onThumbClick() {
8360
+    const swiper = this;
8361
+    const thumbsSwiper = swiper.thumbs.swiper;
8362
+    if (!thumbsSwiper) return;
8363
+    const clickedIndex = thumbsSwiper.clickedIndex;
8364
+    const clickedSlide = thumbsSwiper.clickedSlide;
8365
+    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
8366
+    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
8367
+    let slideToIndex;
8368
+    if (thumbsSwiper.params.loop) {
8369
+      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
8370
+    } else {
8371
+      slideToIndex = clickedIndex;
8372
+    }
8373
+    if (swiper.params.loop) {
8374
+      let currentIndex = swiper.activeIndex;
8375
+      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
8376
+        swiper.loopFix();
8377
+        // eslint-disable-next-line
8378
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
8379
+        currentIndex = swiper.activeIndex;
8380
+      }
8381
+      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
8382
+      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
8383
+      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;
8384
+      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;
8385
+      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;
8386
+      else slideToIndex = prevIndex;
8387
+    }
8388
+    swiper.slideTo(slideToIndex);
8389
+  },
8390
+  update(initial) {
8391
+    const swiper = this;
8392
+    const thumbsSwiper = swiper.thumbs.swiper;
8393
+    if (!thumbsSwiper) return;
8394
+
8395
+    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
8396
+      ? thumbsSwiper.slidesPerViewDynamic()
8397
+      : thumbsSwiper.params.slidesPerView;
8398
+
8399
+    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
8400
+    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
8401
+    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
8402
+      let currentThumbsIndex = thumbsSwiper.activeIndex;
8403
+      let newThumbsIndex;
8404
+      let direction;
8405
+      if (thumbsSwiper.params.loop) {
8406
+        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
8407
+          thumbsSwiper.loopFix();
8408
+          // eslint-disable-next-line
8409
+          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
8410
+          currentThumbsIndex = thumbsSwiper.activeIndex;
8411
+        }
8412
+        // Find actual thumbs index to slide to
8413
+        const prevThumbsIndex = thumbsSwiper.slides
8414
+          .eq(currentThumbsIndex)
8415
+          .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
8416
+          .index();
8417
+        const nextThumbsIndex = thumbsSwiper.slides
8418
+          .eq(currentThumbsIndex)
8419
+          .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
8420
+          .index();
8421
+        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;
8422
+        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;
8423
+        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;
8424
+        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;
8425
+        else newThumbsIndex = prevThumbsIndex;
8426
+        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
8427
+      } else {
8428
+        newThumbsIndex = swiper.realIndex;
8429
+        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
8430
+      }
8431
+      if (useOffset) {
8432
+        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
8433
+      }
8434
+
8435
+      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
8436
+        if (thumbsSwiper.params.centeredSlides) {
8437
+          if (newThumbsIndex > currentThumbsIndex) {
8438
+            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
8439
+          } else {
8440
+            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
8441
+          }
8442
+        } else if (newThumbsIndex > currentThumbsIndex) {
8443
+          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
8444
+        }
8445
+        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
8446
+      }
8447
+    }
8448
+
8449
+    // Activate thumbs
8450
+    let thumbsToActivate = 1;
8451
+    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
8452
+
8453
+    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
8454
+      thumbsToActivate = swiper.params.slidesPerView;
8455
+    }
8456
+
8457
+    if (!swiper.params.thumbs.multipleActiveThumbs) {
8458
+      thumbsToActivate = 1;
8459
+    }
8460
+
8461
+    thumbsToActivate = Math.floor(thumbsToActivate);
8462
+
8463
+    thumbsSwiper.slides.removeClass(thumbActiveClass);
8464
+    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
8465
+      for (let i = 0; i < thumbsToActivate; i += 1) {
8466
+        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass);
8467
+      }
8468
+    } else {
8469
+      for (let i = 0; i < thumbsToActivate; i += 1) {
8470
+        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);
8471
+      }
8472
+    }
8473
+  },
8474
+};
8475
+var Thumbs$1 = {
8476
+  name: 'thumbs',
8477
+  params: {
8478
+    thumbs: {
8479
+      swiper: null,
8480
+      multipleActiveThumbs: true,
8481
+      autoScrollOffset: 0,
8482
+      slideThumbActiveClass: 'swiper-slide-thumb-active',
8483
+      thumbsContainerClass: 'swiper-container-thumbs',
8484
+    },
8485
+  },
8486
+  create() {
8487
+    const swiper = this;
8488
+    Utils.extend(swiper, {
8489
+      thumbs: {
8490
+        swiper: null,
8491
+        init: Thumbs.init.bind(swiper),
8492
+        update: Thumbs.update.bind(swiper),
8493
+        onThumbClick: Thumbs.onThumbClick.bind(swiper),
8494
+      },
8495
+    });
8496
+  },
8497
+  on: {
8498
+    beforeInit() {
8499
+      const swiper = this;
8500
+      const { thumbs } = swiper.params;
8501
+      if (!thumbs || !thumbs.swiper) return;
8502
+      swiper.thumbs.init();
8503
+      swiper.thumbs.update(true);
8504
+    },
8505
+    slideChange() {
8506
+      const swiper = this;
8507
+      if (!swiper.thumbs.swiper) return;
8508
+      swiper.thumbs.update();
8509
+    },
8510
+    update() {
8511
+      const swiper = this;
8512
+      if (!swiper.thumbs.swiper) return;
8513
+      swiper.thumbs.update();
8514
+    },
8515
+    resize() {
8516
+      const swiper = this;
8517
+      if (!swiper.thumbs.swiper) return;
8518
+      swiper.thumbs.update();
8519
+    },
8520
+    observerUpdate() {
8521
+      const swiper = this;
8522
+      if (!swiper.thumbs.swiper) return;
8523
+      swiper.thumbs.update();
8524
+    },
8525
+    setTransition(duration) {
8526
+      const swiper = this;
8527
+      const thumbsSwiper = swiper.thumbs.swiper;
8528
+      if (!thumbsSwiper) return;
8529
+      thumbsSwiper.setTransition(duration);
8530
+    },
8531
+    beforeDestroy() {
8532
+      const swiper = this;
8533
+      const thumbsSwiper = swiper.thumbs.swiper;
8534
+      if (!thumbsSwiper) return;
8535
+      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
8536
+        thumbsSwiper.destroy();
8537
+      }
8538
+    },
8539
+  },
8540
+};
8541
+
8542
+// Swiper Class
8543
+
8544
+const components = [
8545
+  Device$1,
8546
+  Support$1,
8547
+  Browser$1,
8548
+  Resize,
8549
+  Observer$1,
8550
+  Virtual$1,
8551
+  Keyboard$1,
8552
+  Mousewheel$1,
8553
+  Navigation$1,
8554
+  Pagination$1,
8555
+  Scrollbar$1,
8556
+  Parallax$1,
8557
+  Zoom$1,
8558
+  Lazy$1,
8559
+  Controller$1,
8560
+  A11y,
8561
+  History$1,
8562
+  HashNavigation$1,
8563
+  Autoplay$1,
8564
+  EffectFade,
8565
+  EffectCube,
8566
+  EffectFlip,
8567
+  EffectCoverflow,
8568
+  Thumbs$1
8569
+];
8570
+
8571
+if (typeof Swiper.use === 'undefined') {
8572
+  Swiper.use = Swiper.Class.use;
8573
+  Swiper.installModule = Swiper.Class.installModule;
8574
+}
8575
+
8576
+Swiper.use(components);
8577
+
8578
+export default Swiper;
8579
+//# sourceMappingURL=swiper.esm.browser.bundle.js.map
0 8580
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"file":"swiper.esm.browser.bundle.js.map","sources":["../../node_modules/ssr-window/dist/ssr-window.esm.js","../../node_modules/dom7/dist/dom7.modular.js","../../src/utils/dom.js","../../src/utils/utils.js","../../src/utils/support.js","../../src/utils/class.js","../../src/components/core/update/updateSize.js","../../src/components/core/update/updateSlides.js","../../src/components/core/update/updateAutoHeight.js","../../src/components/core/update/updateSlidesOffset.js","../../src/components/core/update/updateSlidesProgress.js","../../src/components/core/update/updateProgress.js","../../src/components/core/update/updateSlidesClasses.js","../../src/components/core/update/updateActiveIndex.js","../../src/components/core/update/updateClickedSlide.js","../../src/components/core/update/index.js","../../src/components/core/translate/getTranslate.js","../../src/components/core/translate/setTranslate.js","../../src/components/core/translate/minTranslate.js","../../src/components/core/translate/maxTranslate.js","../../src/components/core/translate/translateTo.js","../../src/components/core/translate/index.js","../../src/components/core/transition/setTransition.js","../../src/components/core/transition/transitionStart.js","../../src/components/core/transition/transitionEnd.js","../../src/components/core/transition/index.js","../../src/components/core/slide/slideTo.js","../../src/components/core/slide/slideToLoop.js","../../src/components/core/slide/slideNext.js","../../src/components/core/slide/slidePrev.js","../../src/components/core/slide/slideReset.js","../../src/components/core/slide/slideToClosest.js","../../src/components/core/slide/slideToClickedSlide.js","../../src/components/core/slide/index.js","../../src/components/core/loop/loopCreate.js","../../src/components/core/loop/loopFix.js","../../src/components/core/loop/loopDestroy.js","../../src/components/core/loop/index.js","../../src/components/core/grab-cursor/setGrabCursor.js","../../src/components/core/grab-cursor/unsetGrabCursor.js","../../src/components/core/grab-cursor/index.js","../../src/components/core/manipulation/appendSlide.js","../../src/components/core/manipulation/prependSlide.js","../../src/components/core/manipulation/addSlide.js","../../src/components/core/manipulation/removeSlide.js","../../src/components/core/manipulation/removeAllSlides.js","../../src/components/core/manipulation/index.js","../../src/utils/device.js","../../src/components/core/events/onTouchStart.js","../../src/components/core/events/onTouchMove.js","../../src/components/core/events/onTouchEnd.js","../../src/components/core/events/onResize.js","../../src/components/core/events/onClick.js","../../src/components/core/events/onScroll.js","../../src/components/core/events/index.js","../../src/components/core/breakpoints/setBreakpoint.js","../../src/components/core/breakpoints/getBreakpoint.js","../../src/components/core/breakpoints/index.js","../../src/components/core/classes/addClasses.js","../../src/components/core/classes/removeClasses.js","../../src/components/core/classes/index.js","../../src/components/core/images/loadImage.js","../../src/components/core/images/preloadImages.js","../../src/components/core/images/index.js","../../src/components/core/check-overflow/index.js","../../src/components/core/defaults.js","../../src/components/core/core-class.js","../../src/modules/device/device.js","../../src/modules/support/support.js","../../src/utils/browser.js","../../src/modules/browser/browser.js","../../src/modules/resize/resize.js","../../src/modules/observer/observer.js","../../src/components/virtual/virtual.js","../../src/components/keyboard/keyboard.js","../../src/components/mousewheel/mousewheel.js","../../src/components/navigation/navigation.js","../../src/components/pagination/pagination.js","../../src/components/scrollbar/scrollbar.js","../../src/components/parallax/parallax.js","../../src/components/zoom/zoom.js","../../src/components/lazy/lazy.js","../../src/components/controller/controller.js","../../src/components/a11y/a11y.js","../../src/components/history/history.js","../../src/components/hash-navigation/hash-navigation.js","../../src/components/autoplay/autoplay.js","../../src/components/effect-fade/effect-fade.js","../../src/components/effect-cube/effect-cube.js","../../src/components/effect-flip/effect-flip.js","../../src/components/effect-coverflow/effect-coverflow.js","../../src/components/thumbs/thumbs.js","../../src/swiper.js"],"sourcesContent":["/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target, src) {\n    if (target === void 0) { target = {}; }\n    if (src === void 0) { src = {}; }\n    Object.keys(src).forEach(function (key) {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n    body: {},\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    activeElement: {\n        blur: function () { },\n        nodeName: '',\n    },\n    querySelector: function () {\n        return null;\n    },\n    querySelectorAll: function () {\n        return [];\n    },\n    getElementById: function () {\n        return null;\n    },\n    createEvent: function () {\n        return {\n            initEvent: function () { },\n        };\n    },\n    createElement: function () {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute: function () { },\n            getElementsByTagName: function () {\n                return [];\n            },\n        };\n    },\n    createElementNS: function () {\n        return {};\n    },\n    importNode: function () {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrWindow = {\n    document: ssrDocument,\n    navigator: {\n        userAgent: '',\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n    history: {\n        replaceState: function () { },\n        pushState: function () { },\n        go: function () { },\n        back: function () { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    getComputedStyle: function () {\n        return {\n            getPropertyValue: function () {\n                return '';\n            },\n        };\n    },\n    Image: function () { },\n    Date: function () { },\n    screen: {},\n    setTimeout: function () { },\n    clearTimeout: function () { },\n    matchMedia: function () {\n        return {};\n    },\n};\nextend(win, ssrWindow);\n\nexport { doc as document, extend, win as window };\n","/**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\nimport { document, window } from 'ssr-window';\n\nclass Dom7 {\n  constructor(arr) {\n    const self = this;\n    // Create array-like object\n    for (let i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  }\n}\n\nfunction $(selector, context) {\n  const arr = [];\n  let i = 0;\n  if (selector && !context) {\n    if (selector instanceof Dom7) {\n      return selector;\n    }\n  }\n  if (selector) {\n      // String\n    if (typeof selector === 'string') {\n      let els;\n      let tempParent;\n      const html = selector.trim();\n      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n        let toCreate = 'div';\n        if (html.indexOf('<li') === 0) toCreate = 'ul';\n        if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n        if (html.indexOf('<tbody') === 0) toCreate = 'table';\n        if (html.indexOf('<option') === 0) toCreate = 'select';\n        tempParent = document.createElement(toCreate);\n        tempParent.innerHTML = html;\n        for (i = 0; i < tempParent.childNodes.length; i += 1) {\n          arr.push(tempParent.childNodes[i]);\n        }\n      } else {\n        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n          // Pure ID selector\n          els = [document.getElementById(selector.trim().split('#')[1])];\n        } else {\n          // Other selectors\n          els = (context || document).querySelectorAll(selector.trim());\n        }\n        for (i = 0; i < els.length; i += 1) {\n          if (els[i]) arr.push(els[i]);\n        }\n      }\n    } else if (selector.nodeType || selector === window || selector === document) {\n      // Node/element\n      arr.push(selector);\n    } else if (selector.length > 0 && selector[0].nodeType) {\n      // Array of elements or instance of Dom\n      for (i = 0; i < selector.length; i += 1) {\n        arr.push(selector[i]);\n      }\n    }\n  }\n  return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n  const uniqueArray = [];\n  for (let i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());\n}\n\nfunction requestAnimationFrame(callback) {\n  if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n  else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n  return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n  if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);\n  else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);\n  return window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n  if (typeof className === 'undefined') {\n    return this;\n  }\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n    }\n  }\n  return this;\n}\nfunction removeClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n    }\n  }\n  return this;\n}\nfunction hasClass(className) {\n  if (!this[0]) return false;\n  return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n    }\n  }\n  return this;\n}\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  }\n\n  // Set attrs\n  for (let i = 0; i < this.length; i += 1) {\n    if (arguments.length === 2) {\n      // String\n      this[i].setAttribute(attrs, value);\n    } else {\n      // Object\n      // eslint-disable-next-line\n      for (const attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (let i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (const propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n    return this;\n  }\n}\nfunction data(key, value) {\n  let el;\n  if (typeof value === 'undefined') {\n    el = this[0];\n    // Get value\n    if (el) {\n      if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n        return el.dom7ElementDataStorage[key];\n      }\n\n      const dataKey = el.getAttribute(`data-${key}`);\n      if (dataKey) {\n        return dataKey;\n      }\n      return undefined;\n    }\n    return undefined;\n  }\n\n  // Set value\n  for (let i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n  return this;\n}\nfunction removeData(key) {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\nfunction dataset() {\n  const el = this[0];\n  if (!el) return undefined;\n  const dataset = {}; // eslint-disable-line\n  if (el.dataset) {\n    // eslint-disable-next-line\n    for (const dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (let i = 0; i < el.attributes.length; i += 1) {\n      // eslint-disable-next-line\n      const attr = el.attributes[i];\n      if (attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n      }\n    }\n  }\n  // eslint-disable-next-line\n  for (const key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;\n    else if (dataset[key] === 'true') dataset[key] = true;\n    else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n  return dataset;\n}\nfunction val(value) {\n  const dom = this;\n  if (typeof value === 'undefined') {\n    if (dom[0]) {\n      if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n        const values = [];\n        for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {\n          values.push(dom[0].selectedOptions[i].value);\n        }\n        return values;\n      }\n      return dom[0].value;\n    }\n    return undefined;\n  }\n\n  for (let i = 0; i < dom.length; i += 1) {\n    const el = dom[i];\n    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n      for (let j = 0; j < el.options.length; j += 1) {\n        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n      }\n    } else {\n      el.value = value;\n    }\n  }\n  return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransform = transform;\n    elStyle.transform = transform;\n  }\n  return this;\n}\nfunction transition(duration) {\n  if (typeof duration !== 'string') {\n    duration = `${duration}ms`; // eslint-disable-line\n  }\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransitionDuration = duration;\n    elStyle.transitionDuration = duration;\n  }\n  return this;\n}\n// Events\nfunction on(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  if (!capture) capture = false;\n\n  function handleLiveEvent(e) {\n    const target = e.target;\n    if (!target) return;\n    const eventData = e.target.dom7EventData || [];\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);\n    else {\n      const parents = $(target).parents(); // eslint-disable-line\n      for (let k = 0; k < parents.length; k += 1) {\n        if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n      }\n    }\n  }\n  function handleEvent(e) {\n    const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    listener.apply(this, eventData);\n  }\n  const events = eventType.split(' ');\n  let j;\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (!targetSelector) {\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7Listeners) el.dom7Listeners = {};\n        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n        el.dom7Listeners[event].push({\n          listener,\n          proxyListener: handleEvent,\n        });\n        el.addEventListener(event, handleEvent, capture);\n      }\n    } else {\n      // Live events\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n        if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n        el.dom7LiveListeners[event].push({\n          listener,\n          proxyListener: handleLiveEvent,\n        });\n        el.addEventListener(event, handleLiveEvent, capture);\n      }\n    }\n  }\n  return this;\n}\nfunction off(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  if (!capture) capture = false;\n\n  const events = eventType.split(' ');\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let handlers;\n      if (!targetSelector && el.dom7Listeners) {\n        handlers = el.dom7Listeners[event];\n      } else if (targetSelector && el.dom7LiveListeners) {\n        handlers = el.dom7LiveListeners[event];\n      }\n      if (handlers && handlers.length) {\n        for (let k = handlers.length - 1; k >= 0; k -= 1) {\n          const handler = handlers[k];\n          if (listener && handler.listener === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (!listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          }\n        }\n      }\n    }\n  }\n  return this;\n}\nfunction once(...args) {\n  const dom = this;\n  let [eventName, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventName, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  function onceHandler(...eventArgs) {\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger(...args) {\n  const events = args[0].split(' ');\n  const eventData = args[1];\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let evt;\n      try {\n        evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true,\n        });\n      } catch (e) {\n        evt = document.createEvent('Event');\n        evt.initEvent(event, true, true);\n        evt.detail = eventData;\n      }\n      // eslint-disable-next-line\n      el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n      el.dispatchEvent(evt);\n      el.dom7EventData = [];\n      delete el.dom7EventData;\n    }\n  }\n  return this;\n}\nfunction transitionEnd(callback) {\n  const events = ['webkitTransitionEnd', 'transitionend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    /* jshint validthis:true */\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\nfunction animationEnd(callback) {\n  const events = ['webkitAnimationEnd', 'animationend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\n// Sizing/Styles\nfunction width() {\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n    }\n    return this[0].offsetWidth;\n  }\n  return null;\n}\nfunction height() {\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n    }\n    return this[0].offsetHeight;\n  }\n  return null;\n}\nfunction offset() {\n  if (this.length > 0) {\n    const el = this[0];\n    const box = el.getBoundingClientRect();\n    const body = document.body;\n    const clientTop = el.clientTop || body.clientTop || 0;\n    const clientLeft = el.clientLeft || body.clientLeft || 0;\n    const scrollTop = el === window ? window.scrollY : el.scrollTop;\n    const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n    return {\n      top: (box.top + scrollTop) - clientTop,\n      left: (box.left + scrollLeft) - clientLeft,\n    };\n  }\n\n  return null;\n}\nfunction hide() {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n  return this;\n}\nfunction show() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n  return this;\n}\nfunction styles() {\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\nfunction css(props, value) {\n  let i;\n  if (arguments.length === 1) {\n    if (typeof props === 'string') {\n      if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n    } else {\n      for (i = 0; i < this.length; i += 1) {\n        // eslint-disable-next-line\n        for (let prop in props) {\n          this[i].style[prop] = props[prop];\n        }\n      }\n      return this;\n    }\n  }\n  if (arguments.length === 2 && typeof props === 'string') {\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n    return this;\n  }\n  return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n  const arr = [];\n  for (let i = 0; i < this.length; i += 1) {\n    arr.push(this[i]);\n  }\n  return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], i, this[i]) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction forEach(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], this[i], i) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction filter(callback) {\n  const matchedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n  }\n  return new Dom7(matchedItems);\n}\nfunction map(callback) {\n  const modifiedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    modifiedItems.push(callback.call(dom[i], i, dom[i]));\n  }\n  return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : undefined;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    if (this[0]) {\n      return this[0].textContent.trim();\n    }\n    return null;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n  return this;\n}\nfunction is(selector) {\n  const el = this[0];\n  let compareWith;\n  let i;\n  if (!el || typeof selector === 'undefined') return false;\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n    compareWith = $(selector);\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  } else if (selector === document) return el === document;\n  else if (selector === window) return el === window;\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  }\n  return false;\n}\nfunction indexOf(el) {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i] === el) return i;\n  }\n  return -1;\n}\nfunction index() {\n  let child = this[0];\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  const length = this.length;\n  let returnIndex;\n  if (index > length - 1) {\n    return new Dom7([]);\n  }\n  if (index < 0) {\n    returnIndex = length + index;\n    if (returnIndex < 0) return new Dom7([]);\n    return new Dom7([this[returnIndex]]);\n  }\n  return new Dom7([this[index]]);\n}\nfunction append(...args) {\n  let newChild;\n\n  for (let k = 0; k < args.length; k += 1) {\n    newChild = args[k];\n    for (let i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        const tempDiv = document.createElement('div');\n        tempDiv.innerHTML = newChild;\n        while (tempDiv.firstChild) {\n          this[i].appendChild(tempDiv.firstChild);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (let j = 0; j < newChild.length; j += 1) {\n          this[i].appendChild(newChild[j]);\n        }\n      } else {\n        this[i].appendChild(newChild);\n      }\n    }\n  }\n\n  return this;\n}\n// eslint-disable-next-line\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\nfunction prepend(newChild) {\n  let i;\n  let j;\n  for (i = 0; i < this.length; i += 1) {\n    if (typeof newChild === 'string') {\n      const tempDiv = document.createElement('div');\n      tempDiv.innerHTML = newChild;\n      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n      }\n    } else if (newChild instanceof Dom7) {\n      for (j = 0; j < newChild.length; j += 1) {\n        this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n      }\n    } else {\n      this[i].insertBefore(newChild, this[i].childNodes[0]);\n    }\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\nfunction insertBefore(selector) {\n  const before = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (let j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\nfunction insertAfter(selector) {\n  const after = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (let j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return new Dom7([this[0].nextElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction nextAll(selector) {\n  const nextEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(next).is(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return new Dom7(nextEls);\n}\nfunction prev(selector) {\n  if (this.length > 0) {\n    const el = this[0];\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return new Dom7([el.previousElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction prevAll(selector) {\n  const prevEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(prev).is(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n  const parents = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode !== null) {\n      if (selector) {\n        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n      } else {\n        parents.push(this[i].parentNode);\n      }\n    }\n  }\n  return $(unique(parents));\n}\nfunction parents(selector) {\n  const parents = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    let parent = this[i].parentNode; // eslint-disable-line\n    while (parent) {\n      if (selector) {\n        if ($(parent).is(selector)) parents.push(parent);\n      } else {\n        parents.push(parent);\n      }\n      parent = parent.parentNode;\n    }\n  }\n  return $(unique(parents));\n}\nfunction closest(selector) {\n  let closest = this; // eslint-disable-line\n  if (typeof selector === 'undefined') {\n    return new Dom7([]);\n  }\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n  return closest;\n}\nfunction find(selector) {\n  const foundElements = [];\n  for (let i = 0; i < this.length; i += 1) {\n    const found = this[i].querySelectorAll(selector);\n    for (let j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n  return new Dom7(foundElements);\n}\nfunction children(selector) {\n  const children = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    const childNodes = this[i].childNodes;\n\n    for (let j = 0; j < childNodes.length; j += 1) {\n      if (!selector) {\n        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n  return new Dom7(unique(children));\n}\nfunction remove() {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n  return this;\n}\nfunction detach() {\n  return this.remove();\n}\nfunction add(...args) {\n  const dom = this;\n  let i;\n  let j;\n  for (i = 0; i < args.length; i += 1) {\n    const toAdd = $(args[i]);\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom[dom.length] = toAdd[j];\n      dom.length += 1;\n    }\n  }\n  return dom;\n}\nfunction empty() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.nodeType === 1) {\n      for (let j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n      el.textContent = '';\n    }\n  }\n  return this;\n}\n\nfunction scrollTo(...args) {\n  let [left, top, duration, easing, callback] = args;\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    [left, top, duration, callback, easing] = args;\n  }\n  if (typeof easing === 'undefined') easing = 'swing';\n\n  return this.each(function animate() {\n    const el = this;\n    let currentTop;\n    let currentLeft;\n    let maxTop;\n    let maxLeft;\n    let newTop;\n    let newLeft;\n    let scrollTop; // eslint-disable-line\n    let scrollLeft; // eslint-disable-line\n    let animateTop = top > 0 || top === 0;\n    let animateLeft = left > 0 || left === 0;\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n    if (animateTop) {\n      currentTop = el.scrollTop;\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n    if (!duration) return;\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n    let startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n    function render(time = new Date().getTime()) {\n      if (startTime === null) {\n        startTime = time;\n      }\n      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n      let done;\n      if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));\n      if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      requestAnimationFrame(render);\n    }\n    requestAnimationFrame(render);\n  });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop(...args) {\n  let [top, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [top, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft(...args) {\n  let [left, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [left, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n  const els = this;\n  const a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing', // or 'linear'\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n    }, initialParams),\n\n    elements: els,\n    animating: false,\n    que: [],\n\n    easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - (Math.cos(progress * Math.PI) / 2);\n      }\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n      return progress;\n    },\n    stop() {\n      if (a.frameId) {\n        cancelAnimationFrame(a.frameId);\n      }\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n    done(complete) {\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n      if (a.que.length > 0) {\n        const que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n    animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n      const elements = [];\n\n      // Define & Cache Initials & Units\n      a.elements.each((index, el) => {\n        let initialFullValue;\n        let initialValue;\n        let unit;\n        let finalValue;\n        let finalFullValue;\n\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n        elements[index] = {\n          container: el,\n        };\n        Object.keys(props).forEach((prop) => {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue,\n            initialValue,\n            unit,\n            finalValue,\n            finalFullValue,\n            currentValue: initialValue,\n          };\n        });\n      });\n\n      let startTime = null;\n      let time;\n      let elementsDone = 0;\n      let propsDone = 0;\n      let done;\n      let began = false;\n\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        let progress;\n        let easeProgress;\n        // let el;\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n        if (startTime === null) {\n          startTime = time;\n        }\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n        }\n\n        elements.forEach((element) => {\n          const el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach((prop) => {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            const { initialValue, finalValue, unit } = el[prop];\n            el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n            const currentValue = el[prop].currentValue;\n\n            if (\n              (finalValue > initialValue && currentValue >= finalValue) ||\n              (finalValue < initialValue && currentValue <= finalValue)) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return;\n        // Then call\n        a.frameId = requestAnimationFrame(render);\n      }\n      a.frameId = requestAnimationFrame(render);\n      return a;\n    },\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  let animateInstance;\n  for (let i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  const els = this;\n  for (let i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nconst noTrigger = ('resize scroll').split(' ');\nfunction eventShortcut(name, ...args) {\n  if (typeof args[0] === 'undefined') {\n    for (let i = 0; i < this.length; i += 1) {\n      if (noTrigger.indexOf(name) < 0) {\n        if (name in this[i]) this[i][name]();\n        else {\n          $(this[i]).trigger(name);\n        }\n      }\n    }\n    return this;\n  }\n  return this.on(name, ...args);\n}\n\nfunction click(...args) {\n  return eventShortcut.bind(this)('click', ...args);\n}\nfunction blur(...args) {\n  return eventShortcut.bind(this)('blur', ...args);\n}\nfunction focus(...args) {\n  return eventShortcut.bind(this)('focus', ...args);\n}\nfunction focusin(...args) {\n  return eventShortcut.bind(this)('focusin', ...args);\n}\nfunction focusout(...args) {\n  return eventShortcut.bind(this)('focusout', ...args);\n}\nfunction keyup(...args) {\n  return eventShortcut.bind(this)('keyup', ...args);\n}\nfunction keydown(...args) {\n  return eventShortcut.bind(this)('keydown', ...args);\n}\nfunction keypress(...args) {\n  return eventShortcut.bind(this)('keypress', ...args);\n}\nfunction submit(...args) {\n  return eventShortcut.bind(this)('submit', ...args);\n}\nfunction change(...args) {\n  return eventShortcut.bind(this)('change', ...args);\n}\nfunction mousedown(...args) {\n  return eventShortcut.bind(this)('mousedown', ...args);\n}\nfunction mousemove(...args) {\n  return eventShortcut.bind(this)('mousemove', ...args);\n}\nfunction mouseup(...args) {\n  return eventShortcut.bind(this)('mouseup', ...args);\n}\nfunction mouseenter(...args) {\n  return eventShortcut.bind(this)('mouseenter', ...args);\n}\nfunction mouseleave(...args) {\n  return eventShortcut.bind(this)('mouseleave', ...args);\n}\nfunction mouseout(...args) {\n  return eventShortcut.bind(this)('mouseout', ...args);\n}\nfunction mouseover(...args) {\n  return eventShortcut.bind(this)('mouseover', ...args);\n}\nfunction touchstart(...args) {\n  return eventShortcut.bind(this)('touchstart', ...args);\n}\nfunction touchend(...args) {\n  return eventShortcut.bind(this)('touchend', ...args);\n}\nfunction touchmove(...args) {\n  return eventShortcut.bind(this)('touchmove', ...args);\n}\nfunction resize(...args) {\n  return eventShortcut.bind(this)('resize', ...args);\n}\nfunction scroll(...args) {\n  return eventShortcut.bind(this)('scroll', ...args);\n}\n\nexport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll };\n","import {\n  $,\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n} from 'dom7/dist/dom7.modular';\n\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n  $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nexport default $;\n","import { window } from 'ssr-window';\n\nconst Utils = {\n  deleteProps(obj) {\n    const object = obj;\n    Object.keys(object).forEach((key) => {\n      try {\n        object[key] = null;\n      } catch (e) {\n        // no getter for object\n      }\n      try {\n        delete object[key];\n      } catch (e) {\n        // something got wrong\n      }\n    });\n  },\n  nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n  },\n  now() {\n    return Date.now();\n  },\n  getTranslate(el, axis = 'x') {\n    let matrix;\n    let curTransform;\n    let transformMatrix;\n\n    const curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n      }\n      // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n      matrix = transformMatrix.toString().split(',');\n    }\n\n    if (axis === 'x') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n    }\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n    }\n    return curTransform || 0;\n  },\n  parseUrlQuery(url) {\n    const query = {};\n    let urlToParse = url || window.location.href;\n    let i;\n    let params;\n    let param;\n    let length;\n    if (typeof urlToParse === 'string' && urlToParse.length) {\n      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n      length = params.length;\n\n      for (i = 0; i < length; i += 1) {\n        param = params[i].replace(/#\\S+/g, '').split('=');\n        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n      }\n    }\n    return query;\n  },\n  isObject(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  },\n  extend(...args) {\n    const to = Object(args[0]);\n    for (let i = 1; i < args.length; i += 1) {\n      const nextSource = args[i];\n      if (nextSource !== undefined && nextSource !== null) {\n        const keysArray = Object.keys(Object(nextSource));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          const nextKey = keysArray[nextIndex];\n          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== undefined && desc.enumerable) {\n            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              to[nextKey] = {};\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n    return to;\n  },\n};\nexport default Utils;\n","import { window, document } from 'ssr-window';\n\nconst Support = (function Support() {\n  return {\n    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n\n    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n    observer: (function checkObserver() {\n      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n    }()),\n\n    passiveListener: (function checkPassiveListener() {\n      let supportsPassive = false;\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          },\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {\n        // No support\n      }\n      return supportsPassive;\n    }()),\n\n    gestures: (function checkGestures() {\n      return 'ongesturestart' in window;\n    }()),\n  };\n}());\n\nexport default Support;\n","import Utils from './utils';\n\nclass SwiperClass {\n  constructor(params = {}) {\n    const self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach((eventName) => {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  }\n\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach((event) => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  }\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  }\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach((event) => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  }\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach((event) => {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        const handlers = [];\n        self.eventsListeners[event].forEach((eventHandler) => {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach((eventHandler) => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n  useModulesParams(instanceParams) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  }\n\n  useModules(modulesParams = {}) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      const moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach((modulePropName) => {\n          const moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach((moduleEventName) => {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n\n  static set components(components) {\n    const Class = this;\n    if (!Class.use) return;\n    Class.use(components);\n  }\n\n  static installModule(module, ...params) {\n    const Class = this;\n    if (!Class.prototype.modules) Class.prototype.modules = {};\n    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach((key) => {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach((key) => {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  }\n\n  static use(module, ...params) {\n    const Class = this;\n    if (Array.isArray(module)) {\n      module.forEach((m) => Class.installModule(m));\n      return Class;\n    }\n    return Class.installModule(module, ...params);\n  }\n}\n\nexport default SwiperClass;\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n  if (typeof swiper.params.width !== 'undefined') {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined') {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n  Utils.extend(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height,\n  });\n}\n","import { window } from 'ssr-window';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const params = swiper.params;\n\n  const {\n    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n\n  function slidesForMargin(slideIndex) {\n    if (!params.cssMode) return true;\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n    return true;\n  }\n\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.snapGrid.length;\n\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n  else slides.css({ marginRight: '', marginBottom: '' });\n\n  let slidesNumberEvenToRows;\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  }\n\n  // Calc slides\n  let slideSize;\n  const slidesPerColumn = params.slidesPerColumn;\n  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      let newSlideOrderIndex;\n      let column;\n      let row;\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        const columnsInGroup = groupIndex === 0\n          ? params.slidesPerGroup\n          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n        slide\n          .css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex,\n          });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - (column * slidesPerColumn);\n        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n          row += 1;\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - (row * slidesPerRow);\n      }\n      slide.css(\n        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n      );\n    }\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      const slideStyles = window.getComputedStyle(slide[0], null);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal()\n          ? slide.outerWidth(true)\n          : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        if (swiper.isHorizontal()) {\n          const width = parseFloat(slideStyles.getPropertyValue('width'));\n          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          const height = parseFloat(slideStyles.getPropertyValue('height'));\n          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\n        }\n      }\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        if (swiper.isHorizontal()) {\n          slides[i].style.width = `${slideSize}px`;\n        } else {\n          slides[i].style.height = `${slideSize}px`;\n        }\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n\n    prevSlideSize = slideSize;\n\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  let newSlidesGrid;\n\n  if (\n    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n  if (params.setWrapperSize) {\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid = newSlidesGrid;\n    }\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map((snap) => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Utils.extend(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid,\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n","export default function (speed) {\n  const swiper = this;\n  const activeSlides = [];\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each((index, slide) => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function () {\n  const swiper = this;\n  const slides = swiper.slides;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (translate = (this && this.translate) || 0) {\n  const swiper = this;\n  const params = swiper.params;\n\n  const { slides, rtlTranslate: rtl } = swiper;\n\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.removeClass(params.slideVisibleClass);\n\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    const slideProgress = (\n      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n    ) / (slide.swiperSlideSize + params.spaceBetween);\n    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                || (slideAfter > 1 && slideAfter <= swiper.size)\n                || (slideBefore <= 0 && slideAfter >= swiper.size);\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let { progress, isBeginning, isEnd } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / (translatesDiff);\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n  Utils.extend(swiper, {\n    progress,\n    isBeginning,\n    isEnd,\n  });\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}\n","export default function () {\n  const swiper = this;\n\n  const {\n    slides, params, $wrapperEl, activeIndex, realIndex,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n  let activeSlide;\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  }\n\n  // Active classes\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    }\n  }\n  // Next Slide\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  }\n  // Prev Slide\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    }\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    }\n  }\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    }\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n\n  // Get real index\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n  Utils.extend(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex,\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\n\nexport default {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function (axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n\n  const {\n    params, rtlTranslate: rtl, translate, $wrapperEl,\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n\n  return currentTranslate || 0;\n}\n","export default function (translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function () {\n  return (-this.snapGrid[0]);\n}\n","export default function () {\n  return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n","export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n\n  const {\n    params,\n    wrapperEl,\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n  else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: -newTranslate,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\n\nexport default {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo,\n};\n","export default function (duration, byController) {\n  const swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, params, previousIndex } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n    swiper.emit('slideChangeTransitionStart');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, previousIndex, params } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n    swiper.emit('slideChangeTransitionEnd');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\n\nexport default {\n  setTransition,\n  transitionStart,\n  transitionEnd,\n};\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n\n  const {\n    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex];\n\n  // Update progress\n  swiper.updateProgress(translate);\n\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';\n  else if (slideIndex < activeIndex) direction = 'prev';\n  else direction = 'reset';\n\n\n  // Update Index\n  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    let t = -translate;\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: t,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const { params, animating } = swiper;\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params, animating, snapGrid, slidesGrid, rtlTranslate,\n  } = swiper;\n\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach((snap) => {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n  let prevIndex;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (\n        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n      ) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n          .eq(0)\n          .index();\n\n        Utils.nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl\n        .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n        .eq(0)\n        .index();\n\n      Utils.nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\n\nexport default {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide,\n};\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n  // Remove duplicated slides\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n  let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $wrapperEl.append(blankNode);\n      }\n      slides = $wrapperEl.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((index, el) => {\n    const slide = $(el);\n    if (index < swiper.loopedSlides) appendSlides.push(el);\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n    slide.attr('data-swiper-slide-index', index);\n  });\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  swiper.emit('beforeLoopFix');\n\n  const {\n    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate();\n\n  // Fix For Negative Oversliding\n  if (activeIndex < loopedSlides) {\n    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  swiper.emit('loopFix');\n}\n","export default function () {\n  const swiper = this;\n  const { $wrapperEl, params, slides } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\n\nexport default {\n  loopCreate,\n  loopFix,\n  loopDestroy,\n};\n","import Support from '../../../utils/support';\n\nexport default function (moving) {\n  const swiper = this;\n  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  const el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","import Support from '../../../utils/support';\n\nexport default function () {\n  const swiper = this;\n  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  swiper.el.style.cursor = '';\n}\n","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\n\nexport default {\n  setGrabCursor,\n  unsetGrabCursor,\n};\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { $wrapperEl, params } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n","import Support from '../../../utils/support';\n\nexport default function (index, slides) {\n  const swiper = this;\n  const { $wrapperEl, params, activeIndex } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    $wrapperEl.append(slidesBuffer[i]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slidesIndexes) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\n\nexport default {\n  appendSlide,\n  prependSlide,\n  addSlide,\n  removeSlide,\n  removeAllSlides,\n};\n","import { window } from 'ssr-window';\nimport Support from './support';\n\nconst Device = (function Device() {\n  const platform = window.navigator.platform;\n  const ua = window.navigator.userAgent;\n\n  const device = {\n    ios: false,\n    android: false,\n    androidChrome: false,\n    desktop: false,\n    iphone: false,\n    ipod: false,\n    ipad: false,\n    edge: false,\n    ie: false,\n    firefox: false,\n    macos: false,\n    windows: false,\n    cordova: !!(window.cordova || window.phonegap),\n    phonegap: !!(window.cordova || window.phonegap),\n    electron: false,\n  };\n\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n  const edge = ua.indexOf('Edge/') >= 0;\n  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n  const windows = platform === 'Win32';\n  const electron = ua.toLowerCase().indexOf('electron') >= 0;\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  if (!ipad\n    && macos\n    && Support.touch\n    && (\n      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n      || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n      || (screenWidth === 768 && screenHeight === 1024) // other\n    )\n  ) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    macos = false;\n  }\n\n  device.ie = ie;\n  device.edge = edge;\n  device.firefox = firefox;\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.osVersion = android[2];\n    device.android = true;\n    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n  // iOS\n  if (iphone && !ipod) {\n    device.osVersion = iphone[2].replace(/_/g, '.');\n    device.iphone = true;\n  }\n  if (ipad) {\n    device.osVersion = ipad[2].replace(/_/g, '.');\n    device.ipad = true;\n  }\n  if (ipod) {\n    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    device.ipod = true;\n  }\n  // iOS 8+ changed UA\n  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n    if (device.osVersion.split('.')[0] === '10') {\n      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n    }\n  }\n\n  // Webview\n  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n  device.webview = device.webView;\n  device.standalone = device.webView;\n\n  // Desktop\n  device.desktop = !(device.ios || device.android) || electron;\n  if (device.desktop) {\n    device.electron = electron;\n    device.macos = macos;\n    device.windows = windows;\n    if (device.macos) {\n      device.os = 'macos';\n    }\n    if (device.windows) {\n      device.os = 'windows';\n    }\n  }\n\n  // Pixel Ratio\n  device.pixelRatio = window.devicePixelRatio || 1;\n\n  // Export object\n  return device;\n}());\n\nexport default Device;\n","import { window, document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n  if (\n    edgeSwipeDetection\n    && ((startX <= edgeSwipeThreshold)\n    || (startX >= window.screen.width - edgeSwipeThreshold))\n  ) {\n    return;\n  }\n\n  Utils.extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined,\n  });\n\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = Utils.now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n    if (\n      document.activeElement\n      && $(document.activeElement).is(data.formElements)\n      && document.activeElement !== $targetEl[0]\n    ) {\n      document.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n  swiper.emit('touchStart', e);\n}\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches, rtlTranslate: rtl } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n    if (data.isTouched) {\n      Utils.extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY,\n      });\n      data.touchStartTime = Utils.now();\n    }\n    return;\n  }\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (\n        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n      ) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (\n      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n    ) {\n      return;\n    }\n  }\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if ((diffX * diffX) + (diffY * diffY) >= 25) {\n        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime,\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: Utils.now(),\n    });\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n\n  const {\n    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n  } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = Utils.now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = Utils.now();\n  Utils.nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeModeMomentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(() => {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(() => {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(() => {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(() => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const { params, el } = swiper;\n\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n\n  swiper.updateSize();\n  swiper.updateSlides();\n\n  swiper.updateSlidesClasses();\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n","export default function (e) {\n  const swiper = this;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n  const { wrapperEl, rtlTranslate } = swiper;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === -0) swiper.translate = 0;\n\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { document } from 'ssr-window';\nimport Device from '../../../utils/device';\nimport Support from '../../../utils/support';\n\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  const swiper = this;\n\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nexport default {\n  attachEvents,\n  detachEvents,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const {\n    activeIndex, initialized, loopedSlides = 0, params, $el,\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n        const paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    const wasMultiRow = params.slidesPerColumn > 1;\n    const isMultiRow = breakpointParams.slidesPerColumn > 1;\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(`${params.containerModifierClass}multirow`);\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(`${params.containerModifierClass}multirow-column`);\n      }\n    }\n\n    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n    if (directionChanged && initialized) {\n      swiper.changeDirection();\n    }\n\n    Utils.extend(swiper.params, breakpointParams);\n\n    Utils.extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n    });\n\n    swiper.currentBreakpoint = breakpoint;\n\n    if (needsReLoop && initialized) {\n      swiper.loopDestroy();\n      swiper.loopCreate();\n      swiper.updateSlides();\n      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n    }\n\n    swiper.emit('breakpoint', breakpointParams);\n  }\n}\n","import { window } from 'ssr-window';\n\nexport default function (breakpoints) {\n  // Get breakpoint for window width\n  if (!breakpoints) return undefined;\n  let breakpoint = false;\n\n  const points = Object.keys(breakpoints).map((point) => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = window.innerHeight * minRatio;\n      return { value, point };\n    }\n    return { value: point, point };\n  });\n\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const { point, value } = points[i];\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\n\nexport default { setBreakpoint, getBreakpoint };\n","import Device from '../../../utils/device';\n\nexport default function () {\n  const swiper = this;\n  const {\n    classNames, params, rtl, $el,\n  } = swiper;\n  const suffixes = [];\n\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n  if (Device.android) {\n    suffixes.push('android');\n  }\n  if (Device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach((suffix) => {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n\n  $el.addClass(classNames.join(' '));\n}\n","export default function () {\n  const swiper = this;\n  const { $el, classNames } = swiper;\n\n  $el.removeClass(classNames.join(' '));\n}\n","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\n\nexport default { addClasses, removeClasses };\n","import { window } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function (imageEl, src, srcset, sizes, checkForComplete, callback) {\n  let image;\n  function onReady() {\n    if (callback) callback();\n  }\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n      if (sizes) {\n        image.sizes = sizes;\n      }\n      if (srcset) {\n        image.srcset = srcset;\n      }\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}\n","export default function () {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(\n      imageEl,\n      imageEl.currentSrc || imageEl.getAttribute('src'),\n      imageEl.srcset || imageEl.getAttribute('srcset'),\n      imageEl.sizes || imageEl.getAttribute('sizes'),\n      true,\n      onReady\n    );\n  }\n}\n","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\n\nexport default {\n  loadImage,\n  preloadImages,\n};\n","\nfunction checkOverflow() {\n  const swiper = this;\n  const params = swiper.params;\n  const wasLocked = swiper.isLocked;\n  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked;\n\n  // events\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    swiper.navigation.update();\n  }\n}\n\nexport default { checkOverflow };\n","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  //\n  preventInteractionOnTransition: false,\n\n  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n\n  // Autoheight\n  autoHeight: false,\n\n  // Set wrapper width\n  setWrapperSize: false,\n\n  // Virtual Translate\n  virtualTranslate: false,\n\n  // Effects\n  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0, // in px\n  slidesOffsetAfter: 0, // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n\n  // Round length\n  roundLengths: false,\n\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n\n  // Cursor\n  grabCursor: false,\n\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null, // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n\n  // Passive Listeners\n  passiveListeners: true,\n\n  // NS\n  containerModifierClass: 'swiper-container-', // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n\n  // Callbacks\n  runCallbacksOnInit: true,\n};\n","/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nimport SwiperClass from '../../utils/class';\n\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\n\nimport defaults from './defaults';\n\nconst prototypes = {\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  manipulation,\n  events,\n  breakpoints,\n  checkOverflow,\n  classes,\n  images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n\n    params = Utils.extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    super(params);\n\n    Object.keys(prototypes).forEach((prototypeGroup) => {\n      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    // Swiper Instance\n    const swiper = this;\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n    Object.keys(swiper.modules).forEach((moduleName) => {\n      const module = swiper.modules[moduleName];\n      if (module.params) {\n        const moduleParamName = Object.keys(module.params)[0];\n        const moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = { enabled: true };\n        }\n        if (\n          typeof params[moduleParamName] === 'object'\n          && !('enabled' in params[moduleParamName])\n        ) {\n          params[moduleParamName].enabled = true;\n        }\n        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n      }\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = Utils.extend({}, defaults);\n    swiper.useModulesParams(swiperParams);\n\n    // Extend defaults with passed params\n    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = Utils.extend({}, swiper.params);\n    swiper.passedParams = Utils.extend({}, params);\n\n    // Save Dom lib\n    swiper.$ = $;\n\n    // Find el\n    const $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      const swipers = [];\n      $el.each((index, containerEl) => {\n        const newParams = Utils.extend({}, params, { el: containerEl });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper;\n    $el.data('swiper', swiper);\n\n    // Find Wrapper\n    let $wrapperEl;\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n      // Children needs to return slot items\n      $wrapperEl.children = (options) => $el.children(options);\n    } else {\n      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n    }\n    // Extend Swiper\n    Utils.extend(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n\n      // Classes\n      classNames: [],\n\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // RTL\n      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n\n      //\n      isBeginning: true,\n      isEnd: false,\n\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n\n      // Touch Events\n      touchEvents: (function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        let desktop = ['mousedown', 'mousemove', 'mouseup'];\n        if (Support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3],\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2],\n        };\n        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }()),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        formElements: 'input, select, option, textarea, button, video, label',\n        // Last click time\n        lastClickTime: Utils.now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined,\n      },\n\n      // Clicks\n      allowClick: true,\n\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0,\n      },\n\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0,\n\n    });\n\n    // Install Modules\n    swiper.useModules();\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    return swiper;\n  }\n\n  slidesPerViewDynamic() {\n    const swiper = this;\n    const {\n      params, slides, slidesGrid, size: swiperSize, activeIndex,\n    } = swiper;\n    let spv = 1;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const { snapGrid, params } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (swiper.params.freeMode) {\n      setTranslate();\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n      return swiper;\n    }\n\n    swiper.$el\n      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n    swiper.params.direction = newDirection;\n\n    swiper.slides.each((slideIndex, slideEl) => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n\n    return swiper;\n  }\n\n  init() {\n    const swiper = this;\n    if (swiper.initialized) return;\n\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n\n    // Init Flag\n    swiper.initialized = true;\n\n    // Emit\n    swiper.emit('init');\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params, $el, $wrapperEl, slides,\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n      if (slides && slides.length) {\n        slides\n          .removeClass([\n            params.slideVisibleClass,\n            params.slideActiveClass,\n            params.slideNextClass,\n            params.slidePrevClass,\n          ].join(' '))\n          .removeAttr('style')\n          .removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach((eventName) => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      swiper.$el.data('swiper', null);\n      Utils.deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    Utils.extend(extendedDefaults, newDefaults);\n  }\n\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n\n  static get defaults() {\n    return defaults;\n  }\n\n  static get Class() {\n    return SwiperClass;\n  }\n\n  static get $() {\n    return $;\n  }\n}\n\nexport default Swiper;\n","import Device from '../../utils/device';\n\nexport default {\n  name: 'device',\n  proto: {\n    device: Device,\n  },\n  static: {\n    device: Device,\n  },\n};\n","import Support from '../../utils/support';\n\nexport default {\n  name: 'support',\n  proto: {\n    support: Support,\n  },\n  static: {\n    support: Support,\n  },\n};\n","import { window } from 'ssr-window';\n\nconst Browser = (function Browser() {\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n  }\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n  };\n}());\n\nexport default Browser;\n","import Browser from '../../utils/browser';\n\nexport default {\n  name: 'browser',\n  proto: {\n    browser: Browser,\n  },\n  static: {\n    browser: Browser,\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nexport default {\n  name: 'resize',\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      resize: {\n        resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      // Emit resize\n      window.addEventListener('resize', swiper.resize.resizeHandler);\n\n      // Emit orientationchange\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy() {\n      const swiper = this;\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Observer = {\n  func: window.MutationObserver || window.WebkitMutationObserver,\n  attach(target, options = {}) {\n    const swiper = this;\n\n    const ObserverFunc = Observer.func;\n    const observer = new ObserverFunc((mutations) => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n    });\n\n    swiper.observer.observers.push(observer);\n  },\n  init() {\n    const swiper = this;\n    if (!Support.observer || !swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n      for (let i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n    // Observe wrapper\n    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n  },\n  destroy() {\n    const swiper = this;\n    swiper.observer.observers.forEach((observer) => {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  },\n};\n\nexport default {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false,\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      observer: {\n        init: Observer.init.bind(swiper),\n        attach: Observer.attach.bind(swiper),\n        destroy: Observer.destroy.bind(swiper),\n        observers: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.observer.init();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.observer.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Virtual = {\n  update(force) {\n    const swiper = this;\n    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      renderSlide,\n      offset: previousOffset,\n    } = swiper.virtual;\n    swiper.updateActiveIndex();\n    const activeIndex = swiper.activeIndex || 0;\n\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';\n    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n      slidesBefore = slidesPerGroup + addSlidesAfter;\n    }\n    const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n    Utils.extend(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, `${offset}px`);\n      }\n      swiper.updateProgress();\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: (function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()),\n      });\n      onRendered();\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    if (force) {\n      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      if (i >= from && i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(i);\n        } else {\n          if (i > previousTo) appendIndexes.push(i);\n          if (i < previousFrom) prependIndexes.push(i);\n        }\n      }\n    }\n    appendIndexes.forEach((index) => {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort((a, b) => b - a).forEach((index) => {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n    onRendered();\n  },\n  renderSlide(slide, index) {\n    const swiper = this;\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    const $slideEl = params.renderSlide\n      ? $(params.renderSlide.call(swiper, slide, index))\n      : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n    if (params.cache) swiper.virtual.cache[index] = $slideEl;\n    return $slideEl;\n  },\n  appendSlide(slides) {\n    const swiper = this;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n    swiper.virtual.update(true);\n  },\n  prependSlide(slides) {\n    const swiper = this;\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach((cachedIndex) => {\n        const $cachedEl = cache[cachedIndex];\n        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide(slidesIndexes) {\n    const swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides() {\n    const swiper = this;\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  },\n};\n\nexport default {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      virtual: {\n        update: Virtual.update.bind(swiper),\n        appendSlide: Virtual.appendSlide.bind(swiper),\n        prependSlide: Virtual.prependSlide.bind(swiper),\n        removeSlide: Virtual.removeSlide.bind(swiper),\n        removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n        renderSlide: Virtual.renderSlide.bind(swiper),\n        slides: swiper.params.virtual.slides,\n        cache: {},\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n      const overwriteParams = {\n        watchSlidesProgress: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Keyboard = {\n  handle(event) {\n    const swiper = this;\n    const { rtlTranslate: rtl } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    // Directions locks\n    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      const swiperCoord = [\n        [swiperOffset.left, swiperOffset.top],\n        [swiperOffset.left + swiper.width, swiperOffset.top],\n        [swiperOffset.left, swiperOffset.top + swiper.height],\n        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n      ];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (\n          point[0] >= 0 && point[0] <= windowWidth\n          && point[1] >= 0 && point[1] <= windowHeight\n        ) {\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();\n      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();\n    } else {\n      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (kc === 34 || kc === 40) swiper.slideNext();\n      if (kc === 33 || kc === 38) swiper.slidePrev();\n    }\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable() {\n    const swiper = this;\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable() {\n    const swiper = this;\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  },\n};\n\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      keyboard: {\n        enabled: false,\n        enable: Keyboard.enable.bind(swiper),\n        disable: Keyboard.disable.bind(swiper),\n        handle: Keyboard.handle.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nfunction isEventSupported() {\n  const eventName = 'onwheel';\n  let isSupported = eventName in document;\n\n  if (!isSupported) {\n    const element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported\n    && document.implementation\n    && document.implementation.hasFeature\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    && document.implementation.hasFeature('', '') !== true\n  ) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\nconst Mousewheel = {\n  lastScrollTime: Utils.now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event() {\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) { // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else { // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = (pX < 1) ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = (pY < 1) ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY,\n    };\n  },\n  handleMouseEnter() {\n    const swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave() {\n    const swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle(event) {\n    let e = event;\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n    const data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n        else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n      else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n\n    if (params.invert) delta = -delta;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: Utils.now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event,\n      };\n\n      // Keep the most recent events\n      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n      const { lastEventBeforeSnap } = swiper.mousewheel;\n      const ignoreWheelEvents = lastEventBeforeSnap\n        && newEvent.time < lastEventBeforeSnap.time + 500\n        && newEvent.delta <= lastEventBeforeSnap.delta\n        && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        let position = swiper.getTranslate() + (delta * params.sensitivity);\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            recentWheelEvents.splice(0);\n          } else if (recentWheelEvents.length >= 15\n              && newEvent.time - firstEvent.time < 500\n              && firstEvent.delta - newEvent.delta >= 1\n              && newEvent.delta <= 6\n          ) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              const snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    return false;\n  },\n  animateSlider(newEvent) {\n    const swiper = this;\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n    // Return false as a default\n    return false;\n  },\n  releaseScroll(newEvent) {\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  },\n  enable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  },\n};\n\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarged: 'container',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      mousewheel: {\n        enabled: false,\n        enable: Mousewheel.enable.bind(swiper),\n        disable: Mousewheel.disable.bind(swiper),\n        handle: Mousewheel.handle.bind(swiper),\n        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n        animateSlider: Mousewheel.animateSlider.bind(swiper),\n        releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n        lastScrollTime: Utils.now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Navigation = {\n  update() {\n    // Update Navigation Buttons\n    const swiper = this;\n    const params = swiper.params.navigation;\n\n    if (swiper.params.loop) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n\n    let $nextEl;\n    let $prevEl;\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.nextEl === 'string'\n        && $nextEl.length > 1\n        && swiper.$el.find(params.nextEl).length === 1\n      ) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.prevEl === 'string'\n        && $prevEl.length > 1\n        && swiper.$el.find(params.prevEl).length === 1\n      ) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    Utils.extend(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const { $nextEl, $prevEl } = swiper.navigation;\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  },\n};\n\nexport default {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      navigation: {\n        init: Navigation.init.bind(swiper),\n        update: Navigation.update.bind(swiper),\n        destroy: Navigation.destroy.bind(swiper),\n        onNextClick: Navigation.onNextClick.bind(swiper),\n        onPrevClick: Navigation.onPrevClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    fromEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.navigation.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      const { $nextEl, $prevEl } = swiper.navigation;\n      if (\n        swiper.params.navigation.hideOnClick\n        && !$(e.target).is($prevEl)\n        && !$(e.target).is($nextEl)\n      ) {\n        let isHidden;\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n        if (isHidden === true) {\n          swiper.emit('navigationShow', swiper);\n        } else {\n          swiper.emit('navigationHide', swiper);\n        }\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Pagination = {\n  update() {\n    // Render || Update Pagination bullets/items\n    const swiper = this;\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    // Current/Total\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n        current -= (slidesLength - (swiper.loopedSlides * 2));\n      }\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n      if ($el.length > 1) {\n        bullets.each((index, bullet) => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n            if (bulletIndex === firstIndex) {\n              $bullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n            }\n            if (bulletIndex === lastIndex) {\n              $bullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n              $lastDisplayedBullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          } else {\n            $firstDisplayedBullet\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev`)\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev-prev`);\n            $lastDisplayedBullet\n              .next()\n              .addClass(`${params.bulletActiveClass}-next`)\n              .next()\n              .addClass(`${params.bulletActiveClass}-next-next`);\n          }\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n    if (params.type === 'fraction') {\n      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n    }\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', swiper, $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', swiper, $el[0]);\n    }\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render() {\n    // Render Container\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>`\n        + ' / '\n        + `<span class=\"${params.totalClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (\n      swiper.params.uniqueNavElements\n      && typeof params.el === 'string'\n      && $el.length > 1\n      && swiper.$el.find(params.el).length === 1\n    ) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      swiper.pagination.dynamicBulletIndex = 0;\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n        e.preventDefault();\n        let index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    Utils.extend(swiper.pagination, {\n      $el,\n      el: $el[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const $el = swiper.pagination.$el;\n\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n    if (params.clickable) {\n      $el.off('click', `.${params.bulletClass}`);\n    }\n  },\n};\n\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: (number) => number,\n      formatFractionTotal: (number) => number,\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-', // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable', // NEW\n      lockClass: 'swiper-pagination-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      pagination: {\n        init: Pagination.init.bind(swiper),\n        render: Pagination.render.bind(swiper),\n        update: Pagination.update.bind(swiper),\n        destroy: Pagination.destroy.bind(swiper),\n        dynamicBulletIndex: 0,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.pagination.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      if (\n        swiper.params.pagination.el\n        && swiper.params.pagination.hideOnClick\n        && swiper.pagination.$el.length > 0\n        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n      ) {\n        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n        if (isHidden === true) {\n          swiper.emit('paginationShow', swiper);\n        } else {\n          swiper.emit('paginationHide', swiper);\n        }\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    },\n  },\n};\n","import { document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Scrollbar = {\n  setTranslate() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n    const {\n      dragSize, trackSize, $dragEl, $el,\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n      $dragEl[0].style.width = `${newSize}px`;\n    } else {\n      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n      $dragEl[0].style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(() => {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n    const { scrollbar } = swiper;\n    const { $dragEl, $el } = scrollbar;\n\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n    const divider = swiper.size / swiper.virtualSize;\n    const moveDivider = divider * (trackSize / swiper.size);\n    let dragSize;\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = `${dragSize}px`;\n    } else {\n      $dragEl[0].style.height = `${dragSize}px`;\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n    Utils.extend(scrollbar, {\n      trackSize,\n      divider,\n      moveDivider,\n      dragSize,\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition(e) {\n    const swiper = this;\n    if (swiper.isHorizontal()) {\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n    }\n    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n  },\n  setDragPosition(e) {\n    const swiper = this;\n    const { scrollbar, rtlTranslate: rtl } = swiper;\n    const {\n      $el,\n      dragSize,\n      trackSize,\n      dragStartPos,\n    } = scrollbar;\n\n    let positionRatio;\n    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart(e) {\n    const swiper = this;\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n\n    clearTimeout(swiper.scrollbar.dragTimeout);\n\n    $el.transition(0);\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove(e) {\n    const swiper = this;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd(e) {\n    const swiper = this;\n\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n    swiper.emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const { scrollbar, $el: $swiperEl } = swiper;\n    const params = swiper.params.scrollbar;\n\n    let $el = $(params.el);\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n      $el = $swiperEl.find(params.el);\n    }\n\n    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n    if ($dragEl.length === 0) {\n      $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n      $el.append($dragEl);\n    }\n\n    Utils.extend(scrollbar, {\n      $el,\n      el: $el[0],\n      $dragEl,\n      dragEl: $dragEl[0],\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy() {\n    const swiper = this;\n    swiper.scrollbar.disableDraggable();\n  },\n};\n\nexport default {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      scrollbar: {\n        init: Scrollbar.init.bind(swiper),\n        destroy: Scrollbar.destroy.bind(swiper),\n        updateSize: Scrollbar.updateSize.bind(swiper),\n        setTranslate: Scrollbar.setTranslate.bind(swiper),\n        setTransition: Scrollbar.setTransition.bind(swiper),\n        enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n        disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n        setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n        onDragStart: Scrollbar.onDragStart.bind(swiper),\n        onDragMove: Scrollbar.onDragMove.bind(swiper),\n        onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    resize() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate() {\n      const swiper = this;\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy() {\n      const swiper = this;\n      swiper.scrollbar.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Parallax = {\n  setTransform(el, progress) {\n    const swiper = this;\n    const { rtl } = swiper;\n\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if ((x).indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if ((y).indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n      $el[0].style.opacity = currentOpacity;\n    }\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  },\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, slides, progress, snapGrid,\n    } = swiper;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, el) => {\n        swiper.parallax.setTransform(el, progress);\n      });\n    slides.each((slideIndex, slideEl) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each((index, el) => {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n    });\n  },\n  setTransition(duration = this.params.speed) {\n    const swiper = this;\n    const { $el } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, parallaxEl) => {\n        const $parallaxEl = $(parallaxEl);\n        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n        if (duration === 0) parallaxDuration = 0;\n        $parallaxEl.transition(parallaxDuration);\n      });\n  },\n};\n\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      parallax: {\n        setTransform: Parallax.setTransform.bind(swiper),\n        setTranslate: Parallax.setTranslate.bind(swiper),\n        setTransition: Parallax.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Device from '../../utils/device';\nimport Support from '../../utils/support';\n\nconst Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    const x1 = e.targetTouches[0].pageX;\n    const y1 = e.targetTouches[0].pageY;\n    const x2 = e.targetTouches[1].pageX;\n    const y2 = e.targetTouches[1].pageY;\n    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n    return distance;\n  },\n  // Events\n  onGestureStart(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n    if (!Support.gestures) {\n      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (Support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n    }\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n    }\n    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  onGestureEnd(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n        return;\n      }\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (image.isTouched) return;\n    if (Device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  },\n  onTouchMove(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    swiper.allowClick = false;\n    if (!image.isTouched || !gesture.$slideEl) return;\n\n    if (!image.isMoved) {\n      image.width = gesture.$imageEl[0].offsetWidth;\n      image.height = gesture.$imageEl[0].offsetHeight;\n      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n      gesture.$imageWrapEl.transition(0);\n      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (\n        swiper.isHorizontal()\n        && (\n          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      } if (\n        !swiper.isHorizontal()\n        && (\n          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n\n    image.isMoved = true;\n    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n\n    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTouchEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTransitionEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in(e) {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture, image } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left;\n      offsetY = gesture.$slideEl.offset().top;\n      diffX = (offsetX + (slideWidth / 2)) - touchX;\n      diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n\n      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  out() {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n    gesture.$slideEl = undefined;\n  },\n  // Attach/Detach Events\n  enable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n\n    swiper.zoom.enabled = false;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n};\n\nexport default {\n  name: 'zoom',\n  params: {\n    zoom: {\n      enabled: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed',\n    },\n  },\n  create() {\n    const swiper = this;\n    const zoom = {\n      enabled: false,\n      scale: 1,\n      currentScale: 1,\n      isScaling: false,\n      gesture: {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3,\n      },\n      image: {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {},\n      },\n      velocity: {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n      },\n    };\n\n    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n      zoom[methodName] = Zoom[methodName].bind(swiper);\n    });\n    Utils.extend(swiper, {\n      zoom,\n    });\n\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get() {\n        return scale;\n      },\n      set(value) {\n        if (scale !== value) {\n          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n        scale = value;\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.zoom.disable();\n    },\n    touchStart(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap(e) {\n      const swiper = this;\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Lazy = {\n  loadInSlide(index, loadInDuplicate = true) {\n    const swiper = this;\n    const params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n    const $slideEl = isVirtual\n      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n      : swiper.slides.eq(index);\n\n    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images = $images.add($slideEl[0]);\n    }\n    if ($images.length === 0) return;\n\n    $images.each((imageIndex, imageEl) => {\n      const $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n\n      const background = $imageEl.attr('data-background');\n      const src = $imageEl.attr('data-src');\n      const srcset = $imageEl.attr('data-srcset');\n      const sizes = $imageEl.attr('data-sizes');\n      const $pictureEl = $imageEl.parent('picture');\n\n      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n        if (background) {\n          $imageEl.css('background-image', `url(\"${background}\")`);\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n              const $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(`.${params.preloaderClass}`).remove();\n        if (swiper.params.loop && loadInDuplicate) {\n          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load() {\n    const swiper = this;\n    const {\n      $wrapperEl, params: swiperParams, slides, activeIndex,\n    } = swiper;\n    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    const params = swiperParams.lazy;\n\n    let slidesPerView = swiperParams.slidesPerView;\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n        const amount = params.loadPrevNextAmount;\n        const spv = slidesPerView;\n        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n        // Next Slides\n        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n        // Prev Slides\n        for (let i = minIndex; i < activeIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n};\n\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      lazy: {\n        initialImageLoaded: false,\n        load: Lazy.load.bind(swiper),\n        loadInSlide: Lazy.loadInSlide.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll() {\n      const swiper = this;\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    },\n  },\n};\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport Swiper from '../core/core-class';\nimport Utils from '../../utils/utils';\n\nconst Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    const binarySearch = (function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }());\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n    };\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction(c) {\n    const swiper = this;\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop\n        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate(setTranslate, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition(duration, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          Utils.nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        c.$wrapperEl.transitionEnd(() => {\n          if (!controlled) return;\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  },\n};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide', // or 'container'\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      controller: {\n        control: swiper.params.controller.control,\n        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n        setTranslate: Controller.setTranslate.bind(swiper),\n        setTransition: Controller.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    update() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate(translate, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition(duration, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst a11y = {\n  makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey(e) {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    const $targetEl = $(e.target);\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n      $targetEl[0].click();\n    }\n  },\n  notify(message) {\n    const swiper = this;\n    const notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation() {\n    const swiper = this;\n\n    if (swiper.params.loop || !swiper.navigation) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination() {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n        const $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init() {\n    const swiper = this;\n\n    swiper.$el.append(swiper.a11y.liveRegion);\n\n    // Navigation\n    const params = swiper.params.a11y;\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      a11y: {\n        liveRegion: $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`),\n      },\n    });\n    Object.keys(a11y).forEach((methodName) => {\n      swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nconst History = {\n  init() {\n    const swiper = this;\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    const history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues();\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState() {\n    const swiper = this;\n    swiper.history.paths = History.getPathValues();\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues() {\n    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');\n    const total = pathArray.length;\n    const key = pathArray[total - 2];\n    const value = pathArray[total - 1];\n    return { key, value };\n  },\n  setHistory(key, index) {\n    const swiper = this;\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    const slide = swiper.slides.eq(index);\n    let value = History.slugify(slide.attr('data-history'));\n    if (!window.location.pathname.includes(key)) {\n      value = `${key}/${value}`;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({ value }, null, value);\n    } else {\n      window.history.pushState({ value }, null, value);\n    }\n  },\n  slugify(text) {\n    return text.toString()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w-]+/g, '')\n      .replace(/--+/g, '-')\n      .replace(/^-+/, '')\n      .replace(/-+$/, '');\n  },\n  scrollToSlide(speed, value, runCallbacks) {\n    const swiper = this;\n    if (value) {\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHistory = History.slugify(slide.attr('data-history'));\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  },\n};\n\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      history: {\n        init: History.init.bind(swiper),\n        setHistory: History.setHistory.bind(swiper),\n        setHistoryPopState: History.setHistoryPopState.bind(swiper),\n        scrollToSlide: History.scrollToSlide.bind(swiper),\n        destroy: History.destroy.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst HashNavigation = {\n  onHashCange() {\n    const swiper = this;\n    swiper.emit('hashChange');\n    const newHash = document.location.hash.replace('#', '');\n    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n    if (newHash !== activeSlideHash) {\n      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash() {\n    const swiper = this;\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n      swiper.emit('hashSet');\n    } else {\n      const slide = swiper.slides.eq(swiper.activeIndex);\n      const hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n    swiper.hashNavigation.initialized = true;\n    const hash = document.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      hashNavigation: {\n        initialized: false,\n        init: HashNavigation.init.bind(swiper),\n        destroy: HashNavigation.destroy.bind(swiper),\n        setHash: HashNavigation.setHash.bind(swiper),\n        onHashCange: HashNavigation.onHashCange.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n  },\n};\n","/* eslint no-underscore-dangle: \"off\" */\nimport Utils from '../../utils/utils';\n\nconst Autoplay = {\n  run() {\n    const swiper = this;\n    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    let delay = swiper.params.autoplay.delay;\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = Utils.nextTick(() => {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start() {\n    const swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop() {\n    const swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause(speed) {\n    const swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n};\n\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      autoplay: {\n        running: false,\n        paused: false,\n        run: Autoplay.run.bind(swiper),\n        start: Autoplay.start.bind(swiper),\n        stop: Autoplay.stop.bind(swiper),\n        pause: Autoplay.pause.bind(swiper),\n        onVisibilityChange() {\n          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n            swiper.autoplay.pause();\n          }\n          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n            swiper.autoplay.run();\n            swiper.autoplay.paused = false;\n          }\n        },\n        onTransitionEnd(e) {\n          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n          swiper.autoplay.paused = false;\n          if (!swiper.autoplay.running) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.run();\n          }\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart(speed, internal) {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd() {\n      const swiper = this;\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\n\nconst Fade = {\n  setTranslate() {\n    const swiper = this;\n    const { slides } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade\n        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl\n        .css({\n          opacity: slideOpacity,\n        })\n        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, $wrapperEl } = swiper;\n    slides.transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      slides.transitionEnd(() => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      fadeEffect: {\n        setTranslate: Fade.setTranslate.bind(swiper),\n        setTransition: Fade.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Browser from '../../utils/browser';\n\nconst Cube = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n    } = swiper;\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let $cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n        $cubeShadowEl.css({ height: `${swiperWidth}px` });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + (round * 4 * swiperSize);\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = (3 * swiperSize) + (swiperSize * 4 * round);\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = (slideIndex * 90) + (progress * 90);\n        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n      }\n      $slideEl.transform(transform);\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n    $wrapperEl.css({\n      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      'transform-origin': `50% 50% -${swiperSize / 2}px`,\n    });\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n      } else {\n        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n        const multiplier = 1.5 - (\n          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n        );\n        const scale1 = params.shadowScale;\n        const scale2 = params.shadowScale / multiplier;\n        const offset = params.shadowOffset;\n        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n      }\n    }\n    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n    $wrapperEl\n      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { $el, slides } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  },\n};\n\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      cubeEffect: {\n        setTranslate: Cube.setTranslate.bind(swiper),\n        setTransition: Cube.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Flip = {\n  setTranslate() {\n    const swiper = this;\n    const { slides, rtlTranslate: rtl } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let progress = $slideEl[0].progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n      const offset = $slideEl[0].swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n      $slideEl\n        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, activeIndex, $wrapperEl } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      // eslint-disable-next-line\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      flipEffect: {\n        setTranslate: Flip.setTranslate.bind(swiper),\n        setTransition: Flip.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Support from '../../utils/support';\nimport Utils from '../../utils/utils';\n\nconst Coverflow = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n    } = swiper;\n    const params = swiper.params.coverflowEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const transform = swiper.translate;\n    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\n    const translate = params.depth;\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const $slideEl = slides.eq(i);\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = $slideEl[0].swiperSlideOffset;\n      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n      }\n      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n      if (params.slideShadows) {\n        // Set shadows\n        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append($shadowBeforeEl);\n        }\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append($shadowAfterEl);\n        }\n        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n      }\n    }\n\n    // Set correct perspective for IE10\n    if (Support.pointerEvents || Support.prefixedPointerEvents) {\n      const ws = $wrapperEl[0].style;\n      ws.perspectiveOrigin = `${center}px 50%`;\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    swiper.slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n  },\n};\n\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      modifier: 1,\n      slideShadows: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      coverflowEffect: {\n        setTranslate: Coverflow.setTranslate.bind(swiper),\n        setTransition: Coverflow.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n\n      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\nimport $ from '../../utils/dom';\n\nconst Thumbs = {\n  init() {\n    const swiper = this;\n    const { thumbs: thumbsParams } = swiper.params;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Utils.extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n      Utils.extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n    } else if (Utils.isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n  },\n  onThumbClick() {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      let currentIndex = swiper.activeIndex;\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix();\n        // eslint-disable-next-line\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n      else slideToIndex = prevIndex;\n    }\n    swiper.slideTo(slideToIndex);\n  },\n  update(initial) {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n      ? thumbsSwiper.slidesPerViewDynamic()\n      : thumbsSwiper.params.slidesPerView;\n\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      let currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix();\n          // eslint-disable-next-line\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        }\n        // Find actual thumbs index to slide to\n        const prevThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        const nextThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n        else newThumbsIndex = prevThumbsIndex;\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n      }\n    }\n  },\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      thumbs: {\n        swiper: null,\n        init: Thumbs.init.bind(swiper),\n        update: Thumbs.update.bind(swiper),\n        onThumbClick: Thumbs.onThumbClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      const { thumbs } = swiper.params;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy() {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    },\n  },\n};\n","// Swiper Class\nimport Swiper from './components/core/core-class';\n\n// Core Modules\nimport Device from './modules/device/device';\nimport Support from './modules/support/support';\nimport Browser from './modules/browser/browser';\nimport Resize from './modules/resize/resize';\nimport Observer from './modules/observer/observer';\n\n//IMPORT_COMPONENTS\n\nconst components = [\n  Device,\n  Support,\n  Browser,\n  Resize,\n  Observer,\n  //INSTALL_COMPONENTS\n];\n\nif (typeof Swiper.use === 'undefined') {\n  Swiper.use = Swiper.Class.use;\n  Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\n//EXPORT\n"],"names":["document","window","transitionEnd","transition","checkOverflow","Device","Support","Browser","Observer","Virtual"],"mappings":"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"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,14 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+function isObject(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function extend(e,t){void 0===e&&(e={}),void 0===t&&(t={}),Object.keys(t).forEach((function(s){void 0===e[s]?e[s]=t[s]:isObject(t[s])&&isObject(e[s])&&Object.keys(t[s]).length>0&&extend(e[s],t[s])}))}var doc="undefined"!=typeof document?document:{},ssrDocument={body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},createElementNS:function(){return{}},importNode:function(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};extend(doc,ssrDocument);var win="undefined"!=typeof window?window:{},ssrWindow={document:ssrDocument,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState:function(){},pushState:function(){},go:function(){},back:function(){}},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){},matchMedia:function(){return{}}};extend(win,ssrWindow);class Dom7{constructor(e){const t=this;for(let s=0;s<e.length;s+=1)t[s]=e[s];return t.length=e.length,this}}function $(e,t){const s=[];let i=0;if(e&&!t&&e instanceof Dom7)return e;if(e)if("string"==typeof e){let a,n;const r=e.trim();if(r.indexOf("<")>=0&&r.indexOf(">")>=0){let e="div";for(0===r.indexOf("<li")&&(e="ul"),0===r.indexOf("<tr")&&(e="tbody"),0!==r.indexOf("<td")&&0!==r.indexOf("<th")||(e="tr"),0===r.indexOf("<tbody")&&(e="table"),0===r.indexOf("<option")&&(e="select"),n=doc.createElement(e),n.innerHTML=r,i=0;i<n.childNodes.length;i+=1)s.push(n.childNodes[i])}else for(a=t||"#"!==e[0]||e.match(/[ .<>:~]/)?(t||doc).querySelectorAll(e.trim()):[doc.getElementById(e.trim().split("#")[1])],i=0;i<a.length;i+=1)a[i]&&s.push(a[i])}else if(e.nodeType||e===win||e===doc)s.push(e);else if(e.length>0&&e[0].nodeType)for(i=0;i<e.length;i+=1)s.push(e[i]);return new Dom7(s)}function unique(e){const t=[];for(let s=0;s<e.length;s+=1)-1===t.indexOf(e[s])&&t.push(e[s]);return t}function addClass(e){if(void 0===e)return this;const t=e.split(" ");for(let e=0;e<t.length;e+=1)for(let s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.add(t[e]);return this}function removeClass(e){const t=e.split(" ");for(let e=0;e<t.length;e+=1)for(let s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.remove(t[e]);return this}function hasClass(e){return!!this[0]&&this[0].classList.contains(e)}function toggleClass(e){const t=e.split(" ");for(let e=0;e<t.length;e+=1)for(let s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.toggle(t[e]);return this}function attr(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s<this.length;s+=1)if(2===arguments.length)this[s].setAttribute(e,t);else for(const t in e)this[s][t]=e[t],this[s].setAttribute(t,e[t]);return this}function removeAttr(e){for(let t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this}function data(e,t){let s;if(void 0!==t){for(let i=0;i<this.length;i+=1)s=this[i],s.dom7ElementDataStorage||(s.dom7ElementDataStorage={}),s.dom7ElementDataStorage[e]=t;return this}if(s=this[0],s){if(s.dom7ElementDataStorage&&e in s.dom7ElementDataStorage)return s.dom7ElementDataStorage[e];const t=s.getAttribute("data-"+e);return t||void 0}}function transform(e){for(let t=0;t<this.length;t+=1){const s=this[t].style;s.webkitTransform=e,s.transform=e}return this}function transition(e){"string"!=typeof e&&(e+="ms");for(let t=0;t<this.length;t+=1){const s=this[t].style;s.webkitTransitionDuration=e,s.transitionDuration=e}return this}function on(...e){let[t,s,i,a]=e;function n(e){const t=e.target;if(!t)return;const a=e.target.dom7EventData||[];if(a.indexOf(e)<0&&a.unshift(e),$(t).is(s))i.apply(t,a);else{const e=$(t).parents();for(let t=0;t<e.length;t+=1)$(e[t]).is(s)&&i.apply(e[t],a)}}function r(e){const t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),i.apply(this,t)}"function"==typeof e[1]&&([t,i,a]=e,s=void 0),a||(a=!1);const l=t.split(" ");let o;for(let e=0;e<this.length;e+=1){const t=this[e];if(s)for(o=0;o<l.length;o+=1){const e=l[o];t.dom7LiveListeners||(t.dom7LiveListeners={}),t.dom7LiveListeners[e]||(t.dom7LiveListeners[e]=[]),t.dom7LiveListeners[e].push({listener:i,proxyListener:n}),t.addEventListener(e,n,a)}else for(o=0;o<l.length;o+=1){const e=l[o];t.dom7Listeners||(t.dom7Listeners={}),t.dom7Listeners[e]||(t.dom7Listeners[e]=[]),t.dom7Listeners[e].push({listener:i,proxyListener:r}),t.addEventListener(e,r,a)}}return this}function off(...e){let[t,s,i,a]=e;"function"==typeof e[1]&&([t,i,a]=e,s=void 0),a||(a=!1);const n=t.split(" ");for(let e=0;e<n.length;e+=1){const t=n[e];for(let e=0;e<this.length;e+=1){const n=this[e];let r;if(!s&&n.dom7Listeners?r=n.dom7Listeners[t]:s&&n.dom7LiveListeners&&(r=n.dom7LiveListeners[t]),r&&r.length)for(let e=r.length-1;e>=0;e-=1){const s=r[e];i&&s.listener===i||i&&s.listener&&s.listener.dom7proxy&&s.listener.dom7proxy===i?(n.removeEventListener(t,s.proxyListener,a),r.splice(e,1)):i||(n.removeEventListener(t,s.proxyListener,a),r.splice(e,1))}}}return this}function trigger(...e){const t=e[0].split(" "),s=e[1];for(let i=0;i<t.length;i+=1){const a=t[i];for(let t=0;t<this.length;t+=1){const i=this[t];let n;try{n=new win.CustomEvent(a,{detail:s,bubbles:!0,cancelable:!0})}catch(e){n=doc.createEvent("Event"),n.initEvent(a,!0,!0),n.detail=s}i.dom7EventData=e.filter((e,t)=>t>0),i.dispatchEvent(n),i.dom7EventData=[],delete i.dom7EventData}}return this}function transitionEnd(e){const t=["webkitTransitionEnd","transitionend"],s=this;let i;function a(n){if(n.target===this)for(e.call(this,n),i=0;i<t.length;i+=1)s.off(t[i],a)}if(e)for(i=0;i<t.length;i+=1)s.on(t[i],a);return this}function outerWidth(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null}function outerHeight(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null}function offset(){if(this.length>0){const e=this[0],t=e.getBoundingClientRect(),s=doc.body,i=e.clientTop||s.clientTop||0,a=e.clientLeft||s.clientLeft||0,n=e===win?win.scrollY:e.scrollTop,r=e===win?win.scrollX:e.scrollLeft;return{top:t.top+n-i,left:t.left+r-a}}return null}function styles(){return this[0]?win.getComputedStyle(this[0],null):{}}function css(e,t){let s;if(1===arguments.length){if("string"!=typeof e){for(s=0;s<this.length;s+=1)for(let t in e)this[s].style[t]=e[t];return this}if(this[0])return win.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=t;return this}return this}function each(e){if(!e)return this;for(let t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this}function filter(e){const t=[],s=this;for(let i=0;i<s.length;i+=1)e.call(s[i],i,s[i])&&t.push(s[i]);return new Dom7(t)}function html(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(let t=0;t<this.length;t+=1)this[t].innerHTML=e;return this}function text(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(let t=0;t<this.length;t+=1)this[t].textContent=e;return this}function is(e){const t=this[0];let s,i;if(!t||void 0===e)return!1;if("string"==typeof e){if(t.matches)return t.matches(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);for(s=$(e),i=0;i<s.length;i+=1)if(s[i]===t)return!0;return!1}if(e===doc)return t===doc;if(e===win)return t===win;if(e.nodeType||e instanceof Dom7){for(s=e.nodeType?[e]:e,i=0;i<s.length;i+=1)if(s[i]===t)return!0;return!1}return!1}function index(){let e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}}function eq(e){if(void 0===e)return this;const t=this.length;let s;return e>t-1?new Dom7([]):e<0?(s=t+e,new Dom7(s<0?[]:[this[s]])):new Dom7([this[e]])}function append(...e){let t;for(let s=0;s<e.length;s+=1){t=e[s];for(let e=0;e<this.length;e+=1)if("string"==typeof t){const s=doc.createElement("div");for(s.innerHTML=t;s.firstChild;)this[e].appendChild(s.firstChild)}else if(t instanceof Dom7)for(let s=0;s<t.length;s+=1)this[e].appendChild(t[s]);else this[e].appendChild(t)}return this}function prepend(e){let t,s;for(t=0;t<this.length;t+=1)if("string"==typeof e){const i=doc.createElement("div");for(i.innerHTML=e,s=i.childNodes.length-1;s>=0;s-=1)this[t].insertBefore(i.childNodes[s],this[t].childNodes[0])}else if(e instanceof Dom7)for(s=0;s<e.length;s+=1)this[t].insertBefore(e[s],this[t].childNodes[0]);else this[t].insertBefore(e,this[t].childNodes[0]);return this}function next(e){return this.length>0?e?this[0].nextElementSibling&&$(this[0].nextElementSibling).is(e)?new Dom7([this[0].nextElementSibling]):new Dom7([]):this[0].nextElementSibling?new Dom7([this[0].nextElementSibling]):new Dom7([]):new Dom7([])}function nextAll(e){const t=[];let s=this[0];if(!s)return new Dom7([]);for(;s.nextElementSibling;){const i=s.nextElementSibling;e?$(i).is(e)&&t.push(i):t.push(i),s=i}return new Dom7(t)}function prev(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&$(t.previousElementSibling).is(e)?new Dom7([t.previousElementSibling]):new Dom7([]):t.previousElementSibling?new Dom7([t.previousElementSibling]):new Dom7([])}return new Dom7([])}function prevAll(e){const t=[];let s=this[0];if(!s)return new Dom7([]);for(;s.previousElementSibling;){const i=s.previousElementSibling;e?$(i).is(e)&&t.push(i):t.push(i),s=i}return new Dom7(t)}function parent(e){const t=[];for(let s=0;s<this.length;s+=1)null!==this[s].parentNode&&(e?$(this[s].parentNode).is(e)&&t.push(this[s].parentNode):t.push(this[s].parentNode));return $(unique(t))}function parents(e){const t=[];for(let s=0;s<this.length;s+=1){let i=this[s].parentNode;for(;i;)e?$(i).is(e)&&t.push(i):t.push(i),i=i.parentNode}return $(unique(t))}function closest(e){let t=this;return void 0===e?new Dom7([]):(t.is(e)||(t=t.parents(e).eq(0)),t)}function find(e){const t=[];for(let s=0;s<this.length;s+=1){const i=this[s].querySelectorAll(e);for(let e=0;e<i.length;e+=1)t.push(i[e])}return new Dom7(t)}function children(e){const t=[];for(let s=0;s<this.length;s+=1){const i=this[s].childNodes;for(let s=0;s<i.length;s+=1)e?1===i[s].nodeType&&$(i[s]).is(e)&&t.push(i[s]):1===i[s].nodeType&&t.push(i[s])}return new Dom7(unique(t))}function remove(){for(let e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}function add(...e){const t=this;let s,i;for(s=0;s<e.length;s+=1){const a=$(e[s]);for(i=0;i<a.length;i+=1)t[t.length]=a[i],t.length+=1}return t}$.fn=Dom7.prototype,$.Class=Dom7,$.Dom7=Dom7;const Methods={addClass:addClass,removeClass:removeClass,hasClass:hasClass,toggleClass:toggleClass,attr:attr,removeAttr:removeAttr,data:data,transform:transform,transition:transition,on:on,off:off,trigger:trigger,transitionEnd:transitionEnd,outerWidth:outerWidth,outerHeight:outerHeight,offset:offset,css:css,each:each,html:html,text:text,is:is,index:index,eq:eq,append:append,prepend:prepend,next:next,nextAll:nextAll,prev:prev,prevAll:prevAll,parent:parent,parents:parents,closest:closest,find:find,children:children,filter:filter,remove:remove,add:add,styles:styles};Object.keys(Methods).forEach(e=>{$.fn[e]=$.fn[e]||Methods[e]});const Utils={deleteProps(e){const t=e;Object.keys(t).forEach(e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:(e,t=0)=>setTimeout(e,t),now:()=>Date.now(),getTranslate(e,t="x"){let s,i,a;const n=win.getComputedStyle(e,null);return win.WebKitCSSMatrix?(i=n.transform||n.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map(e=>e.replace(",",".")).join(", ")),a=new win.WebKitCSSMatrix("none"===i?"":i)):(a=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),s=a.toString().split(",")),"x"===t&&(i=win.WebKitCSSMatrix?a.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),"y"===t&&(i=win.WebKitCSSMatrix?a.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),i||0},parseUrlQuery(e){const t={};let s,i,a,n,r=e||win.location.href;if("string"==typeof r&&r.length)for(r=r.indexOf("?")>-1?r.replace(/\S*\?/,""):"",i=r.split("&").filter(e=>""!==e),n=i.length,s=0;s<n;s+=1)a=i[s].replace(/#\S+/g,"").split("="),t[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||"";return t},isObject:e=>"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object,extend(...e){const t=Object(e[0]);for(let s=1;s<e.length;s+=1){const i=e[s];if(null!=i){const e=Object.keys(Object(i));for(let s=0,a=e.length;s<a;s+=1){const a=e[s],n=Object.getOwnPropertyDescriptor(i,a);void 0!==n&&n.enumerable&&(Utils.isObject(t[a])&&Utils.isObject(i[a])?Utils.extend(t[a],i[a]):!Utils.isObject(t[a])&&Utils.isObject(i[a])?(t[a]={},Utils.extend(t[a],i[a])):t[a]=i[a])}}}return t}},Support={touch:!!("ontouchstart"in win||win.DocumentTouch&&doc instanceof win.DocumentTouch),pointerEvents:!!win.PointerEvent&&"maxTouchPoints"in win.navigator&&win.navigator.maxTouchPoints>=0,observer:"MutationObserver"in win||"WebkitMutationObserver"in win,passiveListener:function(){let e=!1;try{const t=Object.defineProperty({},"passive",{get(){e=!0}});win.addEventListener("testPassiveListener",null,t)}catch(e){}return e}(),gestures:"ongesturestart"in win};class SwiperClass{constructor(e={}){const t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(e=>{t.on(e,t.params.on[e])})}on(e,t,s){const i=this;if("function"!=typeof t)return i;const a=s?"unshift":"push";return e.split(" ").forEach(e=>{i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e][a](t)}),i}once(e,t,s){const i=this;if("function"!=typeof t)return i;function a(...s){i.off(e,a),a.f7proxy&&delete a.f7proxy,t.apply(i,s)}return a.f7proxy=t,i.on(e,a,s)}off(e,t){const s=this;return s.eventsListeners?(e.split(" ").forEach(e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].length&&s.eventsListeners[e].forEach((i,a)=>{(i===t||i.f7proxy&&i.f7proxy===t)&&s.eventsListeners[e].splice(a,1)})}),s):s}emit(...e){const t=this;if(!t.eventsListeners)return t;let s,i,a;return"string"==typeof e[0]||Array.isArray(e[0])?(s=e[0],i=e.slice(1,e.length),a=t):(s=e[0].events,i=e[0].data,a=e[0].context||t),(Array.isArray(s)?s:s.split(" ")).forEach(e=>{if(t.eventsListeners&&t.eventsListeners[e]){const s=[];t.eventsListeners[e].forEach(e=>{s.push(e)}),s.forEach(e=>{e.apply(a,i)})}}),t}useModulesParams(e){const t=this;t.modules&&Object.keys(t.modules).forEach(s=>{const i=t.modules[s];i.params&&Utils.extend(e,i.params)})}useModules(e={}){const t=this;t.modules&&Object.keys(t.modules).forEach(s=>{const i=t.modules[s],a=e[s]||{};i.instance&&Object.keys(i.instance).forEach(e=>{const s=i.instance[e];t[e]="function"==typeof s?s.bind(t):s}),i.on&&t.on&&Object.keys(i.on).forEach(e=>{t.on(e,i.on[e])}),i.create&&i.create.bind(t)(a)})}static set components(e){this.use&&this.use(e)}static installModule(e,...t){const s=this;s.prototype.modules||(s.prototype.modules={});const i=e.name||`${Object.keys(s.prototype.modules).length}_${Utils.now()}`;return s.prototype.modules[i]=e,e.proto&&Object.keys(e.proto).forEach(t=>{s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(t=>{s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s}static use(e,...t){const s=this;return Array.isArray(e)?(e.forEach(e=>s.installModule(e)),s):s.installModule(e,...t)}}function updateSize(){const e=this;let t,s;const i=e.$el;t=void 0!==e.params.width?e.params.width:i[0].clientWidth,s=void 0!==e.params.height?e.params.height:i[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),s=s-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),Utils.extend(e,{width:t,height:s,size:e.isHorizontal()?t:s}))}function updateSlides(){const e=this,t=e.params,{$wrapperEl:s,size:i,rtlTranslate:a,wrongRTL:n}=e,r=e.virtual&&t.virtual.enabled,l=r?e.virtual.slides.length:e.slides.length,o=s.children("."+e.params.slideClass),d=r?e.virtual.slides.length:o.length;let p=[];const c=[],h=[];function u(e){return!t.cssMode||e!==o.length-1}let m=t.slidesOffsetBefore;"function"==typeof m&&(m=t.slidesOffsetBefore.call(e));let f=t.slidesOffsetAfter;"function"==typeof f&&(f=t.slidesOffsetAfter.call(e));const g=e.snapGrid.length,v=e.snapGrid.length;let w,b,y=t.spaceBetween,x=-m,S=0,T=0;if(void 0===i)return;"string"==typeof y&&y.indexOf("%")>=0&&(y=parseFloat(y.replace("%",""))/100*i),e.virtualSize=-y,a?o.css({marginLeft:"",marginTop:""}):o.css({marginRight:"",marginBottom:""}),t.slidesPerColumn>1&&(w=Math.floor(d/t.slidesPerColumn)===d/e.params.slidesPerColumn?d:Math.ceil(d/t.slidesPerColumn)*t.slidesPerColumn,"auto"!==t.slidesPerView&&"row"===t.slidesPerColumnFill&&(w=Math.max(w,t.slidesPerView*t.slidesPerColumn)));const E=t.slidesPerColumn,C=w/E,$=Math.floor(d/t.slidesPerColumn);for(let s=0;s<d;s+=1){b=0;const a=o.eq(s);if(t.slidesPerColumn>1){let i,n,r;if("row"===t.slidesPerColumnFill&&t.slidesPerGroup>1){const e=Math.floor(s/(t.slidesPerGroup*t.slidesPerColumn)),l=s-t.slidesPerColumn*t.slidesPerGroup*e,o=0===e?t.slidesPerGroup:Math.min(Math.ceil((d-e*E*t.slidesPerGroup)/E),t.slidesPerGroup);r=Math.floor(l/o),n=l-r*o+e*t.slidesPerGroup,i=n+r*w/E,a.css({"-webkit-box-ordinal-group":i,"-moz-box-ordinal-group":i,"-ms-flex-order":i,"-webkit-order":i,order:i})}else"column"===t.slidesPerColumnFill?(n=Math.floor(s/E),r=s-n*E,(n>$||n===$&&r===E-1)&&(r+=1,r>=E&&(r=0,n+=1))):(r=Math.floor(s/C),n=s-r*C);a.css("margin-"+(e.isHorizontal()?"top":"left"),0!==r&&t.spaceBetween&&t.spaceBetween+"px")}if("none"!==a.css("display")){if("auto"===t.slidesPerView){const s=win.getComputedStyle(a[0],null),i=a[0].style.transform,n=a[0].style.webkitTransform;if(i&&(a[0].style.transform="none"),n&&(a[0].style.webkitTransform="none"),t.roundLengths)b=e.isHorizontal()?a.outerWidth(!0):a.outerHeight(!0);else if(e.isHorizontal()){const e=parseFloat(s.getPropertyValue("width")),t=parseFloat(s.getPropertyValue("padding-left")),i=parseFloat(s.getPropertyValue("padding-right")),a=parseFloat(s.getPropertyValue("margin-left")),n=parseFloat(s.getPropertyValue("margin-right")),r=s.getPropertyValue("box-sizing");b=r&&"border-box"===r?e+a+n:e+t+i+a+n}else{const e=parseFloat(s.getPropertyValue("height")),t=parseFloat(s.getPropertyValue("padding-top")),i=parseFloat(s.getPropertyValue("padding-bottom")),a=parseFloat(s.getPropertyValue("margin-top")),n=parseFloat(s.getPropertyValue("margin-bottom")),r=s.getPropertyValue("box-sizing");b=r&&"border-box"===r?e+a+n:e+t+i+a+n}i&&(a[0].style.transform=i),n&&(a[0].style.webkitTransform=n),t.roundLengths&&(b=Math.floor(b))}else b=(i-(t.slidesPerView-1)*y)/t.slidesPerView,t.roundLengths&&(b=Math.floor(b)),o[s]&&(e.isHorizontal()?o[s].style.width=b+"px":o[s].style.height=b+"px");o[s]&&(o[s].swiperSlideSize=b),h.push(b),t.centeredSlides?(x=x+b/2+S/2+y,0===S&&0!==s&&(x=x-i/2-y),0===s&&(x=x-i/2-y),Math.abs(x)<.001&&(x=0),t.roundLengths&&(x=Math.floor(x)),T%t.slidesPerGroup==0&&p.push(x),c.push(x)):(t.roundLengths&&(x=Math.floor(x)),(T-Math.min(e.params.slidesPerGroupSkip,T))%e.params.slidesPerGroup==0&&p.push(x),c.push(x),x=x+b+y),e.virtualSize+=b+y,S=b,T+=1}}let M;if(e.virtualSize=Math.max(e.virtualSize,i)+f,a&&n&&("slide"===t.effect||"coverflow"===t.effect)&&s.css({width:e.virtualSize+t.spaceBetween+"px"}),t.setWrapperSize&&(e.isHorizontal()?s.css({width:e.virtualSize+t.spaceBetween+"px"}):s.css({height:e.virtualSize+t.spaceBetween+"px"})),t.slidesPerColumn>1&&(e.virtualSize=(b+t.spaceBetween)*w,e.virtualSize=Math.ceil(e.virtualSize/t.slidesPerColumn)-t.spaceBetween,e.isHorizontal()?s.css({width:e.virtualSize+t.spaceBetween+"px"}):s.css({height:e.virtualSize+t.spaceBetween+"px"}),t.centeredSlides)){M=[];for(let s=0;s<p.length;s+=1){let i=p[s];t.roundLengths&&(i=Math.floor(i)),p[s]<e.virtualSize+p[0]&&M.push(i)}p=M}if(!t.centeredSlides){M=[];for(let s=0;s<p.length;s+=1){let a=p[s];t.roundLengths&&(a=Math.floor(a)),p[s]<=e.virtualSize-i&&M.push(a)}p=M,Math.floor(e.virtualSize-i)-Math.floor(p[p.length-1])>1&&p.push(e.virtualSize-i)}if(0===p.length&&(p=[0]),0!==t.spaceBetween&&(e.isHorizontal()?a?o.filter(u).css({marginLeft:y+"px"}):o.filter(u).css({marginRight:y+"px"}):o.filter(u).css({marginBottom:y+"px"})),t.centeredSlides&&t.centeredSlidesBounds){let e=0;h.forEach(s=>{e+=s+(t.spaceBetween?t.spaceBetween:0)}),e-=t.spaceBetween;const s=e-i;p=p.map(e=>e<0?-m:e>s?s+f:e)}if(t.centerInsufficientSlides){let e=0;if(h.forEach(s=>{e+=s+(t.spaceBetween?t.spaceBetween:0)}),e-=t.spaceBetween,e<i){const t=(i-e)/2;p.forEach((e,s)=>{p[s]=e-t}),c.forEach((e,s)=>{c[s]=e+t})}}Utils.extend(e,{slides:o,snapGrid:p,slidesGrid:c,slidesSizesGrid:h}),d!==l&&e.emit("slidesLengthChange"),p.length!==g&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),c.length!==v&&e.emit("slidesGridLengthChange"),(t.watchSlidesProgress||t.watchSlidesVisibility)&&e.updateSlidesOffset()}function updateAutoHeight(e){const t=this,s=[];let i,a=0;if("number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed),"auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)t.visibleSlides.each((e,t)=>{s.push(t)});else for(i=0;i<Math.ceil(t.params.slidesPerView);i+=1){const e=t.activeIndex+i;if(e>t.slides.length)break;s.push(t.slides.eq(e)[0])}else s.push(t.slides.eq(t.activeIndex)[0]);for(i=0;i<s.length;i+=1)if(void 0!==s[i]){const e=s[i].offsetHeight;a=e>a?e:a}a&&t.$wrapperEl.css("height",a+"px")}function updateSlidesOffset(){const e=this,t=e.slides;for(let s=0;s<t.length;s+=1)t[s].swiperSlideOffset=e.isHorizontal()?t[s].offsetLeft:t[s].offsetTop}function updateSlidesProgress(e=this&&this.translate||0){const t=this,s=t.params,{slides:i,rtlTranslate:a}=t;if(0===i.length)return;void 0===i[0].swiperSlideOffset&&t.updateSlidesOffset();let n=-e;a&&(n=e),i.removeClass(s.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(let e=0;e<i.length;e+=1){const r=i[e],l=(n+(s.centeredSlides?t.minTranslate():0)-r.swiperSlideOffset)/(r.swiperSlideSize+s.spaceBetween);if(s.watchSlidesVisibility||s.centeredSlides&&s.autoHeight){const a=-(n-r.swiperSlideOffset),l=a+t.slidesSizesGrid[e];(a>=0&&a<t.size-1||l>1&&l<=t.size||a<=0&&l>=t.size)&&(t.visibleSlides.push(r),t.visibleSlidesIndexes.push(e),i.eq(e).addClass(s.slideVisibleClass))}r.progress=a?-l:l}t.visibleSlides=$(t.visibleSlides)}function updateProgress(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,i=t.maxTranslate()-t.minTranslate();let{progress:a,isBeginning:n,isEnd:r}=t;const l=n,o=r;0===i?(a=0,n=!0,r=!0):(a=(e-t.minTranslate())/i,n=a<=0,r=a>=1),Utils.extend(t,{progress:a,isBeginning:n,isEnd:r}),(s.watchSlidesProgress||s.watchSlidesVisibility||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),n&&!l&&t.emit("reachBeginning toEdge"),r&&!o&&t.emit("reachEnd toEdge"),(l&&!n||o&&!r)&&t.emit("fromEdge"),t.emit("progress",a)}function updateSlidesClasses(){const e=this,{slides:t,params:s,$wrapperEl:i,activeIndex:a,realIndex:n}=e,r=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=r?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${a}"]`):t.eq(a),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?i.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${n}"]`).addClass(s.slideDuplicateActiveClass):i.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${n}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll("."+s.slideClass).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll("."+s.slideClass).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?i.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):i.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?i.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):i.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass))}function updateActiveIndex(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:i,snapGrid:a,params:n,activeIndex:r,realIndex:l,snapIndex:o}=t;let d,p=e;if(void 0===p){for(let e=0;e<i.length;e+=1)void 0!==i[e+1]?s>=i[e]&&s<i[e+1]-(i[e+1]-i[e])/2?p=e:s>=i[e]&&s<i[e+1]&&(p=e+1):s>=i[e]&&(p=e);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if(a.indexOf(s)>=0)d=a.indexOf(s);else{const e=Math.min(n.slidesPerGroupSkip,p);d=e+Math.floor((p-e)/n.slidesPerGroup)}if(d>=a.length&&(d=a.length-1),p===r)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const c=parseInt(t.slides.eq(p).attr("data-swiper-slide-index")||p,10);Utils.extend(t,{snapIndex:d,realIndex:c,previousIndex:r,activeIndex:p}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==c&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")}function updateClickedSlide(e){const t=this,s=t.params,i=$(e.target).closest("."+s.slideClass)[0];let a=!1;if(i)for(let e=0;e<t.slides.length;e+=1)t.slides[e]===i&&(a=!0);if(!i||!a)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=i,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt($(i).attr("data-swiper-slide-index"),10):t.clickedIndex=$(i).index(),s.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}var update={updateSize:updateSize,updateSlides:updateSlides,updateAutoHeight:updateAutoHeight,updateSlidesOffset:updateSlidesOffset,updateSlidesProgress:updateSlidesProgress,updateProgress:updateProgress,updateSlidesClasses:updateSlidesClasses,updateActiveIndex:updateActiveIndex,updateClickedSlide:updateClickedSlide};function getTranslate(e=(this.isHorizontal()?"x":"y")){const{params:t,rtlTranslate:s,translate:i,$wrapperEl:a}=this;if(t.virtualTranslate)return s?-i:i;if(t.cssMode)return i;let n=Utils.getTranslate(a[0],e);return s&&(n=-n),n||0}function setTranslate(e,t){const s=this,{rtlTranslate:i,params:a,$wrapperEl:n,wrapperEl:r,progress:l}=s;let o=0,d=0;let p;s.isHorizontal()?o=i?-e:e:d=e,a.roundLengths&&(o=Math.floor(o),d=Math.floor(d)),a.cssMode?r[s.isHorizontal()?"scrollLeft":"scrollTop"]=s.isHorizontal()?-o:-d:a.virtualTranslate||n.transform(`translate3d(${o}px, ${d}px, 0px)`),s.previousTranslate=s.translate,s.translate=s.isHorizontal()?o:d;const c=s.maxTranslate()-s.minTranslate();p=0===c?0:(e-s.minTranslate())/c,p!==l&&s.updateProgress(e),s.emit("setTranslate",s.translate,t)}function minTranslate(){return-this.snapGrid[0]}function maxTranslate(){return-this.snapGrid[this.snapGrid.length-1]}function translateTo(e=0,t=this.params.speed,s=!0,i=!0,a){const n=this,{params:r,wrapperEl:l}=n;if(n.animating&&r.preventInteractionOnTransition)return!1;const o=n.minTranslate(),d=n.maxTranslate();let p;if(p=i&&e>o?o:i&&e<d?d:e,n.updateProgress(p),r.cssMode){const e=n.isHorizontal();return 0===t?l[e?"scrollLeft":"scrollTop"]=-p:l.scrollTo?l.scrollTo({[e?"left":"top"]:-p,behavior:"smooth"}):l[e?"scrollLeft":"scrollTop"]=-p,!0}return 0===t?(n.setTransition(0),n.setTranslate(p),s&&(n.emit("beforeTransitionStart",t,a),n.emit("transitionEnd"))):(n.setTransition(t),n.setTranslate(p),s&&(n.emit("beforeTransitionStart",t,a),n.emit("transitionStart")),n.animating||(n.animating=!0,n.onTranslateToWrapperTransitionEnd||(n.onTranslateToWrapperTransitionEnd=function(e){n&&!n.destroyed&&e.target===this&&(n.$wrapperEl[0].removeEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].removeEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd),n.onTranslateToWrapperTransitionEnd=null,delete n.onTranslateToWrapperTransitionEnd,s&&n.emit("transitionEnd"))}),n.$wrapperEl[0].addEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].addEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd))),!0}var translate={getTranslate:getTranslate,setTranslate:setTranslate,minTranslate:minTranslate,maxTranslate:maxTranslate,translateTo:translateTo};function setTransition(e,t){const s=this;s.params.cssMode||s.$wrapperEl.transition(e),s.emit("setTransition",e,t)}function transitionStart(e=!0,t){const s=this,{activeIndex:i,params:a,previousIndex:n}=s;if(a.cssMode)return;a.autoHeight&&s.updateAutoHeight();let r=t;if(r||(r=i>n?"next":i<n?"prev":"reset"),s.emit("transitionStart"),e&&i!==n){if("reset"===r)return void s.emit("slideResetTransitionStart");s.emit("slideChangeTransitionStart"),"next"===r?s.emit("slideNextTransitionStart"):s.emit("slidePrevTransitionStart")}}function transitionEnd$1(e=!0,t){const s=this,{activeIndex:i,previousIndex:a,params:n}=s;if(s.animating=!1,n.cssMode)return;s.setTransition(0);let r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),s.emit("transitionEnd"),e&&i!==a){if("reset"===r)return void s.emit("slideResetTransitionEnd");s.emit("slideChangeTransitionEnd"),"next"===r?s.emit("slideNextTransitionEnd"):s.emit("slidePrevTransitionEnd")}}var transition$1={setTransition:setTransition,transitionStart:transitionStart,transitionEnd:transitionEnd$1};function slideTo(e=0,t=this.params.speed,s=!0,i){const a=this;let n=e;n<0&&(n=0);const{params:r,snapGrid:l,slidesGrid:o,previousIndex:d,activeIndex:p,rtlTranslate:c,wrapperEl:h}=a;if(a.animating&&r.preventInteractionOnTransition)return!1;const u=Math.min(a.params.slidesPerGroupSkip,n);let m=u+Math.floor((n-u)/a.params.slidesPerGroup);m>=l.length&&(m=l.length-1),(p||r.initialSlide||0)===(d||0)&&s&&a.emit("beforeSlideChangeStart");const f=-l[m];if(a.updateProgress(f),r.normalizeSlideIndex)for(let e=0;e<o.length;e+=1)-Math.floor(100*f)>=Math.floor(100*o[e])&&(n=e);if(a.initialized&&n!==p){if(!a.allowSlideNext&&f<a.translate&&f<a.minTranslate())return!1;if(!a.allowSlidePrev&&f>a.translate&&f>a.maxTranslate()&&(p||0)!==n)return!1}let g;if(g=n>p?"next":n<p?"prev":"reset",c&&-f===a.translate||!c&&f===a.translate)return a.updateActiveIndex(n),r.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),"slide"!==r.effect&&a.setTranslate(f),"reset"!==g&&(a.transitionStart(s,g),a.transitionEnd(s,g)),!1;if(r.cssMode){const e=a.isHorizontal();let s=-f;return c&&(s=h.scrollWidth-h.offsetWidth-s),0===t?h[e?"scrollLeft":"scrollTop"]=s:h.scrollTo?h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"}):h[e?"scrollLeft":"scrollTop"]=s,!0}return 0===t?(a.setTransition(0),a.setTranslate(f),a.updateActiveIndex(n),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,i),a.transitionStart(s,g),a.transitionEnd(s,g)):(a.setTransition(t),a.setTranslate(f),a.updateActiveIndex(n),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,i),a.transitionStart(s,g),a.animating||(a.animating=!0,a.onSlideToWrapperTransitionEnd||(a.onSlideToWrapperTransitionEnd=function(e){a&&!a.destroyed&&e.target===this&&(a.$wrapperEl[0].removeEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].removeEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd),a.onSlideToWrapperTransitionEnd=null,delete a.onSlideToWrapperTransitionEnd,a.transitionEnd(s,g))}),a.$wrapperEl[0].addEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].addEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd))),!0}function slideToLoop(e=0,t=this.params.speed,s=!0,i){const a=this;let n=e;return a.params.loop&&(n+=a.loopedSlides),a.slideTo(n,t,s,i)}function slideNext(e=this.params.speed,t=!0,s){const i=this,{params:a,animating:n}=i,r=i.activeIndex<a.slidesPerGroupSkip?1:a.slidesPerGroup;if(a.loop){if(n)return!1;i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft}return i.slideTo(i.activeIndex+r,e,t,s)}function slidePrev(e=this.params.speed,t=!0,s){const i=this,{params:a,animating:n,snapGrid:r,slidesGrid:l,rtlTranslate:o}=i;if(a.loop){if(n)return!1;i.loopFix(),i._clientLeft=i.$wrapperEl[0].clientLeft}function d(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=d(o?i.translate:-i.translate),c=r.map(e=>d(e));l.map(e=>d(e)),r[c.indexOf(p)];let h,u=r[c.indexOf(p)-1];return void 0===u&&a.cssMode&&r.forEach(e=>{!u&&p>=e&&(u=e)}),void 0!==u&&(h=l.indexOf(u),h<0&&(h=i.activeIndex-1)),i.slideTo(h,e,t,s)}function slideReset(e=this.params.speed,t=!0,s){return this.slideTo(this.activeIndex,e,t,s)}function slideToClosest(e=this.params.speed,t=!0,s,i=.5){const a=this;let n=a.activeIndex;const r=Math.min(a.params.slidesPerGroupSkip,n),l=r+Math.floor((n-r)/a.params.slidesPerGroup),o=a.rtlTranslate?a.translate:-a.translate;if(o>=a.snapGrid[l]){const e=a.snapGrid[l];o-e>(a.snapGrid[l+1]-e)*i&&(n+=a.params.slidesPerGroup)}else{const e=a.snapGrid[l-1];o-e<=(a.snapGrid[l]-e)*i&&(n-=a.params.slidesPerGroup)}return n=Math.max(n,0),n=Math.min(n,a.slidesGrid.length-1),a.slideTo(n,e,t,s)}function slideToClickedSlide(){const e=this,{params:t,$wrapperEl:s}=e,i="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let a,n=e.clickedIndex;if(t.loop){if(e.animating)return;a=parseInt($(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?n<e.loopedSlides-i/2||n>e.slides.length-e.loopedSlides+i/2?(e.loopFix(),n=s.children(`.${t.slideClass}[data-swiper-slide-index="${a}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),Utils.nextTick(()=>{e.slideTo(n)})):e.slideTo(n):n>e.slides.length-i?(e.loopFix(),n=s.children(`.${t.slideClass}[data-swiper-slide-index="${a}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),Utils.nextTick(()=>{e.slideTo(n)})):e.slideTo(n)}else e.slideTo(n)}var slide={slideTo:slideTo,slideToLoop:slideToLoop,slideNext:slideNext,slidePrev:slidePrev,slideReset:slideReset,slideToClosest:slideToClosest,slideToClickedSlide:slideToClickedSlide};function loopCreate(){const e=this,{params:t,$wrapperEl:s}=e;s.children(`.${t.slideClass}.${t.slideDuplicateClass}`).remove();let i=s.children("."+t.slideClass);if(t.loopFillGroupWithBlank){const e=t.slidesPerGroup-i.length%t.slidesPerGroup;if(e!==t.slidesPerGroup){for(let i=0;i<e;i+=1){const e=$(doc.createElement("div")).addClass(`${t.slideClass} ${t.slideBlankClass}`);s.append(e)}i=s.children("."+t.slideClass)}}"auto"!==t.slidesPerView||t.loopedSlides||(t.loopedSlides=i.length),e.loopedSlides=Math.ceil(parseFloat(t.loopedSlides||t.slidesPerView,10)),e.loopedSlides+=t.loopAdditionalSlides,e.loopedSlides>i.length&&(e.loopedSlides=i.length);const a=[],n=[];i.each((t,s)=>{const r=$(s);t<e.loopedSlides&&n.push(s),t<i.length&&t>=i.length-e.loopedSlides&&a.push(s),r.attr("data-swiper-slide-index",t)});for(let e=0;e<n.length;e+=1)s.append($(n[e].cloneNode(!0)).addClass(t.slideDuplicateClass));for(let e=a.length-1;e>=0;e-=1)s.prepend($(a[e].cloneNode(!0)).addClass(t.slideDuplicateClass))}function loopFix(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:i,allowSlidePrev:a,allowSlideNext:n,snapGrid:r,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-r[t]-e.getTranslate();if(t<i){o=s.length-3*i+t,o+=i,e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}else if(t>=s.length-i){o=-s.length+t+i,o+=i,e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=a,e.allowSlideNext=n,e.emit("loopFix")}function loopDestroy(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}var loop={loopCreate:loopCreate,loopFix:loopFix,loopDestroy:loopDestroy};function setGrabCursor(e){if(Support.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked||this.params.cssMode)return;const t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}function unsetGrabCursor(){Support.touch||this.params.watchOverflow&&this.isLocked||this.params.cssMode||(this.el.style.cursor="")}var grabCursor={setGrabCursor:setGrabCursor,unsetGrabCursor:unsetGrabCursor};function appendSlide(e){const t=this,{$wrapperEl:s,params:i}=t;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.append(e[t]);else s.append(e);i.loop&&t.loopCreate(),i.observer&&Support.observer||t.update()}function prependSlide(e){const t=this,{params:s,$wrapperEl:i,activeIndex:a}=t;s.loop&&t.loopDestroy();let n=a+1;if("object"==typeof e&&"length"in e){for(let t=0;t<e.length;t+=1)e[t]&&i.prepend(e[t]);n=a+e.length}else i.prepend(e);s.loop&&t.loopCreate(),s.observer&&Support.observer||t.update(),t.slideTo(n,0,!1)}function addSlide(e,t){const s=this,{$wrapperEl:i,params:a,activeIndex:n}=s;let r=n;a.loop&&(r-=s.loopedSlides,s.loopDestroy(),s.slides=i.children("."+a.slideClass));const l=s.slides.length;if(e<=0)return void s.prependSlide(t);if(e>=l)return void s.appendSlide(t);let o=r>e?r+1:r;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;e<t.length;e+=1)t[e]&&i.append(t[e]);o=r>e?r+t.length:r}else i.append(t);for(let e=0;e<d.length;e+=1)i.append(d[e]);a.loop&&s.loopCreate(),a.observer&&Support.observer||s.update(),a.loop?s.slideTo(o+s.loopedSlides,0,!1):s.slideTo(o,0,!1)}function removeSlide(e){const t=this,{params:s,$wrapperEl:i,activeIndex:a}=t;let n=a;s.loop&&(n-=t.loopedSlides,t.loopDestroy(),t.slides=i.children("."+s.slideClass));let r,l=n;if("object"==typeof e&&"length"in e){for(let s=0;s<e.length;s+=1)r=e[s],t.slides[r]&&t.slides.eq(r).remove(),r<l&&(l-=1);l=Math.max(l,0)}else r=e,t.slides[r]&&t.slides.eq(r).remove(),r<l&&(l-=1),l=Math.max(l,0);s.loop&&t.loopCreate(),s.observer&&Support.observer||t.update(),s.loop?t.slideTo(l+t.loopedSlides,0,!1):t.slideTo(l,0,!1)}function removeAllSlides(){const e=this,t=[];for(let s=0;s<e.slides.length;s+=1)t.push(s);e.removeSlide(t)}var manipulation={appendSlide:appendSlide,prependSlide:prependSlide,addSlide:addSlide,removeSlide:removeSlide,removeAllSlides:removeAllSlides};const Device=function(){const e=win.navigator.platform,t=win.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,iphone:!1,ipod:!1,ipad:!1,edge:!1,ie:!1,firefox:!1,macos:!1,windows:!1,cordova:!(!win.cordova&&!win.phonegap),phonegap:!(!win.cordova&&!win.phonegap),electron:!1},i=win.screen.width,a=win.screen.height,n=t.match(/(Android);?[\s\/]+([\d.]+)?/);let r=t.match(/(iPad).*OS\s([\d_]+)/);const l=t.match(/(iPod)(.*OS\s([\d_]+))?/),o=!r&&t.match(/(iPhone\sOS|iOS)\s([\d_]+)/),d=t.indexOf("MSIE ")>=0||t.indexOf("Trident/")>=0,p=t.indexOf("Edge/")>=0,c=t.indexOf("Gecko/")>=0&&t.indexOf("Firefox/")>=0,h="Win32"===e,u=t.toLowerCase().indexOf("electron")>=0;let m="MacIntel"===e;return!r&&m&&Support.touch&&(1024===i&&1366===a||834===i&&1194===a||834===i&&1112===a||768===i&&1024===a)&&(r=t.match(/(Version)\/([\d.]+)/),m=!1),s.ie=d,s.edge=p,s.firefox=c,n&&!h&&(s.os="android",s.osVersion=n[2],s.android=!0,s.androidChrome=t.toLowerCase().indexOf("chrome")>=0),(r||o||l)&&(s.os="ios",s.ios=!0),o&&!l&&(s.osVersion=o[2].replace(/_/g,"."),s.iphone=!0),r&&(s.osVersion=r[2].replace(/_/g,"."),s.ipad=!0),l&&(s.osVersion=l[3]?l[3].replace(/_/g,"."):null,s.ipod=!0),s.ios&&s.osVersion&&t.indexOf("Version/")>=0&&"10"===s.osVersion.split(".")[0]&&(s.osVersion=t.toLowerCase().split("version/")[1].split(" ")[0]),s.webView=!(!(o||r||l)||!t.match(/.*AppleWebKit(?!.*Safari)/i)&&!win.navigator.standalone)||win.matchMedia&&win.matchMedia("(display-mode: standalone)").matches,s.webview=s.webView,s.standalone=s.webView,s.desktop=!(s.ios||s.android)||u,s.desktop&&(s.electron=u,s.macos=m,s.windows=h,s.macos&&(s.os="macos"),s.windows&&(s.os="windows")),s.pixelRatio=win.devicePixelRatio||1,s}();function onTouchStart(e){const t=this,s=t.touchEventsData,{params:i,touches:a}=t;if(t.animating&&i.preventInteractionOnTransition)return;let n=e;n.originalEvent&&(n=n.originalEvent);const r=$(n.target);if("wrapper"===i.touchEventsTarget&&!r.closest(t.wrapperEl).length)return;if(s.isTouchEvent="touchstart"===n.type,!s.isTouchEvent&&"which"in n&&3===n.which)return;if(!s.isTouchEvent&&"button"in n&&n.button>0)return;if(s.isTouched&&s.isMoved)return;if(i.noSwiping&&r.closest(i.noSwipingSelector?i.noSwipingSelector:"."+i.noSwipingClass)[0])return void(t.allowClick=!0);if(i.swipeHandler&&!r.closest(i.swipeHandler)[0])return;a.currentX="touchstart"===n.type?n.targetTouches[0].pageX:n.pageX,a.currentY="touchstart"===n.type?n.targetTouches[0].pageY:n.pageY;const l=a.currentX,o=a.currentY,d=i.edgeSwipeDetection||i.iOSEdgeSwipeDetection,p=i.edgeSwipeThreshold||i.iOSEdgeSwipeThreshold;if(!d||!(l<=p||l>=win.screen.width-p)){if(Utils.extend(s,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),a.startX=l,a.startY=o,s.touchStartTime=Utils.now(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,i.threshold>0&&(s.allowThresholdMove=!1),"touchstart"!==n.type){let e=!0;r.is(s.formElements)&&(e=!1),doc.activeElement&&$(doc.activeElement).is(s.formElements)&&doc.activeElement!==r[0]&&doc.activeElement.blur();const a=e&&t.allowTouchMove&&i.touchStartPreventDefault;(i.touchStartForcePreventDefault||a)&&n.preventDefault()}t.emit("touchStart",n)}}function onTouchMove(e){const t=this,s=t.touchEventsData,{params:i,touches:a,rtlTranslate:n}=t;let r=e;if(r.originalEvent&&(r=r.originalEvent),!s.isTouched)return void(s.startMoving&&s.isScrolling&&t.emit("touchMoveOpposite",r));if(s.isTouchEvent&&"touchmove"!==r.type)return;const l="touchmove"===r.type&&r.targetTouches&&(r.targetTouches[0]||r.changedTouches[0]),o="touchmove"===r.type?l.pageX:r.pageX,d="touchmove"===r.type?l.pageY:r.pageY;if(r.preventedByNestedSwiper)return a.startX=o,void(a.startY=d);if(!t.allowTouchMove)return t.allowClick=!1,void(s.isTouched&&(Utils.extend(a,{startX:o,startY:d,currentX:o,currentY:d}),s.touchStartTime=Utils.now()));if(s.isTouchEvent&&i.touchReleaseOnEdges&&!i.loop)if(t.isVertical()){if(d<a.startY&&t.translate<=t.maxTranslate()||d>a.startY&&t.translate>=t.minTranslate())return s.isTouched=!1,void(s.isMoved=!1)}else if(o<a.startX&&t.translate<=t.maxTranslate()||o>a.startX&&t.translate>=t.minTranslate())return;if(s.isTouchEvent&&doc.activeElement&&r.target===doc.activeElement&&$(r.target).is(s.formElements))return s.isMoved=!0,void(t.allowClick=!1);if(s.allowTouchCallbacks&&t.emit("touchMove",r),r.targetTouches&&r.targetTouches.length>1)return;a.currentX=o,a.currentY=d;const p=a.currentX-a.startX,c=a.currentY-a.startY;if(t.params.threshold&&Math.sqrt(p**2+c**2)<t.params.threshold)return;if(void 0===s.isScrolling){let e;t.isHorizontal()&&a.currentY===a.startY||t.isVertical()&&a.currentX===a.startX?s.isScrolling=!1:p*p+c*c>=25&&(e=180*Math.atan2(Math.abs(c),Math.abs(p))/Math.PI,s.isScrolling=t.isHorizontal()?e>i.touchAngle:90-e>i.touchAngle)}if(s.isScrolling&&t.emit("touchMoveOpposite",r),void 0===s.startMoving&&(a.currentX===a.startX&&a.currentY===a.startY||(s.startMoving=!0)),s.isScrolling)return void(s.isTouched=!1);if(!s.startMoving)return;t.allowClick=!1,!i.cssMode&&r.cancelable&&r.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&r.stopPropagation(),s.isMoved||(i.loop&&t.loopFix(),s.startTranslate=t.getTranslate(),t.setTransition(0),t.animating&&t.$wrapperEl.trigger("webkitTransitionEnd transitionend"),s.allowMomentumBounce=!1,!i.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",r)),t.emit("sliderMove",r),s.isMoved=!0;let h=t.isHorizontal()?p:c;a.diff=h,h*=i.touchRatio,n&&(h=-h),t.swipeDirection=h>0?"prev":"next",s.currentTranslate=h+s.startTranslate;let u=!0,m=i.resistanceRatio;if(i.touchReleaseOnEdges&&(m=0),h>0&&s.currentTranslate>t.minTranslate()?(u=!1,i.resistance&&(s.currentTranslate=t.minTranslate()-1+(-t.minTranslate()+s.startTranslate+h)**m)):h<0&&s.currentTranslate<t.maxTranslate()&&(u=!1,i.resistance&&(s.currentTranslate=t.maxTranslate()+1-(t.maxTranslate()-s.startTranslate-h)**m)),u&&(r.preventedByNestedSwiper=!0),!t.allowSlideNext&&"next"===t.swipeDirection&&s.currentTranslate<s.startTranslate&&(s.currentTranslate=s.startTranslate),!t.allowSlidePrev&&"prev"===t.swipeDirection&&s.currentTranslate>s.startTranslate&&(s.currentTranslate=s.startTranslate),i.threshold>0){if(!(Math.abs(h)>i.threshold||s.allowThresholdMove))return void(s.currentTranslate=s.startTranslate);if(!s.allowThresholdMove)return s.allowThresholdMove=!0,a.startX=a.currentX,a.startY=a.currentY,s.currentTranslate=s.startTranslate,void(a.diff=t.isHorizontal()?a.currentX-a.startX:a.currentY-a.startY)}i.followFinger&&!i.cssMode&&((i.freeMode||i.watchSlidesProgress||i.watchSlidesVisibility)&&(t.updateActiveIndex(),t.updateSlidesClasses()),i.freeMode&&(0===s.velocities.length&&s.velocities.push({position:a[t.isHorizontal()?"startX":"startY"],time:s.touchStartTime}),s.velocities.push({position:a[t.isHorizontal()?"currentX":"currentY"],time:Utils.now()})),t.updateProgress(s.currentTranslate),t.setTranslate(s.currentTranslate))}function onTouchEnd(e){const t=this,s=t.touchEventsData,{params:i,touches:a,rtlTranslate:n,$wrapperEl:r,slidesGrid:l,snapGrid:o}=t;let d=e;if(d.originalEvent&&(d=d.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",d),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&i.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);i.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const p=Utils.now(),c=p-s.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap click",d),c<300&&p-s.lastClickTime<300&&t.emit("doubleTap doubleClick",d)),s.lastClickTime=Utils.now(),Utils.nextTick(()=>{t.destroyed||(t.allowClick=!0)}),!s.isTouched||!s.isMoved||!t.swipeDirection||0===a.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=i.followFinger?n?t.translate:-t.translate:-s.currentTranslate,i.cssMode)return;if(i.freeMode){if(h<-t.minTranslate())return void t.slideTo(t.activeIndex);if(h>-t.maxTranslate())return void(t.slides.length<o.length?t.slideTo(o.length-1):t.slideTo(t.slides.length-1));if(i.freeModeMomentum){if(s.velocities.length>1){const e=s.velocities.pop(),a=s.velocities.pop(),n=e.position-a.position,r=e.time-a.time;t.velocity=n/r,t.velocity/=2,Math.abs(t.velocity)<i.freeModeMinimumVelocity&&(t.velocity=0),(r>150||Utils.now()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=i.freeModeMomentumVelocityRatio,s.velocities.length=0;let e=1e3*i.freeModeMomentumRatio;const a=t.velocity*e;let l=t.translate+a;n&&(l=-l);let d,p=!1;const c=20*Math.abs(t.velocity)*i.freeModeMomentumBounceRatio;let h;if(l<t.maxTranslate())i.freeModeMomentumBounce?(l+t.maxTranslate()<-c&&(l=t.maxTranslate()-c),d=t.maxTranslate(),p=!0,s.allowMomentumBounce=!0):l=t.maxTranslate(),i.loop&&i.centeredSlides&&(h=!0);else if(l>t.minTranslate())i.freeModeMomentumBounce?(l-t.minTranslate()>c&&(l=t.minTranslate()+c),d=t.minTranslate(),p=!0,s.allowMomentumBounce=!0):l=t.minTranslate(),i.loop&&i.centeredSlides&&(h=!0);else if(i.freeModeSticky){let e;for(let t=0;t<o.length;t+=1)if(o[t]>-l){e=t;break}l=Math.abs(o[e]-l)<Math.abs(o[e-1]-l)||"next"===t.swipeDirection?o[e]:o[e-1],l=-l}if(h&&t.once("transitionEnd",()=>{t.loopFix()}),0!==t.velocity){if(e=n?Math.abs((-l-t.translate)/t.velocity):Math.abs((l-t.translate)/t.velocity),i.freeModeSticky){const s=Math.abs((n?-l:l)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s<a?i.speed:s<2*a?1.5*i.speed:2.5*i.speed}}else if(i.freeModeSticky)return void t.slideToClosest();i.freeModeMomentumBounce&&p?(t.updateProgress(d),t.setTransition(e),t.setTranslate(l),t.transitionStart(!0,t.swipeDirection),t.animating=!0,r.transitionEnd(()=>{t&&!t.destroyed&&s.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(i.speed),setTimeout(()=>{t.setTranslate(d),r.transitionEnd(()=>{t&&!t.destroyed&&t.transitionEnd()})},0))})):t.velocity?(t.updateProgress(l),t.setTransition(e),t.setTranslate(l),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,r.transitionEnd(()=>{t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(l),t.updateActiveIndex(),t.updateSlidesClasses()}else if(i.freeModeSticky)return void t.slideToClosest();return void((!i.freeModeMomentum||c>=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses()))}let u=0,m=t.slidesSizesGrid[0];for(let e=0;e<l.length;e+=e<i.slidesPerGroupSkip?1:i.slidesPerGroup){const t=e<i.slidesPerGroupSkip-1?1:i.slidesPerGroup;void 0!==l[e+t]?h>=l[e]&&h<l[e+t]&&(u=e,m=l[e+t]-l[e]):h>=l[e]&&(u=e,m=l[l.length-1]-l[l.length-2])}const f=(h-l[u])/m,g=u<i.slidesPerGroupSkip-1?1:i.slidesPerGroup;if(c>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(f>=i.longSwipesRatio?t.slideTo(u+g):t.slideTo(u)),"prev"===t.swipeDirection&&(f>1-i.longSwipesRatio?t.slideTo(u+g):t.slideTo(u))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(d.target===t.navigation.nextEl||d.target===t.navigation.prevEl)?d.target===t.navigation.nextEl?t.slideTo(u+g):t.slideTo(u):("next"===t.swipeDirection&&t.slideTo(u+g),"prev"===t.swipeDirection&&t.slideTo(u))}}function onResize(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:i,allowSlidePrev:a,snapGrid:n}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=a,e.allowSlideNext=i,e.params.watchOverflow&&n!==e.snapGrid&&e.checkOverflow()}function onClick(e){const t=this;t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}function onScroll(){const e=this,{wrapperEl:t,rtlTranslate:s}=e;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=s?t.scrollWidth-t.offsetWidth-t.scrollLeft:-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const a=e.maxTranslate()-e.minTranslate();i=0===a?0:(e.translate-e.minTranslate())/a,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let dummyEventAttached=!1;function dummyEventListener(){}function attachEvents(){const e=this,{params:t,touchEvents:s,el:i,wrapperEl:a}=e;e.onTouchStart=onTouchStart.bind(e),e.onTouchMove=onTouchMove.bind(e),e.onTouchEnd=onTouchEnd.bind(e),t.cssMode&&(e.onScroll=onScroll.bind(e)),e.onClick=onClick.bind(e);const n=!!t.nested;if(!Support.touch&&Support.pointerEvents)i.addEventListener(s.start,e.onTouchStart,!1),doc.addEventListener(s.move,e.onTouchMove,n),doc.addEventListener(s.end,e.onTouchEnd,!1);else{if(Support.touch){const a=!("touchstart"!==s.start||!Support.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};i.addEventListener(s.start,e.onTouchStart,a),i.addEventListener(s.move,e.onTouchMove,Support.passiveListener?{passive:!1,capture:n}:n),i.addEventListener(s.end,e.onTouchEnd,a),s.cancel&&i.addEventListener(s.cancel,e.onTouchEnd,a),dummyEventAttached||(doc.addEventListener("touchstart",dummyEventListener),dummyEventAttached=!0)}(t.simulateTouch&&!Device.ios&&!Device.android||t.simulateTouch&&!Support.touch&&Device.ios)&&(i.addEventListener("mousedown",e.onTouchStart,!1),doc.addEventListener("mousemove",e.onTouchMove,n),doc.addEventListener("mouseup",e.onTouchEnd,!1))}(t.preventClicks||t.preventClicksPropagation)&&i.addEventListener("click",e.onClick,!0),t.cssMode&&a.addEventListener("scroll",e.onScroll),t.updateOnWindowResize?e.on(Device.ios||Device.android?"resize orientationchange observerUpdate":"resize observerUpdate",onResize,!0):e.on("observerUpdate",onResize,!0)}function detachEvents(){const e=this,{params:t,touchEvents:s,el:i,wrapperEl:a}=e,n=!!t.nested;if(!Support.touch&&Support.pointerEvents)i.removeEventListener(s.start,e.onTouchStart,!1),doc.removeEventListener(s.move,e.onTouchMove,n),doc.removeEventListener(s.end,e.onTouchEnd,!1);else{if(Support.touch){const a=!("onTouchStart"!==s.start||!Support.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};i.removeEventListener(s.start,e.onTouchStart,a),i.removeEventListener(s.move,e.onTouchMove,n),i.removeEventListener(s.end,e.onTouchEnd,a),s.cancel&&i.removeEventListener(s.cancel,e.onTouchEnd,a)}(t.simulateTouch&&!Device.ios&&!Device.android||t.simulateTouch&&!Support.touch&&Device.ios)&&(i.removeEventListener("mousedown",e.onTouchStart,!1),doc.removeEventListener("mousemove",e.onTouchMove,n),doc.removeEventListener("mouseup",e.onTouchEnd,!1))}(t.preventClicks||t.preventClicksPropagation)&&i.removeEventListener("click",e.onClick,!0),t.cssMode&&a.removeEventListener("scroll",e.onScroll),e.off(Device.ios||Device.android?"resize orientationchange observerUpdate":"resize observerUpdate",onResize)}var events={attachEvents:attachEvents,detachEvents:detachEvents};function setBreakpoint(){const e=this,{activeIndex:t,initialized:s,loopedSlides:i=0,params:a,$el:n}=e,r=a.breakpoints;if(!r||r&&0===Object.keys(r).length)return;const l=e.getBreakpoint(r);if(l&&e.currentBreakpoint!==l){const o=l in r?r[l]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerColumn"].forEach(e=>{const t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});const d=o||e.originalParams,p=a.slidesPerColumn>1,c=d.slidesPerColumn>1;p&&!c?n.removeClass(`${a.containerModifierClass}multirow ${a.containerModifierClass}multirow-column`):!p&&c&&(n.addClass(a.containerModifierClass+"multirow"),"column"===d.slidesPerColumnFill&&n.addClass(a.containerModifierClass+"multirow-column"));const h=d.direction&&d.direction!==a.direction,u=a.loop&&(d.slidesPerView!==a.slidesPerView||h);h&&s&&e.changeDirection(),Utils.extend(e.params,d),Utils.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=l,u&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-i+e.loopedSlides,0,!1)),e.emit("breakpoint",d)}}function getBreakpoint(e){if(!e)return;let t=!1;const s=Object.keys(e).map(e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:win.innerHeight*t,point:e}}return{value:e,point:e}});s.sort((e,t)=>parseInt(e.value,10)-parseInt(t.value,10));for(let e=0;e<s.length;e+=1){const{point:i,value:a}=s[e];a<=win.innerWidth&&(t=i)}return t||"max"}var breakpoints={setBreakpoint:setBreakpoint,getBreakpoint:getBreakpoint};function addClasses(){const{classNames:e,params:t,rtl:s,$el:i}=this,a=[];a.push("initialized"),a.push(t.direction),t.freeMode&&a.push("free-mode"),t.autoHeight&&a.push("autoheight"),s&&a.push("rtl"),t.slidesPerColumn>1&&(a.push("multirow"),"column"===t.slidesPerColumnFill&&a.push("multirow-column")),Device.android&&a.push("android"),Device.ios&&a.push("ios"),t.cssMode&&a.push("css-mode"),a.forEach(s=>{e.push(t.containerModifierClass+s)}),i.addClass(e.join(" "))}function removeClasses(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" "))}var classes={addClasses:addClasses,removeClasses:removeClasses};function loadImage(e,t,s,i,a,n){let r;function l(){n&&n()}$(e).parent("picture")[0]||e.complete&&a?l():t?(r=new win.Image,r.onload=l,r.onerror=l,i&&(r.sizes=i),s&&(r.srcset=s),t&&(r.src=t)):l()}function preloadImages(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s<e.imagesToLoad.length;s+=1){const i=e.imagesToLoad[s];e.loadImage(i,i.currentSrc||i.getAttribute("src"),i.srcset||i.getAttribute("srcset"),i.sizes||i.getAttribute("sizes"),!0,t)}}var images={loadImage:loadImage,preloadImages:preloadImages};function checkOverflow(){const e=this,t=e.params,s=e.isLocked,i=e.slides.length>0&&t.slidesOffsetBefore+t.spaceBetween*(e.slides.length-1)+e.slides[0].offsetWidth*e.slides.length;t.slidesOffsetBefore&&t.slidesOffsetAfter&&i?e.isLocked=i<=e.size:e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,s!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),s&&s!==e.isLocked&&(e.isEnd=!1,e.navigation.update())}var checkOverflow$1={checkOverflow:checkOverflow},defaults={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,preventInteractionOnTransition:!1,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,slidesPerGroupSkip:0,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0};const prototypes={update:update,translate:translate,transition:transition$1,slide:slide,loop:loop,grabCursor:grabCursor,manipulation:manipulation,events:events,breakpoints:breakpoints,checkOverflow:checkOverflow$1,classes:classes,images:images},extendedDefaults={};class Swiper extends SwiperClass{constructor(...e){let t,s;1===e.length&&e[0].constructor&&e[0].constructor===Object?s=e[0]:[t,s]=e,s||(s={}),s=Utils.extend({},s),t&&!s.el&&(s.el=t),super(s),Object.keys(prototypes).forEach(e=>{Object.keys(prototypes[e]).forEach(t=>{Swiper.prototype[t]||(Swiper.prototype[t]=prototypes[e][t])})});const i=this;void 0===i.modules&&(i.modules={}),Object.keys(i.modules).forEach(e=>{const t=i.modules[e];if(t.params){const e=Object.keys(t.params)[0],i=t.params[e];if("object"!=typeof i||null===i)return;if(!(e in s)||!("enabled"in i))return;!0===s[e]&&(s[e]={enabled:!0}),"object"!=typeof s[e]||"enabled"in s[e]||(s[e].enabled=!0),s[e]||(s[e]={enabled:!1})}});const a=Utils.extend({},defaults);i.useModulesParams(a),i.params=Utils.extend({},a,extendedDefaults,s),i.originalParams=Utils.extend({},i.params),i.passedParams=Utils.extend({},s),i.$=$;const n=$(i.params.el);if(t=n[0],!t)return;if(n.length>1){const e=[];return n.each((t,i)=>{const a=Utils.extend({},s,{el:i});e.push(new Swiper(a))}),e}let r;return t.swiper=i,n.data("swiper",i),t&&t.shadowRoot&&t.shadowRoot.querySelector?(r=$(t.shadowRoot.querySelector("."+i.params.wrapperClass)),r.children=e=>n.children(e)):r=n.children("."+i.params.wrapperClass),Utils.extend(i,{$el:n,el:t,$wrapperEl:r,wrapperEl:r[0],classNames:[],slides:$(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===i.params.direction,isVertical:()=>"vertical"===i.params.direction,rtl:"rtl"===t.dir.toLowerCase()||"rtl"===n.css("direction"),rtlTranslate:"horizontal"===i.params.direction&&("rtl"===t.dir.toLowerCase()||"rtl"===n.css("direction")),wrongRTL:"-webkit-box"===r.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:i.params.allowSlideNext,allowSlidePrev:i.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"];let t=["mousedown","mousemove","mouseup"];return Support.pointerEvents&&(t=["pointerdown","pointermove","pointerup"]),i.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},i.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},Support.touch||!i.params.simulateTouch?i.touchEventsTouch:i.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video, label",lastClickTime:Utils.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:i.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),i.useModules(),i.params.init&&i.init(),i}slidesPerViewDynamic(){const{params:e,slides:t,slidesGrid:s,size:i,activeIndex:a}=this;let n=1;if(e.centeredSlides){let e,s=t[a].swiperSlideSize;for(let r=a+1;r<t.length;r+=1)t[r]&&!e&&(s+=t[r].swiperSlideSize,n+=1,s>i&&(e=!0));for(let r=a-1;r>=0;r-=1)t[r]&&!e&&(s+=t[r].swiperSlideSize,n+=1,s>i&&(e=!0))}else for(let e=a+1;e<t.length;e+=1)s[e]-s[a]<i&&(n+=1);return n}update(){const e=this;if(!e||e.destroyed)return;const{snapGrid:t,params:s}=e;function i(){const t=e.rtlTranslate?-1*e.translate:e.translate,s=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(s),e.updateActiveIndex(),e.updateSlidesClasses()}let a;s.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(i(),e.params.autoHeight&&e.updateAutoHeight()):(a=("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),a||i()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const s=this,i=s.params.direction;return e||(e="horizontal"===i?"vertical":"horizontal"),e===i||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${i}`).addClass(`${s.params.containerModifierClass}${e}`),s.params.direction=e,s.slides.each((t,s)=>{"vertical"===e?s.style.width="":s.style.height=""}),s.emit("changeDirection"),t&&s.update()),s}init(){const e=this;e.initialized||(e.emit("beforeInit"),e.params.breakpoints&&e.setBreakpoint(),e.addClasses(),e.params.loop&&e.loopCreate(),e.updateSize(),e.updateSlides(),e.params.watchOverflow&&e.checkOverflow(),e.params.grabCursor&&e.setGrabCursor(),e.params.preloadImages&&e.preloadImages(),e.params.loop?e.slideTo(e.params.initialSlide+e.loopedSlides,0,e.params.runCallbacksOnInit):e.slideTo(e.params.initialSlide,0,e.params.runCallbacksOnInit),e.attachEvents(),e.initialized=!0,e.emit("init"))}destroy(e=!0,t=!0){const s=this,{params:i,$el:a,$wrapperEl:n,slides:r}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),i.loop&&s.loopDestroy(),t&&(s.removeClasses(),a.removeAttr("style"),n.removeAttr("style"),r&&r.length&&r.removeClass([i.slideVisibleClass,i.slideActiveClass,i.slideNextClass,i.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach(e=>{s.off(e)}),!1!==e&&(s.$el[0].swiper=null,s.$el.data("swiper",null),Utils.deleteProps(s)),s.destroyed=!0),null}static extendDefaults(e){Utils.extend(extendedDefaults,e)}static get extendedDefaults(){return extendedDefaults}static get defaults(){return defaults}static get Class(){return SwiperClass}static get $(){return $}}var Device$1={name:"device",proto:{device:Device},static:{device:Device}},Support$1={name:"support",proto:{support:Support},static:{support:Support}};const Browser={isEdge:!!win.navigator.userAgent.match(/Edge/g),isSafari:function(){const e=win.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent)};var Browser$1={name:"browser",proto:{browser:Browser},static:{browser:Browser}},Resize={name:"resize",create(){const e=this;Utils.extend(e,{resize:{resizeHandler(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init(){win.addEventListener("resize",this.resize.resizeHandler),win.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy(){win.removeEventListener("resize",this.resize.resizeHandler),win.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}};const Observer={func:win.MutationObserver||win.WebkitMutationObserver,attach(e,t={}){const s=this,i=new(0,Observer.func)(e=>{if(1===e.length)return void s.emit("observerUpdate",e[0]);const t=function(){s.emit("observerUpdate",e[0])};win.requestAnimationFrame?win.requestAnimationFrame(t):win.setTimeout(t,0)});i.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),s.observer.observers.push(i)},init(){const e=this;if(Support.observer&&e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let s=0;s<t.length;s+=1)e.observer.attach(t[s])}e.observer.attach(e.$el[0],{childList:e.params.observeSlideChildren}),e.observer.attach(e.$wrapperEl[0],{attributes:!1})}},destroy(){this.observer.observers.forEach(e=>{e.disconnect()}),this.observer.observers=[]}};var Observer$1={name:"observer",params:{observer:!1,observeParents:!1,observeSlideChildren:!1},create(){Utils.extend(this,{observer:{init:Observer.init.bind(this),attach:Observer.attach.bind(this),destroy:Observer.destroy.bind(this),observers:[]}})},on:{init(){this.observer.init()},destroy(){this.observer.destroy()}}};const Virtual={update(e){const t=this,{slidesPerView:s,slidesPerGroup:i,centeredSlides:a}=t.params,{addSlidesBefore:n,addSlidesAfter:r}=t.params.virtual,{from:l,to:o,slides:d,slidesGrid:p,renderSlide:c,offset:h}=t.virtual;t.updateActiveIndex();const u=t.activeIndex||0;let m,f,g;m=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",a?(f=Math.floor(s/2)+i+n,g=Math.floor(s/2)+i+r):(f=s+(i-1)+n,g=i+r);const v=Math.max((u||0)-g,0),w=Math.min((u||0)+f,d.length-1),b=(t.slidesGrid[v]||0)-(t.slidesGrid[0]||0);function y(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(Utils.extend(t.virtual,{from:v,to:w,offset:b,slidesGrid:t.slidesGrid}),l===v&&o===w&&!e)return t.slidesGrid!==p&&b!==h&&t.slides.css(m,b+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:b,from:v,to:w,slides:function(){const e=[];for(let t=v;t<=w;t+=1)e.push(d[t]);return e}()}),void y();const x=[],S=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(let e=l;e<=o;e+=1)(e<v||e>w)&&t.$wrapperEl.find(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`).remove();for(let t=0;t<d.length;t+=1)t>=v&&t<=w&&(void 0===o||e?S.push(t):(t>o&&S.push(t),t<l&&x.push(t)));S.forEach(e=>{t.$wrapperEl.append(c(d[e],e))}),x.sort((e,t)=>t-e).forEach(e=>{t.$wrapperEl.prepend(c(d[e],e))}),t.$wrapperEl.children(".swiper-slide").css(m,b+"px"),y()},renderSlide(e,t){const s=this,i=s.params.virtual;if(i.cache&&s.virtual.cache[t])return s.virtual.cache[t];const a=i.renderSlide?$(i.renderSlide.call(s,e,t)):$(`<div class="${s.params.slideClass}" data-swiper-slide-index="${t}">${e}</div>`);return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(s.virtual.cache[t]=a),a},appendSlide(e){const t=this;if("object"==typeof e&&"length"in e)for(let s=0;s<e.length;s+=1)e[s]&&t.virtual.slides.push(e[s]);else t.virtual.slides.push(e);t.virtual.update(!0)},prependSlide(e){const t=this,s=t.activeIndex;let i=s+1,a=1;if(Array.isArray(e)){for(let s=0;s<e.length;s+=1)e[s]&&t.virtual.slides.unshift(e[s]);i=s+e.length,a=e.length}else t.virtual.slides.unshift(e);if(t.params.virtual.cache){const e=t.virtual.cache,s={};Object.keys(e).forEach(t=>{const i=e[t],n=i.attr("data-swiper-slide-index");n&&i.attr("data-swiper-slide-index",parseInt(n,10)+1),s[parseInt(t,10)+a]=i}),t.virtual.cache=s}t.virtual.update(!0),t.slideTo(i,0)},removeSlide(e){const t=this;if(null==e)return;let s=t.activeIndex;if(Array.isArray(e))for(let i=e.length-1;i>=0;i-=1)t.virtual.slides.splice(e[i],1),t.params.virtual.cache&&delete t.virtual.cache[e[i]],e[i]<s&&(s-=1),s=Math.max(s,0);else t.virtual.slides.splice(e,1),t.params.virtual.cache&&delete t.virtual.cache[e],e<s&&(s-=1),s=Math.max(s,0);t.virtual.update(!0),t.slideTo(s,0)},removeAllSlides(){const e=this;e.virtual.slides=[],e.params.virtual.cache&&(e.virtual.cache={}),e.virtual.update(!0),e.slideTo(0,0)}};var Virtual$1={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,addSlidesBefore:0,addSlidesAfter:0}},create(){Utils.extend(this,{virtual:{update:Virtual.update.bind(this),appendSlide:Virtual.appendSlide.bind(this),prependSlide:Virtual.prependSlide.bind(this),removeSlide:Virtual.removeSlide.bind(this),removeAllSlides:Virtual.removeAllSlides.bind(this),renderSlide:Virtual.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit(){const e=this;if(!e.params.virtual.enabled)return;e.classNames.push(e.params.containerModifierClass+"virtual");const t={watchSlidesProgress:!0};Utils.extend(e.params,t),Utils.extend(e.originalParams,t),e.params.initialSlide||e.virtual.update()},setTranslate(){this.params.virtual.enabled&&this.virtual.update()}}};const Keyboard={handle(e){const t=this,{rtlTranslate:s}=t;let i=e;i.originalEvent&&(i=i.originalEvent);const a=i.keyCode||i.charCode;if(!t.allowSlideNext&&(t.isHorizontal()&&39===a||t.isVertical()&&40===a||34===a))return!1;if(!t.allowSlidePrev&&(t.isHorizontal()&&37===a||t.isVertical()&&38===a||33===a))return!1;if(!(i.shiftKey||i.altKey||i.ctrlKey||i.metaKey||doc.activeElement&&doc.activeElement.nodeName&&("input"===doc.activeElement.nodeName.toLowerCase()||"textarea"===doc.activeElement.nodeName.toLowerCase()))){if(t.params.keyboard.onlyInViewport&&(33===a||34===a||37===a||39===a||38===a||40===a)){let e=!1;if(t.$el.parents("."+t.params.slideClass).length>0&&0===t.$el.parents("."+t.params.slideActiveClass).length)return;const i=win.innerWidth,a=win.innerHeight,n=t.$el.offset();s&&(n.left-=t.$el[0].scrollLeft);const r=[[n.left,n.top],[n.left+t.width,n.top],[n.left,n.top+t.height],[n.left+t.width,n.top+t.height]];for(let t=0;t<r.length;t+=1){const s=r[t];s[0]>=0&&s[0]<=i&&s[1]>=0&&s[1]<=a&&(e=!0)}if(!e)return}t.isHorizontal()?(33!==a&&34!==a&&37!==a&&39!==a||(i.preventDefault?i.preventDefault():i.returnValue=!1),(34!==a&&39!==a||s)&&(33!==a&&37!==a||!s)||t.slideNext(),(33!==a&&37!==a||s)&&(34!==a&&39!==a||!s)||t.slidePrev()):(33!==a&&34!==a&&38!==a&&40!==a||(i.preventDefault?i.preventDefault():i.returnValue=!1),34!==a&&40!==a||t.slideNext(),33!==a&&38!==a||t.slidePrev()),t.emit("keyPress",a)}},enable(){this.keyboard.enabled||($(doc).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable(){this.keyboard.enabled&&($(doc).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}};var Keyboard$1={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create(){Utils.extend(this,{keyboard:{enabled:!1,enable:Keyboard.enable.bind(this),disable:Keyboard.disable.bind(this),handle:Keyboard.handle.bind(this)}})},on:{init(){const e=this;e.params.keyboard.enabled&&e.keyboard.enable()},destroy(){const e=this;e.keyboard.enabled&&e.keyboard.disable()}}};function isEventSupported(){let e="onwheel"in doc;if(!e){const t=doc.createElement("div");t.setAttribute("onwheel","return;"),e="function"==typeof t.onwheel}return!e&&doc.implementation&&doc.implementation.hasFeature&&!0!==doc.implementation.hasFeature("","")&&(e=doc.implementation.hasFeature("Events.wheel","3.0")),e}const Mousewheel={lastScrollTime:Utils.now(),lastEventBeforeSnap:void 0,recentWheelEvents:[],event:()=>win.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":isEventSupported()?"wheel":"mousewheel",normalize(e){let t=0,s=0,i=0,a=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),i=10*t,a=10*s,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(i=e.deltaX),e.shiftKey&&!i&&(i=a,a=0),(i||a)&&e.deltaMode&&(1===e.deltaMode?(i*=40,a*=40):(i*=800,a*=800)),i&&!t&&(t=i<1?-1:1),a&&!s&&(s=a<1?-1:1),{spinX:t,spinY:s,pixelX:i,pixelY:a}},handleMouseEnter(){this.mouseEntered=!0},handleMouseLeave(){this.mouseEntered=!1},handle(e){let t=e;const s=this,i=s.params.mousewheel;s.params.cssMode&&t.preventDefault();let a=s.$el;if("container"!==s.params.mousewheel.eventsTarged&&(a=$(s.params.mousewheel.eventsTarged)),!s.mouseEntered&&!a[0].contains(t.target)&&!i.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);let n=0;const r=s.rtlTranslate?-1:1,l=Mousewheel.normalize(t);if(i.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(l.pixelX)>Math.abs(l.pixelY)))return!0;n=l.pixelX*r}else{if(!(Math.abs(l.pixelY)>Math.abs(l.pixelX)))return!0;n=l.pixelY}else n=Math.abs(l.pixelX)>Math.abs(l.pixelY)?-l.pixelX*r:-l.pixelY;if(0===n)return!0;if(i.invert&&(n=-n),s.params.freeMode){const e={time:Utils.now(),delta:Math.abs(n),direction:Math.sign(n)},{lastEventBeforeSnap:a}=s.mousewheel,r=a&&e.time<a.time+500&&e.delta<=a.delta&&e.direction===a.direction;if(!r){s.mousewheel.lastEventBeforeSnap=void 0,s.params.loop&&s.loopFix();let a=s.getTranslate()+n*i.sensitivity;const l=s.isBeginning,o=s.isEnd;if(a>=s.minTranslate()&&(a=s.minTranslate()),a<=s.maxTranslate()&&(a=s.maxTranslate()),s.setTransition(0),s.setTranslate(a),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!l&&s.isBeginning||!o&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky){clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=void 0;const t=s.mousewheel.recentWheelEvents;t.length>=15&&t.shift();const i=t.length?t[t.length-1]:void 0,a=t[0];if(t.push(e),i&&(e.delta>i.delta||e.direction!==i.direction))t.splice(0);else if(t.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const i=n>0?.8:.2;s.mousewheel.lastEventBeforeSnap=e,t.splice(0),s.mousewheel.timeout=Utils.nextTick(()=>{s.slideToClosest(s.params.speed,!0,void 0,i)},0)}s.mousewheel.timeout||(s.mousewheel.timeout=Utils.nextTick(()=>{s.mousewheel.lastEventBeforeSnap=e,t.splice(0),s.slideToClosest(s.params.speed,!0,void 0,.5)},500))}if(r||s.emit("scroll",t),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.autoplay.stop(),a===s.minTranslate()||a===s.maxTranslate())return!0}}else{const t={time:Utils.now(),delta:Math.abs(n),direction:Math.sign(n),raw:e},i=s.mousewheel.recentWheelEvents;i.length>=2&&i.shift();const a=i.length?i[i.length-1]:void 0;if(i.push(t),a?(t.direction!==a.direction||t.delta>a.delta||t.time>a.time+150)&&s.mousewheel.animateSlider(t):s.mousewheel.animateSlider(t),s.mousewheel.releaseScroll(t))return!0}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1},animateSlider(e){const t=this;return e.delta>=6&&Utils.now()-t.mousewheel.lastScrollTime<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),t.emit("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),t.emit("scroll",e.raw)),t.mousewheel.lastScrollTime=(new win.Date).getTime(),!1)},releaseScroll(e){const t=this,s=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&s.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&s.releaseOnEdges)return!0;return!1},enable(){const e=this,t=Mousewheel.event();if(e.params.cssMode)return e.wrapperEl.removeEventListener(t,e.mousewheel.handle),!0;if(!t)return!1;if(e.mousewheel.enabled)return!1;let s=e.$el;return"container"!==e.params.mousewheel.eventsTarged&&(s=$(e.params.mousewheel.eventsTarged)),s.on("mouseenter",e.mousewheel.handleMouseEnter),s.on("mouseleave",e.mousewheel.handleMouseLeave),s.on(t,e.mousewheel.handle),e.mousewheel.enabled=!0,!0},disable(){const e=this,t=Mousewheel.event();if(e.params.cssMode)return e.wrapperEl.addEventListener(t,e.mousewheel.handle),!0;if(!t)return!1;if(!e.mousewheel.enabled)return!1;let s=e.$el;return"container"!==e.params.mousewheel.eventsTarged&&(s=$(e.params.mousewheel.eventsTarged)),s.off(t,e.mousewheel.handle),e.mousewheel.enabled=!1,!0}};var Mousewheel$1={name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create(){Utils.extend(this,{mousewheel:{enabled:!1,enable:Mousewheel.enable.bind(this),disable:Mousewheel.disable.bind(this),handle:Mousewheel.handle.bind(this),handleMouseEnter:Mousewheel.handleMouseEnter.bind(this),handleMouseLeave:Mousewheel.handleMouseLeave.bind(this),animateSlider:Mousewheel.animateSlider.bind(this),releaseScroll:Mousewheel.releaseScroll.bind(this),lastScrollTime:Utils.now(),lastEventBeforeSnap:void 0,recentWheelEvents:[]}})},on:{init(){const e=this;!e.params.mousewheel.enabled&&e.params.cssMode&&e.mousewheel.disable(),e.params.mousewheel.enabled&&e.mousewheel.enable()},destroy(){const e=this;e.params.cssMode&&e.mousewheel.enable(),e.mousewheel.enabled&&e.mousewheel.disable()}}};const Navigation={update(){const e=this,t=e.params.navigation;if(e.params.loop)return;const{$nextEl:s,$prevEl:i}=e.navigation;i&&i.length>0&&(e.isBeginning?i.addClass(t.disabledClass):i.removeClass(t.disabledClass),i[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass)),s&&s.length>0&&(e.isEnd?s.addClass(t.disabledClass):s.removeClass(t.disabledClass),s[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](t.lockClass))},onPrevClick(e){e.preventDefault(),this.isBeginning&&!this.params.loop||this.slidePrev()},onNextClick(e){e.preventDefault(),this.isEnd&&!this.params.loop||this.slideNext()},init(){const e=this,t=e.params.navigation;if(!t.nextEl&&!t.prevEl)return;let s,i;t.nextEl&&(s=$(t.nextEl),e.params.uniqueNavElements&&"string"==typeof t.nextEl&&s.length>1&&1===e.$el.find(t.nextEl).length&&(s=e.$el.find(t.nextEl))),t.prevEl&&(i=$(t.prevEl),e.params.uniqueNavElements&&"string"==typeof t.prevEl&&i.length>1&&1===e.$el.find(t.prevEl).length&&(i=e.$el.find(t.prevEl))),s&&s.length>0&&s.on("click",e.navigation.onNextClick),i&&i.length>0&&i.on("click",e.navigation.onPrevClick),Utils.extend(e.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:i,prevEl:i&&i[0]})},destroy(){const e=this,{$nextEl:t,$prevEl:s}=e.navigation;t&&t.length&&(t.off("click",e.navigation.onNextClick),t.removeClass(e.params.navigation.disabledClass)),s&&s.length&&(s.off("click",e.navigation.onPrevClick),s.removeClass(e.params.navigation.disabledClass))}};var Navigation$1={name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create(){Utils.extend(this,{navigation:{init:Navigation.init.bind(this),update:Navigation.update.bind(this),destroy:Navigation.destroy.bind(this),onNextClick:Navigation.onNextClick.bind(this),onPrevClick:Navigation.onPrevClick.bind(this)}})},on:{init(){this.navigation.init(),this.navigation.update()},toEdge(){this.navigation.update()},fromEdge(){this.navigation.update()},destroy(){this.navigation.destroy()},click(e){const t=this,{$nextEl:s,$prevEl:i}=t.navigation;if(t.params.navigation.hideOnClick&&!$(e.target).is(i)&&!$(e.target).is(s)){let e;s?e=s.hasClass(t.params.navigation.hiddenClass):i&&(e=i.hasClass(t.params.navigation.hiddenClass)),!0===e?t.emit("navigationShow",t):t.emit("navigationHide",t),s&&s.toggleClass(t.params.navigation.hiddenClass),i&&i.toggleClass(t.params.navigation.hiddenClass)}}}};const Pagination={update(){const e=this,t=e.rtl,s=e.params.pagination;if(!s.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length)return;const i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,a=e.pagination.$el;let n;const r=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(n=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),n>i-1-2*e.loopedSlides&&(n-=i-2*e.loopedSlides),n>r-1&&(n-=r),n<0&&"bullets"!==e.params.paginationType&&(n=r+n)):n=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===s.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const i=e.pagination.bullets;let r,l,o;if(s.dynamicBullets&&(e.pagination.bulletSize=i.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),a.css(e.isHorizontal()?"width":"height",e.pagination.bulletSize*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==e.previousIndex&&(e.pagination.dynamicBulletIndex+=n-e.previousIndex,e.pagination.dynamicBulletIndex>s.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=s.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),r=n-e.pagination.dynamicBulletIndex,l=r+(Math.min(i.length,s.dynamicMainBullets)-1),o=(l+r)/2),i.removeClass(`${s.bulletActiveClass} ${s.bulletActiveClass}-next ${s.bulletActiveClass}-next-next ${s.bulletActiveClass}-prev ${s.bulletActiveClass}-prev-prev ${s.bulletActiveClass}-main`),a.length>1)i.each((e,t)=>{const i=$(t),a=i.index();a===n&&i.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=r&&a<=l&&i.addClass(s.bulletActiveClass+"-main"),a===r&&i.prev().addClass(s.bulletActiveClass+"-prev").prev().addClass(s.bulletActiveClass+"-prev-prev"),a===l&&i.next().addClass(s.bulletActiveClass+"-next").next().addClass(s.bulletActiveClass+"-next-next"))});else{const t=i.eq(n),a=t.index();if(t.addClass(s.bulletActiveClass),s.dynamicBullets){const t=i.eq(r),n=i.eq(l);for(let e=r;e<=l;e+=1)i.eq(e).addClass(s.bulletActiveClass+"-main");if(e.params.loop)if(a>=i.length-s.dynamicMainBullets){for(let e=s.dynamicMainBullets;e>=0;e-=1)i.eq(i.length-e).addClass(s.bulletActiveClass+"-main");i.eq(i.length-s.dynamicMainBullets-1).addClass(s.bulletActiveClass+"-prev")}else t.prev().addClass(s.bulletActiveClass+"-prev").prev().addClass(s.bulletActiveClass+"-prev-prev"),n.next().addClass(s.bulletActiveClass+"-next").next().addClass(s.bulletActiveClass+"-next-next");else t.prev().addClass(s.bulletActiveClass+"-prev").prev().addClass(s.bulletActiveClass+"-prev-prev"),n.next().addClass(s.bulletActiveClass+"-next").next().addClass(s.bulletActiveClass+"-next-next")}}if(s.dynamicBullets){const a=Math.min(i.length,s.dynamicMainBullets+4),n=(e.pagination.bulletSize*a-e.pagination.bulletSize)/2-o*e.pagination.bulletSize,r=t?"right":"left";i.css(e.isHorizontal()?r:"top",n+"px")}}if("fraction"===s.type&&(a.find("."+s.currentClass).text(s.formatFractionCurrent(n+1)),a.find("."+s.totalClass).text(s.formatFractionTotal(r))),"progressbar"===s.type){let t;t=s.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const i=(n+1)/r;let l=1,o=1;"horizontal"===t?l=i:o=i,a.find("."+s.progressbarFillClass).transform(`translate3d(0,0,0) scaleX(${l}) scaleY(${o})`).transition(e.params.speed)}"custom"===s.type&&s.renderCustom?(a.html(s.renderCustom(e,n+1,r)),e.emit("paginationRender",e,a[0])):e.emit("paginationUpdate",e,a[0]),a[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](s.lockClass)},render(){const e=this,t=e.params.pagination;if(!t.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length)return;const s=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el;let a="";if("bullets"===t.type){const n=e.params.loop?Math.ceil((s-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;for(let s=0;s<n;s+=1)t.renderBullet?a+=t.renderBullet.call(e,s,t.bulletClass):a+=`<${t.bulletElement} class="${t.bulletClass}"></${t.bulletElement}>`;i.html(a),e.pagination.bullets=i.find("."+t.bulletClass)}"fraction"===t.type&&(a=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):`<span class="${t.currentClass}"></span> / <span class="${t.totalClass}"></span>`,i.html(a)),"progressbar"===t.type&&(a=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):`<span class="${t.progressbarFillClass}"></span>`,i.html(a)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])},init(){const e=this,t=e.params.pagination;if(!t.el)return;let s=$(t.el);0!==s.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&s.length>1&&1===e.$el.find(t.el).length&&(s=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&s.addClass(t.clickableClass),s.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(s.addClass(`${t.modifierClass}${t.type}-dynamic`),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&s.addClass(t.progressbarOppositeClass),t.clickable&&s.on("click","."+t.bulletClass,(function(t){t.preventDefault();let s=$(this).index()*e.params.slidesPerGroup;e.params.loop&&(s+=e.loopedSlides),e.slideTo(s)})),Utils.extend(e.pagination,{$el:s,el:s[0]}))},destroy(){const e=this.params.pagination;if(!e.el||!this.pagination.el||!this.pagination.$el||0===this.pagination.$el.length)return;const t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}};var Pagination$1={name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create(){Utils.extend(this,{pagination:{init:Pagination.init.bind(this),render:Pagination.render.bind(this),update:Pagination.update.bind(this),destroy:Pagination.destroy.bind(this),dynamicBulletIndex:0}})},on:{init(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange(){const e=this;(e.params.loop||void 0===e.snapIndex)&&e.pagination.update()},snapIndexChange(){const e=this;e.params.loop||e.pagination.update()},slidesLengthChange(){const e=this;e.params.loop&&(e.pagination.render(),e.pagination.update())},snapGridLengthChange(){const e=this;e.params.loop||(e.pagination.render(),e.pagination.update())},destroy(){this.pagination.destroy()},click(e){const t=this;if(t.params.pagination.el&&t.params.pagination.hideOnClick&&t.pagination.$el.length>0&&!$(e.target).hasClass(t.params.pagination.bulletClass)){!0===t.pagination.$el.hasClass(t.params.pagination.hiddenClass)?t.emit("paginationShow",t):t.emit("paginationHide",t),t.pagination.$el.toggleClass(t.params.pagination.hiddenClass)}}}};const Scrollbar={setTranslate(){const e=this;if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t,rtlTranslate:s,progress:i}=e,{dragSize:a,trackSize:n,$dragEl:r,$el:l}=t,o=e.params.scrollbar;let d=a,p=(n-a)*i;s?(p=-p,p>0?(d=a-p,p=0):-p+a>n&&(d=n+p)):p<0?(d=a+p,p=0):p+a>n&&(d=n-p),e.isHorizontal()?(r.transform(`translate3d(${p}px, 0, 0)`),r[0].style.width=d+"px"):(r.transform(`translate3d(0px, ${p}px, 0)`),r[0].style.height=d+"px"),o.hide&&(clearTimeout(e.scrollbar.timeout),l[0].style.opacity=1,e.scrollbar.timeout=setTimeout(()=>{l[0].style.opacity=0,l.transition(400)},1e3))},setTransition(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize(){const e=this;if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t}=e,{$dragEl:s,$el:i}=t;s[0].style.width="",s[0].style.height="";const a=e.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,n=e.size/e.virtualSize,r=n*(a/e.size);let l;l="auto"===e.params.scrollbar.dragSize?a*n:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?s[0].style.width=l+"px":s[0].style.height=l+"px",i[0].style.display=n>=1?"none":"",e.params.scrollbar.hide&&(i[0].style.opacity=0),Utils.extend(t,{trackSize:a,divider:n,moveDivider:r,dragSize:l}),t.$el[e.params.watchOverflow&&e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)},getPointerPosition(e){return this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY},setDragPosition(e){const{scrollbar:t,rtlTranslate:s}=this,{$el:i,dragSize:a,trackSize:n,dragStartPos:r}=t;let l;l=(t.getPointerPosition(e)-i.offset()[this.isHorizontal()?"left":"top"]-(null!==r?r:a/2))/(n-a),l=Math.max(Math.min(l,1),0),s&&(l=1-l);const o=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*l;this.updateProgress(o),this.setTranslate(o),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart(e){const t=this,s=t.params.scrollbar,{scrollbar:i,$wrapperEl:a}=t,{$el:n,$dragEl:r}=i;t.scrollbar.isTouched=!0,t.scrollbar.dragStartPos=e.target===r[0]||e.target===r?i.getPointerPosition(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),a.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(t.scrollbar.dragTimeout),n.transition(0),s.hide&&n.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),t.emit("scrollbarDragStart",e)},onDragMove(e){const{scrollbar:t,$wrapperEl:s}=this,{$el:i,$dragEl:a}=t;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),s.transition(0),i.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd(e){const t=this,s=t.params.scrollbar,{scrollbar:i,$wrapperEl:a}=t,{$el:n}=i;t.scrollbar.isTouched&&(t.scrollbar.isTouched=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),a.transition("")),s.hide&&(clearTimeout(t.scrollbar.dragTimeout),t.scrollbar.dragTimeout=Utils.nextTick(()=>{n.css("opacity",0),n.transition(400)},1e3)),t.emit("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())},enableDraggable(){const e=this;if(!e.params.scrollbar.el)return;const{scrollbar:t,touchEventsTouch:s,touchEventsDesktop:i,params:a}=e,n=t.$el[0],r=!(!Support.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!Support.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};Support.touch?(n.addEventListener(s.start,e.scrollbar.onDragStart,r),n.addEventListener(s.move,e.scrollbar.onDragMove,r),n.addEventListener(s.end,e.scrollbar.onDragEnd,l)):(n.addEventListener(i.start,e.scrollbar.onDragStart,r),doc.addEventListener(i.move,e.scrollbar.onDragMove,r),doc.addEventListener(i.end,e.scrollbar.onDragEnd,l))},disableDraggable(){const e=this;if(!e.params.scrollbar.el)return;const{scrollbar:t,touchEventsTouch:s,touchEventsDesktop:i,params:a}=e,n=t.$el[0],r=!(!Support.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!Support.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};Support.touch?(n.removeEventListener(s.start,e.scrollbar.onDragStart,r),n.removeEventListener(s.move,e.scrollbar.onDragMove,r),n.removeEventListener(s.end,e.scrollbar.onDragEnd,l)):(n.removeEventListener(i.start,e.scrollbar.onDragStart,r),doc.removeEventListener(i.move,e.scrollbar.onDragMove,r),doc.removeEventListener(i.end,e.scrollbar.onDragEnd,l))},init(){const e=this;if(!e.params.scrollbar.el)return;const{scrollbar:t,$el:s}=e,i=e.params.scrollbar;let a=$(i.el);e.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===s.find(i.el).length&&(a=s.find(i.el));let n=a.find("."+e.params.scrollbar.dragClass);0===n.length&&(n=$(`<div class="${e.params.scrollbar.dragClass}"></div>`),a.append(n)),Utils.extend(t,{$el:a,el:a[0],$dragEl:n,dragEl:n[0]}),i.draggable&&t.enableDraggable()},destroy(){this.scrollbar.disableDraggable()}};var Scrollbar$1={name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create(){Utils.extend(this,{scrollbar:{init:Scrollbar.init.bind(this),destroy:Scrollbar.destroy.bind(this),updateSize:Scrollbar.updateSize.bind(this),setTranslate:Scrollbar.setTranslate.bind(this),setTransition:Scrollbar.setTransition.bind(this),enableDraggable:Scrollbar.enableDraggable.bind(this),disableDraggable:Scrollbar.disableDraggable.bind(this),setDragPosition:Scrollbar.setDragPosition.bind(this),getPointerPosition:Scrollbar.getPointerPosition.bind(this),onDragStart:Scrollbar.onDragStart.bind(this),onDragMove:Scrollbar.onDragMove.bind(this),onDragEnd:Scrollbar.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update(){this.scrollbar.updateSize()},resize(){this.scrollbar.updateSize()},observerUpdate(){this.scrollbar.updateSize()},setTranslate(){this.scrollbar.setTranslate()},setTransition(e){this.scrollbar.setTransition(e)},destroy(){this.scrollbar.destroy()}}};const Parallax={setTransform(e,t){const{rtl:s}=this,i=$(e),a=s?-1:1,n=i.attr("data-swiper-parallax")||"0";let r=i.attr("data-swiper-parallax-x"),l=i.attr("data-swiper-parallax-y");const o=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(r||l?(r=r||"0",l=l||"0"):this.isHorizontal()?(r=n,l="0"):(l=n,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*a+"%":r*t*a+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",null!=d){const e=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=e}if(null==o)i.transform(`translate3d(${r}, ${l}, 0px)`);else{const e=o-(o-1)*(1-Math.abs(t));i.transform(`translate3d(${r}, ${l}, 0px) scale(${e})`)}},setTranslate(){const e=this,{$el:t,slides:s,progress:i,snapGrid:a}=e;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t,s)=>{e.parallax.setTransform(s,i)}),s.each((t,s)=>{let n=s.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-i*(a.length-1)),n=Math.min(Math.max(n,-1),1),$(s).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t,s)=>{e.parallax.setTransform(s,n)})})},setTransition(e=this.params.speed){const{$el:t}=this;t.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t,s)=>{const i=$(s);let a=parseInt(i.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),i.transition(a)})}};var Parallax$1={name:"parallax",params:{parallax:{enabled:!1}},create(){Utils.extend(this,{parallax:{setTransform:Parallax.setTransform.bind(this),setTranslate:Parallax.setTranslate.bind(this),setTransition:Parallax.setTransition.bind(this)}})},on:{beforeInit(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},init(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTranslate(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTransition(e){this.params.parallax.enabled&&this.parallax.setTransition(e)}}};const Zoom={getDistanceBetweenTouches(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,i=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt((i-t)**2+(a-s)**2)},onGestureStart(e){const t=this,s=t.params.zoom,i=t.zoom,{gesture:a}=i;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!Support.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=Zoom.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=$(e.target).closest("."+t.params.slideClass),0===a.$slideEl.length&&(a.$slideEl=t.slides.eq(t.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),a.$imageWrapEl=a.$imageEl.parent("."+s.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||s.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl&&a.$imageEl.transition(0),t.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange(e){const t=this.params.zoom,s=this.zoom,{gesture:i}=s;if(!Support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;s.fakeGestureMoved=!0,i.scaleMove=Zoom.getDistanceBetweenTouches(e)}i.$imageEl&&0!==i.$imageEl.length&&(s.scale=Support.gestures?e.scale*s.currentScale:i.scaleMove/i.scaleStart*s.currentScale,s.scale>i.maxRatio&&(s.scale=i.maxRatio-1+(s.scale-i.maxRatio+1)**.5),s.scale<t.minRatio&&(s.scale=t.minRatio+1-(t.minRatio-s.scale+1)**.5),i.$imageEl.transform(`translate3d(0,0,0) scale(${s.scale})`))},onGestureEnd(e){const t=this.params.zoom,s=this.zoom,{gesture:i}=s;if(!Support.gestures){if(!s.fakeGestureTouched||!s.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!Device.android)return;s.fakeGestureTouched=!1,s.fakeGestureMoved=!1}i.$imageEl&&0!==i.$imageEl.length&&(s.scale=Math.max(Math.min(s.scale,i.maxRatio),t.minRatio),i.$imageEl.transition(this.params.speed).transform(`translate3d(0,0,0) scale(${s.scale})`),s.currentScale=s.scale,s.isScaling=!1,1===s.scale&&(i.$slideEl=void 0))},onTouchStart(e){const t=this.zoom,{gesture:s,image:i}=t;s.$imageEl&&0!==s.$imageEl.length&&(i.isTouched||(Device.android&&e.cancelable&&e.preventDefault(),i.isTouched=!0,i.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,i.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove(e){const t=this,s=t.zoom,{gesture:i,image:a,velocity:n}=s;if(!i.$imageEl||0===i.$imageEl.length)return;if(t.allowClick=!1,!a.isTouched||!i.$slideEl)return;a.isMoved||(a.width=i.$imageEl[0].offsetWidth,a.height=i.$imageEl[0].offsetHeight,a.startX=Utils.getTranslate(i.$imageWrapEl[0],"x")||0,a.startY=Utils.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),t.rtl&&(a.startX=-a.startX,a.startY=-a.startY));const r=a.width*s.scale,l=a.height*s.scale;if(!(r<i.slideWidth&&l<i.slideHeight)){if(a.minX=Math.min(i.slideWidth/2-r/2,0),a.maxX=-a.minX,a.minY=Math.min(i.slideHeight/2-l/2,0),a.maxY=-a.minY,a.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,a.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!a.isMoved&&!s.isScaling){if(t.isHorizontal()&&(Math.floor(a.minX)===Math.floor(a.startX)&&a.touchesCurrent.x<a.touchesStart.x||Math.floor(a.maxX)===Math.floor(a.startX)&&a.touchesCurrent.x>a.touchesStart.x))return void(a.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(a.minY)===Math.floor(a.startY)&&a.touchesCurrent.y<a.touchesStart.y||Math.floor(a.maxY)===Math.floor(a.startY)&&a.touchesCurrent.y>a.touchesStart.y))return void(a.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),a.isMoved=!0,a.currentX=a.touchesCurrent.x-a.touchesStart.x+a.startX,a.currentY=a.touchesCurrent.y-a.touchesStart.y+a.startY,a.currentX<a.minX&&(a.currentX=a.minX+1-(a.minX-a.currentX+1)**.8),a.currentX>a.maxX&&(a.currentX=a.maxX-1+(a.currentX-a.maxX+1)**.8),a.currentY<a.minY&&(a.currentY=a.minY+1-(a.minY-a.currentY+1)**.8),a.currentY>a.maxY&&(a.currentY=a.maxY-1+(a.currentY-a.maxY+1)**.8),n.prevPositionX||(n.prevPositionX=a.touchesCurrent.x),n.prevPositionY||(n.prevPositionY=a.touchesCurrent.y),n.prevTime||(n.prevTime=Date.now()),n.x=(a.touchesCurrent.x-n.prevPositionX)/(Date.now()-n.prevTime)/2,n.y=(a.touchesCurrent.y-n.prevPositionY)/(Date.now()-n.prevTime)/2,Math.abs(a.touchesCurrent.x-n.prevPositionX)<2&&(n.x=0),Math.abs(a.touchesCurrent.y-n.prevPositionY)<2&&(n.y=0),n.prevPositionX=a.touchesCurrent.x,n.prevPositionY=a.touchesCurrent.y,n.prevTime=Date.now(),i.$imageWrapEl.transform(`translate3d(${a.currentX}px, ${a.currentY}px,0)`)}},onTouchEnd(){const e=this.zoom,{gesture:t,image:s,velocity:i}=e;if(!t.$imageEl||0===t.$imageEl.length)return;if(!s.isTouched||!s.isMoved)return s.isTouched=!1,void(s.isMoved=!1);s.isTouched=!1,s.isMoved=!1;let a=300,n=300;const r=i.x*a,l=s.currentX+r,o=i.y*n,d=s.currentY+o;0!==i.x&&(a=Math.abs((l-s.currentX)/i.x)),0!==i.y&&(n=Math.abs((d-s.currentY)/i.y));const p=Math.max(a,n);s.currentX=l,s.currentY=d;const c=s.width*e.scale,h=s.height*e.scale;s.minX=Math.min(t.slideWidth/2-c/2,0),s.maxX=-s.minX,s.minY=Math.min(t.slideHeight/2-h/2,0),s.maxY=-s.minY,s.currentX=Math.max(Math.min(s.currentX,s.maxX),s.minX),s.currentY=Math.max(Math.min(s.currentY,s.maxY),s.minY),t.$imageWrapEl.transition(p).transform(`translate3d(${s.currentX}px, ${s.currentY}px,0)`)},onTransitionEnd(){const e=this.zoom,{gesture:t}=e;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl&&t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl&&t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle(e){const t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in(e){const t=this,s=t.zoom,i=t.params.zoom,{gesture:a,image:n}=s;if(a.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?a.$slideEl=t.$wrapperEl.children("."+t.params.slideActiveClass):a.$slideEl=t.slides.eq(t.activeIndex),a.$imageEl=a.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),a.$imageWrapEl=a.$imageEl.parent("."+i.containerClass)),!a.$imageEl||0===a.$imageEl.length)return;let r,l,o,d,p,c,h,u,m,f,g,v,w,b,y,x,S,T;a.$slideEl.addClass(""+i.zoomedSlideClass),void 0===n.touchesStart.x&&e?(r="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,l="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(r=n.touchesStart.x,l=n.touchesStart.y),s.scale=a.$imageWrapEl.attr("data-swiper-zoom")||i.maxRatio,s.currentScale=a.$imageWrapEl.attr("data-swiper-zoom")||i.maxRatio,e?(S=a.$slideEl[0].offsetWidth,T=a.$slideEl[0].offsetHeight,o=a.$slideEl.offset().left,d=a.$slideEl.offset().top,p=o+S/2-r,c=d+T/2-l,m=a.$imageEl[0].offsetWidth,f=a.$imageEl[0].offsetHeight,g=m*s.scale,v=f*s.scale,w=Math.min(S/2-g/2,0),b=Math.min(T/2-v/2,0),y=-w,x=-b,h=p*s.scale,u=c*s.scale,h<w&&(h=w),h>y&&(h=y),u<b&&(u=b),u>x&&(u=x)):(h=0,u=0),a.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${u}px,0)`),a.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)},out(){const e=this,t=e.zoom,s=e.params.zoom,{gesture:i}=t;i.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?i.$slideEl=e.$wrapperEl.children("."+e.params.slideActiveClass):i.$slideEl=e.slides.eq(e.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),i.$imageWrapEl=i.$imageEl.parent("."+s.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(t.scale=1,t.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+s.zoomedSlideClass),i.$slideEl=void 0)},enable(){const e=this,t=e.zoom;if(t.enabled)return;t.enabled=!0;const s=!("touchstart"!==e.touchEvents.start||!Support.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},i=!Support.passiveListener||{passive:!1,capture:!0},a="."+e.params.slideClass;Support.gestures?(e.$wrapperEl.on("gesturestart",a,t.onGestureStart,s),e.$wrapperEl.on("gesturechange",a,t.onGestureChange,s),e.$wrapperEl.on("gestureend",a,t.onGestureEnd,s)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,a,t.onGestureStart,s),e.$wrapperEl.on(e.touchEvents.move,a,t.onGestureChange,i),e.$wrapperEl.on(e.touchEvents.end,a,t.onGestureEnd,s),e.touchEvents.cancel&&e.$wrapperEl.on(e.touchEvents.cancel,a,t.onGestureEnd,s)),e.$wrapperEl.on(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove,i)},disable(){const e=this,t=e.zoom;if(!t.enabled)return;e.zoom.enabled=!1;const s=!("touchstart"!==e.touchEvents.start||!Support.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},i=!Support.passiveListener||{passive:!1,capture:!0},a="."+e.params.slideClass;Support.gestures?(e.$wrapperEl.off("gesturestart",a,t.onGestureStart,s),e.$wrapperEl.off("gesturechange",a,t.onGestureChange,s),e.$wrapperEl.off("gestureend",a,t.onGestureEnd,s)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,a,t.onGestureStart,s),e.$wrapperEl.off(e.touchEvents.move,a,t.onGestureChange,i),e.$wrapperEl.off(e.touchEvents.end,a,t.onGestureEnd,s),e.touchEvents.cancel&&e.$wrapperEl.off(e.touchEvents.cancel,a,t.onGestureEnd,s)),e.$wrapperEl.off(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove,i)}};var Zoom$1={name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create(){const e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(s=>{t[s]=Zoom[s].bind(e)}),Utils.extend(e,{zoom:t});let s=1;Object.defineProperty(e.zoom,"scale",{get:()=>s,set(t){if(s!==t){const s=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,i=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,s,i)}s=t}})},on:{init(){const e=this;e.params.zoom.enabled&&e.zoom.enable()},destroy(){this.zoom.disable()},touchStart(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap(e){const t=this;t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&t.zoom.toggle(e)},transitionEnd(){const e=this;e.zoom.enabled&&e.params.zoom.enabled&&e.zoom.onTransitionEnd()},slideChange(){const e=this;e.zoom.enabled&&e.params.zoom.enabled&&e.params.cssMode&&e.zoom.onTransitionEnd()}}};const Lazy={loadInSlide(e,t=!0){const s=this,i=s.params.lazy;if(void 0===e)return;if(0===s.slides.length)return;const a=s.virtual&&s.params.virtual.enabled?s.$wrapperEl.children(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`):s.slides.eq(e);let n=a.find(`.${i.elementClass}:not(.${i.loadedClass}):not(.${i.loadingClass})`);!a.hasClass(i.elementClass)||a.hasClass(i.loadedClass)||a.hasClass(i.loadingClass)||(n=n.add(a[0])),0!==n.length&&n.each((e,n)=>{const r=$(n);r.addClass(i.loadingClass);const l=r.attr("data-background"),o=r.attr("data-src"),d=r.attr("data-srcset"),p=r.attr("data-sizes"),c=r.parent("picture");s.loadImage(r[0],o||l,d,p,!1,()=>{if(null!=s&&s&&(!s||s.params)&&!s.destroyed){if(l?(r.css("background-image",`url("${l}")`),r.removeAttr("data-background")):(d&&(r.attr("srcset",d),r.removeAttr("data-srcset")),p&&(r.attr("sizes",p),r.removeAttr("data-sizes")),c.length&&c.children("source").each((e,t)=>{const s=$(t);s.attr("data-srcset")&&(s.attr("srcset",s.attr("data-srcset")),s.removeAttr("data-srcset"))}),o&&(r.attr("src",o),r.removeAttr("data-src"))),r.addClass(i.loadedClass).removeClass(i.loadingClass),a.find("."+i.preloaderClass).remove(),s.params.loop&&t){const e=a.attr("data-swiper-slide-index");if(a.hasClass(s.params.slideDuplicateClass)){const t=s.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${s.params.slideDuplicateClass})`);s.lazy.loadInSlide(t.index(),!1)}else{const t=s.$wrapperEl.children(`.${s.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`);s.lazy.loadInSlide(t.index(),!1)}}s.emit("lazyImageReady",a[0],r[0]),s.params.autoHeight&&s.updateAutoHeight()}}),s.emit("lazyImageLoad",a[0],r[0])})},load(){const e=this,{$wrapperEl:t,params:s,slides:i,activeIndex:a}=e,n=e.virtual&&s.virtual.enabled,r=s.lazy;let l=s.slidesPerView;function o(e){if(n){if(t.children(`.${s.slideClass}[data-swiper-slide-index="${e}"]`).length)return!0}else if(i[e])return!0;return!1}function d(e){return n?$(e).attr("data-swiper-slide-index"):$(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+s.slideVisibleClass).each((t,s)=>{const i=n?$(s).attr("data-swiper-slide-index"):$(s).index();e.lazy.loadInSlide(i)});else if(l>1)for(let t=a;t<a+l;t+=1)o(t)&&e.lazy.loadInSlide(t);else e.lazy.loadInSlide(a);if(r.loadPrevNext)if(l>1||r.loadPrevNextAmount&&r.loadPrevNextAmount>1){const t=r.loadPrevNextAmount,s=l,n=Math.min(a+s+Math.max(t,s),i.length),d=Math.max(a-Math.max(s,t),0);for(let t=a+l;t<n;t+=1)o(t)&&e.lazy.loadInSlide(t);for(let t=d;t<a;t+=1)o(t)&&e.lazy.loadInSlide(t)}else{const i=t.children("."+s.slideNextClass);i.length>0&&e.lazy.loadInSlide(d(i));const a=t.children("."+s.slidePrevClass);a.length>0&&e.lazy.loadInSlide(d(a))}}};var Lazy$1={name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create(){Utils.extend(this,{lazy:{initialImageLoaded:!1,load:Lazy.load.bind(this),loadInSlide:Lazy.loadInSlide.bind(this)}})},on:{beforeInit(){const e=this;e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)},init(){const e=this;e.params.lazy.enabled&&!e.params.loop&&0===e.params.initialSlide&&e.lazy.load()},scroll(){const e=this;e.params.freeMode&&!e.params.freeModeSticky&&e.lazy.load()},resize(){const e=this;e.params.lazy.enabled&&e.lazy.load()},scrollbarDragMove(){const e=this;e.params.lazy.enabled&&e.lazy.load()},transitionStart(){const e=this;e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!e.lazy.initialImageLoaded)&&e.lazy.load()},transitionEnd(){const e=this;e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&e.lazy.load()},slideChange(){const e=this;e.params.lazy.enabled&&e.params.cssMode&&e.lazy.load()}}};const Controller={LinearSpline:function(e,t){const s=function(){let e,t,s;return(i,a)=>{for(t=-1,e=i.length;e-t>1;)s=e+t>>1,i[s]<=a?t=s:e=s;return e}}();let i,a;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(a=s(this.x,e),i=a-1,(e-this.x[i])*(this.y[a]-this.y[i])/(this.x[a]-this.x[i])+this.y[i]):0},this},getInterpolateFunction(e){const t=this;t.controller.spline||(t.controller.spline=t.params.loop?new Controller.LinearSpline(t.slidesGrid,e.slidesGrid):new Controller.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate(e,t){const s=this,i=s.controller.control;let a,n;function r(e){const t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),n=-s.controller.spline.interpolate(-t)),n&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),n=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(i))for(let e=0;e<i.length;e+=1)i[e]!==t&&i[e]instanceof Swiper&&r(i[e]);else i instanceof Swiper&&t!==i&&r(i)},setTransition(e,t){const s=this,i=s.controller.control;let a;function n(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.params.autoHeight&&Utils.nextTick(()=>{t.updateAutoHeight()}),t.$wrapperEl.transitionEnd(()=>{i&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(i))for(a=0;a<i.length;a+=1)i[a]!==t&&i[a]instanceof Swiper&&n(i[a]);else i instanceof Swiper&&t!==i&&n(i)}};var Controller$1={name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create(){Utils.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:Controller.getInterpolateFunction.bind(this),setTranslate:Controller.setTranslate.bind(this),setTransition:Controller.setTransition.bind(this)}})},on:{update(){const e=this;e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},resize(){const e=this;e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},observerUpdate(){const e=this;e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},setTranslate(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition(e,t){this.controller.control&&this.controller.setTransition(e,t)}}};const a11y={makeElFocusable:e=>(e.attr("tabIndex","0"),e),makeElNotFocusable:e=>(e.attr("tabIndex","-1"),e),addElRole:(e,t)=>(e.attr("role",t),e),addElLabel:(e,t)=>(e.attr("aria-label",t),e),disableEl:e=>(e.attr("aria-disabled",!0),e),enableEl:e=>(e.attr("aria-disabled",!1),e),onEnterKey(e){const t=this,s=t.params.a11y;if(13!==e.keyCode)return;const i=$(e.target);t.navigation&&t.navigation.$nextEl&&i.is(t.navigation.$nextEl)&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?t.a11y.notify(s.lastSlideMessage):t.a11y.notify(s.nextSlideMessage)),t.navigation&&t.navigation.$prevEl&&i.is(t.navigation.$prevEl)&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?t.a11y.notify(s.firstSlideMessage):t.a11y.notify(s.prevSlideMessage)),t.pagination&&i.is("."+t.params.pagination.bulletClass)&&i[0].click()},notify(e){const t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation(){const e=this;if(e.params.loop||!e.navigation)return;const{$nextEl:t,$prevEl:s}=e.navigation;s&&s.length>0&&(e.isBeginning?(e.a11y.disableEl(s),e.a11y.makeElNotFocusable(s)):(e.a11y.enableEl(s),e.a11y.makeElFocusable(s))),t&&t.length>0&&(e.isEnd?(e.a11y.disableEl(t),e.a11y.makeElNotFocusable(t)):(e.a11y.enableEl(t),e.a11y.makeElFocusable(t)))},updatePagination(){const e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each((s,i)=>{const a=$(i);e.a11y.makeElFocusable(a),e.a11y.addElRole(a,"button"),e.a11y.addElLabel(a,t.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1))})},init(){const e=this;e.$el.append(e.a11y.liveRegion);const t=e.params.a11y;let s,i;e.navigation&&e.navigation.$nextEl&&(s=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(i=e.navigation.$prevEl),s&&(e.a11y.makeElFocusable(s),e.a11y.addElRole(s,"button"),e.a11y.addElLabel(s,t.nextSlideMessage),s.on("keydown",e.a11y.onEnterKey)),i&&(e.a11y.makeElFocusable(i),e.a11y.addElRole(i,"button"),e.a11y.addElLabel(i,t.prevSlideMessage),i.on("keydown",e.a11y.onEnterKey)),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.on("keydown","."+e.params.pagination.bulletClass,e.a11y.onEnterKey)},destroy(){const e=this;let t,s;e.a11y.liveRegion&&e.a11y.liveRegion.length>0&&e.a11y.liveRegion.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(s=e.navigation.$prevEl),t&&t.off("keydown",e.a11y.onEnterKey),s&&s.off("keydown",e.a11y.onEnterKey),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.off("keydown","."+e.params.pagination.bulletClass,e.a11y.onEnterKey)}};var A11y={name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create(){const e=this;Utils.extend(e,{a11y:{liveRegion:$(`<span class="${e.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`)}}),Object.keys(a11y).forEach(t=>{e.a11y[t]=a11y[t].bind(e)})},on:{init(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy(){this.params.a11y.enabled&&this.a11y.destroy()}}};const History={init(){const e=this;if(!e.params.history)return;if(!win.history||!win.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);const t=e.history;t.initialized=!0,t.paths=History.getPathValues(),(t.paths.key||t.paths.value)&&(t.scrollToSlide(0,t.paths.value,e.params.runCallbacksOnInit),e.params.history.replaceState||win.addEventListener("popstate",e.history.setHistoryPopState))},destroy(){const e=this;e.params.history.replaceState||win.removeEventListener("popstate",e.history.setHistoryPopState)},setHistoryPopState(){this.history.paths=History.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues(){const e=win.location.pathname.slice(1).split("/").filter(e=>""!==e),t=e.length;return{key:e[t-2],value:e[t-1]}},setHistory(e,t){if(!this.history.initialized||!this.params.history.enabled)return;const s=this.slides.eq(t);let i=History.slugify(s.attr("data-history"));win.location.pathname.includes(e)||(i=`${e}/${i}`);const a=win.history.state;a&&a.value===i||(this.params.history.replaceState?win.history.replaceState({value:i},null,i):win.history.pushState({value:i},null,i))},slugify:e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),scrollToSlide(e,t,s){const i=this;if(t)for(let a=0,n=i.slides.length;a<n;a+=1){const n=i.slides.eq(a);if(History.slugify(n.attr("data-history"))===t&&!n.hasClass(i.params.slideDuplicateClass)){const t=n.index();i.slideTo(t,e,s)}}else i.slideTo(0,e,s)}};var History$1={name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create(){Utils.extend(this,{history:{init:History.init.bind(this),setHistory:History.setHistory.bind(this),setHistoryPopState:History.setHistoryPopState.bind(this),scrollToSlide:History.scrollToSlide.bind(this),destroy:History.destroy.bind(this)}})},on:{init(){const e=this;e.params.history.enabled&&e.history.init()},destroy(){const e=this;e.params.history.enabled&&e.history.destroy()},transitionEnd(){const e=this;e.history.initialized&&e.history.setHistory(e.params.history.key,e.activeIndex)},slideChange(){const e=this;e.history.initialized&&e.params.cssMode&&e.history.setHistory(e.params.history.key,e.activeIndex)}}};const HashNavigation={onHashCange(){const e=this;e.emit("hashChange");const t=doc.location.hash.replace("#","");if(t!==e.slides.eq(e.activeIndex).attr("data-hash")){const s=e.$wrapperEl.children(`.${e.params.slideClass}[data-hash="${t}"]`).index();if(void 0===s)return;e.slideTo(s)}},setHash(){const e=this;if(e.hashNavigation.initialized&&e.params.hashNavigation.enabled)if(e.params.hashNavigation.replaceState&&win.history&&win.history.replaceState)win.history.replaceState(null,null,"#"+e.slides.eq(e.activeIndex).attr("data-hash")||""),e.emit("hashSet");else{const t=e.slides.eq(e.activeIndex),s=t.attr("data-hash")||t.attr("data-history");doc.location.hash=s||"",e.emit("hashSet")}},init(){const e=this;if(!e.params.hashNavigation.enabled||e.params.history&&e.params.history.enabled)return;e.hashNavigation.initialized=!0;const t=doc.location.hash.replace("#","");if(t){const s=0;for(let i=0,a=e.slides.length;i<a;i+=1){const a=e.slides.eq(i);if((a.attr("data-hash")||a.attr("data-history"))===t&&!a.hasClass(e.params.slideDuplicateClass)){const t=a.index();e.slideTo(t,s,e.params.runCallbacksOnInit,!0)}}}e.params.hashNavigation.watchState&&$(win).on("hashchange",e.hashNavigation.onHashCange)},destroy(){const e=this;e.params.hashNavigation.watchState&&$(win).off("hashchange",e.hashNavigation.onHashCange)}};var HashNavigation$1={name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create(){Utils.extend(this,{hashNavigation:{initialized:!1,init:HashNavigation.init.bind(this),destroy:HashNavigation.destroy.bind(this),setHash:HashNavigation.setHash.bind(this),onHashCange:HashNavigation.onHashCange.bind(this)}})},on:{init(){const e=this;e.params.hashNavigation.enabled&&e.hashNavigation.init()},destroy(){const e=this;e.params.hashNavigation.enabled&&e.hashNavigation.destroy()},transitionEnd(){const e=this;e.hashNavigation.initialized&&e.hashNavigation.setHash()},slideChange(){const e=this;e.hashNavigation.initialized&&e.params.cssMode&&e.hashNavigation.setHash()}}};const Autoplay={run(){const e=this,t=e.slides.eq(e.activeIndex);let s=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(s=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(e.autoplay.timeout),e.autoplay.timeout=Utils.nextTick(()=>{e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")),e.params.cssMode&&e.autoplay.running&&e.autoplay.run()},s)},start(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0))},stop(){const e=this;return!!e.autoplay.running&&(void 0!==e.autoplay.timeout&&(e.autoplay.timeout&&(clearTimeout(e.autoplay.timeout),e.autoplay.timeout=void 0),e.autoplay.running=!1,e.emit("autoplayStop"),!0))},pause(e){const t=this;t.autoplay.running&&(t.autoplay.paused||(t.autoplay.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?(t.$wrapperEl[0].addEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].addEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd)):(t.autoplay.paused=!1,t.autoplay.run())))}};var Autoplay$1={name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create(){const e=this;Utils.extend(e,{autoplay:{running:!1,paused:!1,run:Autoplay.run.bind(e),start:Autoplay.start.bind(e),stop:Autoplay.stop.bind(e),pause:Autoplay.pause.bind(e),onVisibilityChange(){"hidden"===document.visibilityState&&e.autoplay.running&&e.autoplay.pause(),"visible"===document.visibilityState&&e.autoplay.paused&&(e.autoplay.run(),e.autoplay.paused=!1)},onTransitionEnd(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===this&&(e.$wrapperEl[0].removeEventListener("transitionend",e.autoplay.onTransitionEnd),e.$wrapperEl[0].removeEventListener("webkitTransitionEnd",e.autoplay.onTransitionEnd),e.autoplay.paused=!1,e.autoplay.running?e.autoplay.run():e.autoplay.stop())}}})},on:{init(){const e=this;e.params.autoplay.enabled&&(e.autoplay.start(),document.addEventListener("visibilitychange",e.autoplay.onVisibilityChange))},beforeTransitionStart(e,t){const s=this;s.autoplay.running&&(t||!s.params.autoplay.disableOnInteraction?s.autoplay.pause(e):s.autoplay.stop())},sliderFirstMove(){const e=this;e.autoplay.running&&(e.params.autoplay.disableOnInteraction?e.autoplay.stop():e.autoplay.pause())},touchEnd(){const e=this;e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&e.autoplay.run()},destroy(){const e=this;e.autoplay.running&&e.autoplay.stop(),document.removeEventListener("visibilitychange",e.autoplay.onVisibilityChange)}}};const Fade={setTranslate(){const e=this,{slides:t}=e;for(let s=0;s<t.length;s+=1){const t=e.slides.eq(s);let i=-t[0].swiperSlideOffset;e.params.virtualTranslate||(i-=e.translate);let a=0;e.isHorizontal()||(a=i,i=0);const n=e.params.fadeEffect.crossFade?Math.max(1-Math.abs(t[0].progress),0):1+Math.min(Math.max(t[0].progress,-1),0);t.css({opacity:n}).transform(`translate3d(${i}px, ${a}px, 0px)`)}},setTransition(e){const t=this,{slides:s,$wrapperEl:i}=t;if(s.transition(e),t.params.virtualTranslate&&0!==e){let e=!1;s.transitionEnd(()=>{if(e)return;if(!t||t.destroyed)return;e=!0,t.animating=!1;const s=["webkitTransitionEnd","transitionend"];for(let e=0;e<s.length;e+=1)i.trigger(s[e])})}}};var EffectFade={name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create(){Utils.extend(this,{fadeEffect:{setTranslate:Fade.setTranslate.bind(this),setTransition:Fade.setTransition.bind(this)}})},on:{beforeInit(){if("fade"!==this.params.effect)return;this.classNames.push(this.params.containerModifierClass+"fade");const e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};Utils.extend(this.params,e),Utils.extend(this.originalParams,e)},setTranslate(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}};const Cube={setTranslate(){const{$el:e,$wrapperEl:t,slides:s,width:i,height:a,rtlTranslate:n,size:r}=this,l=this.params.cubeEffect,o=this.isHorizontal(),d=this.virtual&&this.params.virtual.enabled;let p,c=0;l.shadow&&(o?(p=t.find(".swiper-cube-shadow"),0===p.length&&(p=$('<div class="swiper-cube-shadow"></div>'),t.append(p)),p.css({height:i+"px"})):(p=e.find(".swiper-cube-shadow"),0===p.length&&(p=$('<div class="swiper-cube-shadow"></div>'),e.append(p))));for(let e=0;e<s.length;e+=1){const t=s.eq(e);let i=e;d&&(i=parseInt(t.attr("data-swiper-slide-index"),10));let a=90*i,p=Math.floor(a/360);n&&(a=-a,p=Math.floor(-a/360));const h=Math.max(Math.min(t[0].progress,1),-1);let u=0,m=0,f=0;i%4==0?(u=4*-p*r,f=0):(i-1)%4==0?(u=0,f=4*-p*r):(i-2)%4==0?(u=r+4*p*r,f=r):(i-3)%4==0&&(u=-r,f=3*r+4*r*p),n&&(u=-u),o||(m=u,u=0);const g=`rotateX(${o?0:-a}deg) rotateY(${o?a:0}deg) translate3d(${u}px, ${m}px, ${f}px)`;if(h<=1&&h>-1&&(c=90*i+90*h,n&&(c=90*-i-90*h)),t.transform(g),l.slideShadows){let e=o?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=o?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=$(`<div class="swiper-slide-shadow-${o?"left":"top"}"></div>`),t.append(e)),0===s.length&&(s=$(`<div class="swiper-slide-shadow-${o?"right":"bottom"}"></div>`),t.append(s)),e.length&&(e[0].style.opacity=Math.max(-h,0)),s.length&&(s[0].style.opacity=Math.max(h,0))}}if(t.css({"-webkit-transform-origin":`50% 50% -${r/2}px`,"-moz-transform-origin":`50% 50% -${r/2}px`,"-ms-transform-origin":`50% 50% -${r/2}px`,"transform-origin":`50% 50% -${r/2}px`}),l.shadow)if(o)p.transform(`translate3d(0px, ${i/2+l.shadowOffset}px, ${-i/2}px) rotateX(90deg) rotateZ(0deg) scale(${l.shadowScale})`);else{const e=Math.abs(c)-90*Math.floor(Math.abs(c)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=l.shadowScale,i=l.shadowScale/t,n=l.shadowOffset;p.transform(`scale3d(${s}, 1, ${i}) translate3d(0px, ${a/2+n}px, ${-a/2/i}px) rotateX(-90deg)`)}const h=Browser.isSafari||Browser.isUiWebView?-r/2:0;t.transform(`translate3d(0px,0,${h}px) rotateX(${this.isHorizontal()?0:c}deg) rotateY(${this.isHorizontal()?-c:0}deg)`)},setTransition(e){const{$el:t,slides:s}=this;s.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}};var EffectCube={name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create(){Utils.extend(this,{cubeEffect:{setTranslate:Cube.setTranslate.bind(this),setTransition:Cube.setTransition.bind(this)}})},on:{beforeInit(){if("cube"!==this.params.effect)return;this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");const e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};Utils.extend(this.params,e),Utils.extend(this.originalParams,e)},setTranslate(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}};const Flip={setTranslate(){const e=this,{slides:t,rtlTranslate:s}=e;for(let i=0;i<t.length;i+=1){const a=t.eq(i);let n=a[0].progress;e.params.flipEffect.limitRotation&&(n=Math.max(Math.min(a[0].progress,1),-1));let r=-180*n,l=0,o=-a[0].swiperSlideOffset,d=0;if(e.isHorizontal()?s&&(r=-r):(d=o,o=0,l=-r,r=0),a[0].style.zIndex=-Math.abs(Math.round(n))+t.length,e.params.flipEffect.slideShadows){let t=e.isHorizontal()?a.find(".swiper-slide-shadow-left"):a.find(".swiper-slide-shadow-top"),s=e.isHorizontal()?a.find(".swiper-slide-shadow-right"):a.find(".swiper-slide-shadow-bottom");0===t.length&&(t=$(`<div class="swiper-slide-shadow-${e.isHorizontal()?"left":"top"}"></div>`),a.append(t)),0===s.length&&(s=$(`<div class="swiper-slide-shadow-${e.isHorizontal()?"right":"bottom"}"></div>`),a.append(s)),t.length&&(t[0].style.opacity=Math.max(-n,0)),s.length&&(s[0].style.opacity=Math.max(n,0))}a.transform(`translate3d(${o}px, ${d}px, 0px) rotateX(${l}deg) rotateY(${r}deg)`)}},setTransition(e){const t=this,{slides:s,activeIndex:i,$wrapperEl:a}=t;if(s.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){let e=!1;s.eq(i).transitionEnd((function(){if(e)return;if(!t||t.destroyed)return;e=!0,t.animating=!1;const s=["webkitTransitionEnd","transitionend"];for(let e=0;e<s.length;e+=1)a.trigger(s[e])}))}}};var EffectFlip={name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create(){Utils.extend(this,{flipEffect:{setTranslate:Flip.setTranslate.bind(this),setTransition:Flip.setTransition.bind(this)}})},on:{beforeInit(){if("flip"!==this.params.effect)return;this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");const e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};Utils.extend(this.params,e),Utils.extend(this.originalParams,e)},setTranslate(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}};const Coverflow={setTranslate(){const{width:e,height:t,slides:s,$wrapperEl:i,slidesSizesGrid:a}=this,n=this.params.coverflowEffect,r=this.isHorizontal(),l=this.translate,o=r?e/2-l:t/2-l,d=r?n.rotate:-n.rotate,p=n.depth;for(let e=0,t=s.length;e<t;e+=1){const t=s.eq(e),i=a[e],l=(o-t[0].swiperSlideOffset-i/2)/i*n.modifier;let c=r?d*l:0,h=r?0:d*l,u=-p*Math.abs(l),m=n.stretch;"string"==typeof m&&-1!==m.indexOf("%")&&(m=parseFloat(n.stretch)/100*i);let f=r?0:m*l,g=r?m*l:0;Math.abs(g)<.001&&(g=0),Math.abs(f)<.001&&(f=0),Math.abs(u)<.001&&(u=0),Math.abs(c)<.001&&(c=0),Math.abs(h)<.001&&(h=0);const v=`translate3d(${g}px,${f}px,${u}px)  rotateX(${h}deg) rotateY(${c}deg)`;if(t.transform(v),t[0].style.zIndex=1-Math.abs(Math.round(l)),n.slideShadows){let e=r?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=r?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=$(`<div class="swiper-slide-shadow-${r?"left":"top"}"></div>`),t.append(e)),0===s.length&&(s=$(`<div class="swiper-slide-shadow-${r?"right":"bottom"}"></div>`),t.append(s)),e.length&&(e[0].style.opacity=l>0?l:0),s.length&&(s[0].style.opacity=-l>0?-l:0)}}if(Support.pointerEvents||Support.prefixedPointerEvents){i[0].style.perspectiveOrigin=o+"px 50%"}},setTransition(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}};var EffectCoverflow={name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create(){Utils.extend(this,{coverflowEffect:{setTranslate:Coverflow.setTranslate.bind(this),setTransition:Coverflow.setTransition.bind(this)}})},on:{beforeInit(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}};const Thumbs={init(){const e=this,{thumbs:t}=e.params,s=e.constructor;t.swiper instanceof s?(e.thumbs.swiper=t.swiper,Utils.extend(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Utils.extend(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):Utils.isObject(t.swiper)&&(e.thumbs.swiper=new s(Utils.extend({},t.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),e.thumbs.swiperCreated=!0),e.thumbs.swiper.$el.addClass(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",e.thumbs.onThumbClick)},onThumbClick(){const e=this,t=e.thumbs.swiper;if(!t)return;const s=t.clickedIndex,i=t.clickedSlide;if(i&&$(i).hasClass(e.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let a;if(a=t.params.loop?parseInt($(t.clickedSlide).attr("data-swiper-slide-index"),10):s,e.params.loop){let t=e.activeIndex;e.slides.eq(t).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,t=e.activeIndex);const s=e.slides.eq(t).prevAll(`[data-swiper-slide-index="${a}"]`).eq(0).index(),i=e.slides.eq(t).nextAll(`[data-swiper-slide-index="${a}"]`).eq(0).index();a=void 0===s?i:void 0===i?s:i-t<t-s?i:s}e.slideTo(a)},update(e){const t=this,s=t.thumbs.swiper;if(!s)return;const i="auto"===s.params.slidesPerView?s.slidesPerViewDynamic():s.params.slidesPerView,a=t.params.thumbs.autoScrollOffset,n=a&&!s.params.loop;if(t.realIndex!==s.realIndex||n){let r,l,o=s.activeIndex;if(s.params.loop){s.slides.eq(o).hasClass(s.params.slideDuplicateClass)&&(s.loopFix(),s._clientLeft=s.$wrapperEl[0].clientLeft,o=s.activeIndex);const e=s.slides.eq(o).prevAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index(),i=s.slides.eq(o).nextAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index();r=void 0===e?i:void 0===i?e:i-o==o-e?o:i-o<o-e?i:e,l=t.activeIndex>t.previousIndex?"next":"prev"}else r=t.realIndex,l=r>t.previousIndex?"next":"prev";n&&(r+="next"===l?a:-1*a),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(r)<0&&(s.params.centeredSlides?r=r>o?r-Math.floor(i/2)+1:r+Math.floor(i/2)-1:r>o&&(r=r-i+1),s.slideTo(r,e?0:void 0))}let r=1;const l=t.params.thumbs.slideThumbActiveClass;if(t.params.slidesPerView>1&&!t.params.centeredSlides&&(r=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(r=1),r=Math.floor(r),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e<r;e+=1)s.$wrapperEl.children(`[data-swiper-slide-index="${t.realIndex+e}"]`).addClass(l);else for(let e=0;e<r;e+=1)s.slides.eq(t.realIndex+e).addClass(l)}};var Thumbs$1={name:"thumbs",params:{thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create(){Utils.extend(this,{thumbs:{swiper:null,init:Thumbs.init.bind(this),update:Thumbs.update.bind(this),onThumbClick:Thumbs.onThumbClick.bind(this)}})},on:{beforeInit(){const{thumbs:e}=this.params;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange(){this.thumbs.swiper&&this.thumbs.update()},update(){this.thumbs.swiper&&this.thumbs.update()},resize(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate(){this.thumbs.swiper&&this.thumbs.update()},setTransition(e){const t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy(){const e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}};const components=[Device$1,Support$1,Browser$1,Resize,Observer$1,Virtual$1,Keyboard$1,Mousewheel$1,Navigation$1,Pagination$1,Scrollbar$1,Parallax$1,Zoom$1,Lazy$1,Controller$1,A11y,History$1,HashNavigation$1,Autoplay$1,EffectFade,EffectCube,EffectFlip,EffectCoverflow,Thumbs$1];void 0===Swiper.use&&(Swiper.use=Swiper.Class.use,Swiper.installModule=Swiper.Class.installModule),Swiper.use(components);export default Swiper;
14
+//# sourceMappingURL=swiper.esm.browser.bundle.min.js.map
0 15
\ No newline at end of file
1 16
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"sources":["0"],"names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","doc","document","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","win","window","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","Dom7","[object Object]","arr","self","i","$","selector","context","els","tempParent","html","trim","indexOf","toCreate","innerHTML","push","match","split","nodeType","unique","uniqueArray","addClass","className","classes","j","classList","add","removeClass","remove","hasClass","contains","toggleClass","toggle","attr","attrs","value","arguments","getAttribute","attrName","removeAttr","removeAttribute","data","el","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","duration","webkitTransitionDuration","transitionDuration","on","args","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","undefined","events","event","dom7LiveListeners","proxyListener","dom7Listeners","off","handlers","handler","dom7proxy","splice","trigger","evt","detail","bubbles","cancelable","filter","dataIndex","dispatchEvent","transitionEnd","callback","dom","fireCallBack","call","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","matchedItems","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","index","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","removeChild","toAdd","fn","prototype","Class","Methods","methodName","Utils","object","nextTick","delay","now","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","map","a","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","url","query","params","param","urlToParse","paramsPart","decodeURIComponent","o","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","opts","defineProperty","gestures","SwiperClass","eventsListeners","eventName","priority","method","onceHandler","f7proxy","eventHandler","Array","isArray","slice","instanceParams","instance","modules","moduleName","module","modulesParams","moduleParams","modulePropName","moduleProp","bind","moduleEventName","create","components","use","name","proto","static","install","m","installModule","updateSize","swiper","width","height","$el","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","size","updateSlides","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","slidesNumberEvenToRows","slideSize","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","Math","floor","ceil","slidesPerView","slidesPerColumnFill","max","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","swiperSlideSize","centeredSlides","abs","slidesPerGroupSkip","newSlidesGrid","effect","setWrapperSize","slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","emit","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","update","getTranslate","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","destroyed","transitionStart","direction","dir","transitionEnd$1","transition$1","slideTo","initialSlide","allowSlideNext","allowSlidePrev","t","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","val","normalizedTranslate","normalizedSnapGrid","prevIndex","prevSnap","slideReset","slideToClosest","threshold","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","diff","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","grabCursor","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","manipulation","Device","platform","ua","device","ios","android","androidChrome","desktop","iphone","ipod","ipad","edge","ie","firefox","macos","windows","cordova","phonegap","electron","screenWidth","screenHeight","toLowerCase","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","touchEndTime","timeDiff","lastClickTime","currentPos","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","freeModeMomentumBounceRatio","needsLoopFix","freeModeMomentumBounce","freeModeSticky","once","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","ratio","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","attachEvents","touchEvents","start","move","end","passiveListeners","passive","cancel","updateOnWindowResize","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","containerModifierClass","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","innerHeight","sort","b","innerWidth","addClasses","classNames","suffixes","suffix","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","images","wasLocked","lastSlidePosition","checkOverflow$1","defaults","init","uniqueNavElements","wrapperClass","prototypes","extendedDefaults","Swiper","super","prototypeGroup","protoMethod","moduleParamName","swiperParams","useModulesParams","passedParams","swipers","containerEl","newParams","shadowRoot","options","touchEventsTouch","touchEventsDesktop","clickTimeout","useModules","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","slideEl","deleteInstance","cleanStyles","deleteProps","newDefaults","Device$1","Support$1","support","Browser","isEdge","isSafari","isUiWebView","test","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","ObserverFunc","mutations","observerUpdate","requestAnimationFrame","observe","attributes","childList","characterData","observers","observeParents","containerParents","attach","observeSlideChildren","disconnect","Observer$1","destroy","Virtual","force","addSlidesBefore","addSlidesAfter","from","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","prependIndexes","appendIndexes","cache","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","Virtual$1","overwriteParams","Keyboard","kc","keyCode","charCode","shiftKey","altKey","ctrlKey","metaKey","keyboard","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","handle","Keyboard$1","enable","disable","isEventSupported","isSupported","element","implementation","hasFeature","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","mouseEntered","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent","sign","ignoreWheelEvents","sensitivity","timeout","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","raw","animateSlider","releaseScroll","getTime","handleMouseEnter","handleMouseLeave","Mousewheel$1","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onNextClick","onPrevClick","Navigation$1","hideOnClick","hiddenClass","isHidden","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","progressbarFillClass","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","Pagination$1","number","render","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","clientX","clientY","dragStartPos","positionRatio","getPointerPosition","setDragPosition","dragTimeout","snapOnRelease","activeListener","onDragStart","onDragMove","onDragEnd","$swiperEl","dragClass","dragEl","draggable","enableDraggable","disableDraggable","Scrollbar$1","Parallax","p","currentOpacity","currentScale","parallax","setTransform","parallaxEl","$parallaxEl","parallaxDuration","Parallax$1","Zoom","x1","y1","x2","y2","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","getDistanceBetweenTouches","$imageEl","$imageWrapEl","containerClass","maxRatio","isScaling","scaleMove","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","out","in","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","activeListenerWithCapture","slideSelector","onGestureStart","onGestureChange","onGestureEnd","Zoom$1","get","onTransitionEnd","Lazy","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","$pictureEl","sourceIndex","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","loadInSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Lazy$1","loadOnTransitionStart","Controller","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","c","controller","spline","controlled","control","controlledTranslate","setControlledTranslate","by","getInterpolateFunction","inverse","setControlledTransition","Controller$1","a11y","makeElFocusable","makeElNotFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","message","notification","liveRegion","bulletEl","$bulletEl","paginationBulletMessage","onEnterKey","A11y","notificationClass","updateNavigation","updatePagination","History","hashNavigation","paths","getPathValues","scrollToSlide","setHistoryPopState","pathArray","part","slugify","includes","currentState","state","History$1","setHistory","HashNavigation","newHash","watchState","onHashCange","HashNavigation$1","setHash","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","waitForTransition","Autoplay$1","disableOnInteraction","pause","visibilityState","onVisibilityChange","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","EffectFade","Cube","swiperWidth","swiperHeight","cubeEffect","$cubeShadowEl","wrapperRotate","shadow","slideAngle","round","tz","slideShadows","shadowBefore","shadowAfter","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowOffset","shadowScale","shadowAngle","sin","cos","scale1","scale2","zFactor","EffectCube","Flip","flipEffect","limitRotation","rotateY","rotateX","zIndex","EffectFlip","Coverflow","coverflowEffect","center","rotate","depth","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","prefixedPointerEvents","perspectiveOrigin","EffectCoverflow","Thumbs","thumbs","thumbsParams","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","initial","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","Thumbs$1"],"mappings":"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","file":"swiper.esm.browser.bundle.min.js"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,7751 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, data, transform, transition as transition$1, on, off, trigger, transitionEnd as transitionEnd$1, outerWidth, outerHeight, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove, add, styles } from 'dom7/dist/dom7.modular';
14
+import { window, document as document$1 } from 'ssr-window';
15
+
16
+const Methods = {
17
+  addClass,
18
+  removeClass,
19
+  hasClass,
20
+  toggleClass,
21
+  attr,
22
+  removeAttr,
23
+  data,
24
+  transform,
25
+  transition: transition$1,
26
+  on,
27
+  off,
28
+  trigger,
29
+  transitionEnd: transitionEnd$1,
30
+  outerWidth,
31
+  outerHeight,
32
+  offset,
33
+  css,
34
+  each,
35
+  html,
36
+  text,
37
+  is,
38
+  index,
39
+  eq,
40
+  append,
41
+  prepend,
42
+  next,
43
+  nextAll,
44
+  prev,
45
+  prevAll,
46
+  parent,
47
+  parents,
48
+  closest,
49
+  find,
50
+  children,
51
+  filter,
52
+  remove,
53
+  add,
54
+  styles,
55
+};
56
+
57
+Object.keys(Methods).forEach((methodName) => {
58
+  $.fn[methodName] = $.fn[methodName] || Methods[methodName];
59
+});
60
+
61
+const Utils = {
62
+  deleteProps(obj) {
63
+    const object = obj;
64
+    Object.keys(object).forEach((key) => {
65
+      try {
66
+        object[key] = null;
67
+      } catch (e) {
68
+        // no getter for object
69
+      }
70
+      try {
71
+        delete object[key];
72
+      } catch (e) {
73
+        // something got wrong
74
+      }
75
+    });
76
+  },
77
+  nextTick(callback, delay = 0) {
78
+    return setTimeout(callback, delay);
79
+  },
80
+  now() {
81
+    return Date.now();
82
+  },
83
+  getTranslate(el, axis = 'x') {
84
+    let matrix;
85
+    let curTransform;
86
+    let transformMatrix;
87
+
88
+    const curStyle = window.getComputedStyle(el, null);
89
+
90
+    if (window.WebKitCSSMatrix) {
91
+      curTransform = curStyle.transform || curStyle.webkitTransform;
92
+      if (curTransform.split(',').length > 6) {
93
+        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
94
+      }
95
+      // Some old versions of Webkit choke when 'none' is passed; pass
96
+      // empty string instead in this case
97
+      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
98
+    } else {
99
+      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
100
+      matrix = transformMatrix.toString().split(',');
101
+    }
102
+
103
+    if (axis === 'x') {
104
+      // Latest Chrome and webkits Fix
105
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
106
+      // Crazy IE10 Matrix
107
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
108
+      // Normal Browsers
109
+      else curTransform = parseFloat(matrix[4]);
110
+    }
111
+    if (axis === 'y') {
112
+      // Latest Chrome and webkits Fix
113
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
114
+      // Crazy IE10 Matrix
115
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
116
+      // Normal Browsers
117
+      else curTransform = parseFloat(matrix[5]);
118
+    }
119
+    return curTransform || 0;
120
+  },
121
+  parseUrlQuery(url) {
122
+    const query = {};
123
+    let urlToParse = url || window.location.href;
124
+    let i;
125
+    let params;
126
+    let param;
127
+    let length;
128
+    if (typeof urlToParse === 'string' && urlToParse.length) {
129
+      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
130
+      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
131
+      length = params.length;
132
+
133
+      for (i = 0; i < length; i += 1) {
134
+        param = params[i].replace(/#\S+/g, '').split('=');
135
+        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
136
+      }
137
+    }
138
+    return query;
139
+  },
140
+  isObject(o) {
141
+    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
142
+  },
143
+  extend(...args) {
144
+    const to = Object(args[0]);
145
+    for (let i = 1; i < args.length; i += 1) {
146
+      const nextSource = args[i];
147
+      if (nextSource !== undefined && nextSource !== null) {
148
+        const keysArray = Object.keys(Object(nextSource));
149
+        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
150
+          const nextKey = keysArray[nextIndex];
151
+          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
152
+          if (desc !== undefined && desc.enumerable) {
153
+            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
154
+              Utils.extend(to[nextKey], nextSource[nextKey]);
155
+            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
156
+              to[nextKey] = {};
157
+              Utils.extend(to[nextKey], nextSource[nextKey]);
158
+            } else {
159
+              to[nextKey] = nextSource[nextKey];
160
+            }
161
+          }
162
+        }
163
+      }
164
+    }
165
+    return to;
166
+  },
167
+};
168
+
169
+const Support = (function Support() {
170
+  return {
171
+    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document$1 instanceof window.DocumentTouch)),
172
+
173
+    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,
174
+
175
+    observer: (function checkObserver() {
176
+      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);
177
+    }()),
178
+
179
+    passiveListener: (function checkPassiveListener() {
180
+      let supportsPassive = false;
181
+      try {
182
+        const opts = Object.defineProperty({}, 'passive', {
183
+          // eslint-disable-next-line
184
+          get() {
185
+            supportsPassive = true;
186
+          },
187
+        });
188
+        window.addEventListener('testPassiveListener', null, opts);
189
+      } catch (e) {
190
+        // No support
191
+      }
192
+      return supportsPassive;
193
+    }()),
194
+
195
+    gestures: (function checkGestures() {
196
+      return 'ongesturestart' in window;
197
+    }()),
198
+  };
199
+}());
200
+
201
+class SwiperClass {
202
+  constructor(params = {}) {
203
+    const self = this;
204
+    self.params = params;
205
+
206
+    // Events
207
+    self.eventsListeners = {};
208
+
209
+    if (self.params && self.params.on) {
210
+      Object.keys(self.params.on).forEach((eventName) => {
211
+        self.on(eventName, self.params.on[eventName]);
212
+      });
213
+    }
214
+  }
215
+
216
+  on(events, handler, priority) {
217
+    const self = this;
218
+    if (typeof handler !== 'function') return self;
219
+    const method = priority ? 'unshift' : 'push';
220
+    events.split(' ').forEach((event) => {
221
+      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
222
+      self.eventsListeners[event][method](handler);
223
+    });
224
+    return self;
225
+  }
226
+
227
+  once(events, handler, priority) {
228
+    const self = this;
229
+    if (typeof handler !== 'function') return self;
230
+    function onceHandler(...args) {
231
+      self.off(events, onceHandler);
232
+      if (onceHandler.f7proxy) {
233
+        delete onceHandler.f7proxy;
234
+      }
235
+      handler.apply(self, args);
236
+    }
237
+    onceHandler.f7proxy = handler;
238
+    return self.on(events, onceHandler, priority);
239
+  }
240
+
241
+  off(events, handler) {
242
+    const self = this;
243
+    if (!self.eventsListeners) return self;
244
+    events.split(' ').forEach((event) => {
245
+      if (typeof handler === 'undefined') {
246
+        self.eventsListeners[event] = [];
247
+      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
248
+        self.eventsListeners[event].forEach((eventHandler, index) => {
249
+          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
250
+            self.eventsListeners[event].splice(index, 1);
251
+          }
252
+        });
253
+      }
254
+    });
255
+    return self;
256
+  }
257
+
258
+  emit(...args) {
259
+    const self = this;
260
+    if (!self.eventsListeners) return self;
261
+    let events;
262
+    let data;
263
+    let context;
264
+    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
265
+      events = args[0];
266
+      data = args.slice(1, args.length);
267
+      context = self;
268
+    } else {
269
+      events = args[0].events;
270
+      data = args[0].data;
271
+      context = args[0].context || self;
272
+    }
273
+    const eventsArray = Array.isArray(events) ? events : events.split(' ');
274
+    eventsArray.forEach((event) => {
275
+      if (self.eventsListeners && self.eventsListeners[event]) {
276
+        const handlers = [];
277
+        self.eventsListeners[event].forEach((eventHandler) => {
278
+          handlers.push(eventHandler);
279
+        });
280
+        handlers.forEach((eventHandler) => {
281
+          eventHandler.apply(context, data);
282
+        });
283
+      }
284
+    });
285
+    return self;
286
+  }
287
+
288
+  useModulesParams(instanceParams) {
289
+    const instance = this;
290
+    if (!instance.modules) return;
291
+    Object.keys(instance.modules).forEach((moduleName) => {
292
+      const module = instance.modules[moduleName];
293
+      // Extend params
294
+      if (module.params) {
295
+        Utils.extend(instanceParams, module.params);
296
+      }
297
+    });
298
+  }
299
+
300
+  useModules(modulesParams = {}) {
301
+    const instance = this;
302
+    if (!instance.modules) return;
303
+    Object.keys(instance.modules).forEach((moduleName) => {
304
+      const module = instance.modules[moduleName];
305
+      const moduleParams = modulesParams[moduleName] || {};
306
+      // Extend instance methods and props
307
+      if (module.instance) {
308
+        Object.keys(module.instance).forEach((modulePropName) => {
309
+          const moduleProp = module.instance[modulePropName];
310
+          if (typeof moduleProp === 'function') {
311
+            instance[modulePropName] = moduleProp.bind(instance);
312
+          } else {
313
+            instance[modulePropName] = moduleProp;
314
+          }
315
+        });
316
+      }
317
+      // Add event listeners
318
+      if (module.on && instance.on) {
319
+        Object.keys(module.on).forEach((moduleEventName) => {
320
+          instance.on(moduleEventName, module.on[moduleEventName]);
321
+        });
322
+      }
323
+
324
+      // Module create callback
325
+      if (module.create) {
326
+        module.create.bind(instance)(moduleParams);
327
+      }
328
+    });
329
+  }
330
+
331
+  static set components(components) {
332
+    const Class = this;
333
+    if (!Class.use) return;
334
+    Class.use(components);
335
+  }
336
+
337
+  static installModule(module, ...params) {
338
+    const Class = this;
339
+    if (!Class.prototype.modules) Class.prototype.modules = {};
340
+    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);
341
+    Class.prototype.modules[name] = module;
342
+    // Prototype
343
+    if (module.proto) {
344
+      Object.keys(module.proto).forEach((key) => {
345
+        Class.prototype[key] = module.proto[key];
346
+      });
347
+    }
348
+    // Class
349
+    if (module.static) {
350
+      Object.keys(module.static).forEach((key) => {
351
+        Class[key] = module.static[key];
352
+      });
353
+    }
354
+    // Callback
355
+    if (module.install) {
356
+      module.install.apply(Class, params);
357
+    }
358
+    return Class;
359
+  }
360
+
361
+  static use(module, ...params) {
362
+    const Class = this;
363
+    if (Array.isArray(module)) {
364
+      module.forEach((m) => Class.installModule(m));
365
+      return Class;
366
+    }
367
+    return Class.installModule(module, ...params);
368
+  }
369
+}
370
+
371
+function updateSize () {
372
+  const swiper = this;
373
+  let width;
374
+  let height;
375
+  const $el = swiper.$el;
376
+  if (typeof swiper.params.width !== 'undefined') {
377
+    width = swiper.params.width;
378
+  } else {
379
+    width = $el[0].clientWidth;
380
+  }
381
+  if (typeof swiper.params.height !== 'undefined') {
382
+    height = swiper.params.height;
383
+  } else {
384
+    height = $el[0].clientHeight;
385
+  }
386
+  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
387
+    return;
388
+  }
389
+
390
+  // Subtract paddings
391
+  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
392
+  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
393
+
394
+  Utils.extend(swiper, {
395
+    width,
396
+    height,
397
+    size: swiper.isHorizontal() ? width : height,
398
+  });
399
+}
400
+
401
+function updateSlides () {
402
+  const swiper = this;
403
+  const params = swiper.params;
404
+
405
+  const {
406
+    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,
407
+  } = swiper;
408
+  const isVirtual = swiper.virtual && params.virtual.enabled;
409
+  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
410
+  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);
411
+  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
412
+  let snapGrid = [];
413
+  const slidesGrid = [];
414
+  const slidesSizesGrid = [];
415
+
416
+  function slidesForMargin(slideIndex) {
417
+    if (!params.cssMode) return true;
418
+    if (slideIndex === slides.length - 1) {
419
+      return false;
420
+    }
421
+    return true;
422
+  }
423
+
424
+  let offsetBefore = params.slidesOffsetBefore;
425
+  if (typeof offsetBefore === 'function') {
426
+    offsetBefore = params.slidesOffsetBefore.call(swiper);
427
+  }
428
+
429
+  let offsetAfter = params.slidesOffsetAfter;
430
+  if (typeof offsetAfter === 'function') {
431
+    offsetAfter = params.slidesOffsetAfter.call(swiper);
432
+  }
433
+
434
+  const previousSnapGridLength = swiper.snapGrid.length;
435
+  const previousSlidesGridLength = swiper.snapGrid.length;
436
+
437
+  let spaceBetween = params.spaceBetween;
438
+  let slidePosition = -offsetBefore;
439
+  let prevSlideSize = 0;
440
+  let index = 0;
441
+  if (typeof swiperSize === 'undefined') {
442
+    return;
443
+  }
444
+  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
445
+    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
446
+  }
447
+
448
+  swiper.virtualSize = -spaceBetween;
449
+
450
+  // reset margins
451
+  if (rtl) slides.css({ marginLeft: '', marginTop: '' });
452
+  else slides.css({ marginRight: '', marginBottom: '' });
453
+
454
+  let slidesNumberEvenToRows;
455
+  if (params.slidesPerColumn > 1) {
456
+    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
457
+      slidesNumberEvenToRows = slidesLength;
458
+    } else {
459
+      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
460
+    }
461
+    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
462
+      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
463
+    }
464
+  }
465
+
466
+  // Calc slides
467
+  let slideSize;
468
+  const slidesPerColumn = params.slidesPerColumn;
469
+  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
470
+  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
471
+  for (let i = 0; i < slidesLength; i += 1) {
472
+    slideSize = 0;
473
+    const slide = slides.eq(i);
474
+    if (params.slidesPerColumn > 1) {
475
+      // Set slides order
476
+      let newSlideOrderIndex;
477
+      let column;
478
+      let row;
479
+      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
480
+        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
481
+        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
482
+        const columnsInGroup = groupIndex === 0
483
+          ? params.slidesPerGroup
484
+          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
485
+        row = Math.floor(slideIndexInGroup / columnsInGroup);
486
+        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;
487
+
488
+        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
489
+        slide
490
+          .css({
491
+            '-webkit-box-ordinal-group': newSlideOrderIndex,
492
+            '-moz-box-ordinal-group': newSlideOrderIndex,
493
+            '-ms-flex-order': newSlideOrderIndex,
494
+            '-webkit-order': newSlideOrderIndex,
495
+            order: newSlideOrderIndex,
496
+          });
497
+      } else if (params.slidesPerColumnFill === 'column') {
498
+        column = Math.floor(i / slidesPerColumn);
499
+        row = i - (column * slidesPerColumn);
500
+        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
501
+          row += 1;
502
+          if (row >= slidesPerColumn) {
503
+            row = 0;
504
+            column += 1;
505
+          }
506
+        }
507
+      } else {
508
+        row = Math.floor(i / slidesPerRow);
509
+        column = i - (row * slidesPerRow);
510
+      }
511
+      slide.css(
512
+        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,
513
+        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)
514
+      );
515
+    }
516
+    if (slide.css('display') === 'none') continue; // eslint-disable-line
517
+
518
+    if (params.slidesPerView === 'auto') {
519
+      const slideStyles = window.getComputedStyle(slide[0], null);
520
+      const currentTransform = slide[0].style.transform;
521
+      const currentWebKitTransform = slide[0].style.webkitTransform;
522
+      if (currentTransform) {
523
+        slide[0].style.transform = 'none';
524
+      }
525
+      if (currentWebKitTransform) {
526
+        slide[0].style.webkitTransform = 'none';
527
+      }
528
+      if (params.roundLengths) {
529
+        slideSize = swiper.isHorizontal()
530
+          ? slide.outerWidth(true)
531
+          : slide.outerHeight(true);
532
+      } else {
533
+        // eslint-disable-next-line
534
+        if (swiper.isHorizontal()) {
535
+          const width = parseFloat(slideStyles.getPropertyValue('width'));
536
+          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
537
+          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
538
+          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
539
+          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
540
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
541
+          if (boxSizing && boxSizing === 'border-box') {
542
+            slideSize = width + marginLeft + marginRight;
543
+          } else {
544
+            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
545
+          }
546
+        } else {
547
+          const height = parseFloat(slideStyles.getPropertyValue('height'));
548
+          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
549
+          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
550
+          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
551
+          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
552
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
553
+          if (boxSizing && boxSizing === 'border-box') {
554
+            slideSize = height + marginTop + marginBottom;
555
+          } else {
556
+            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
557
+          }
558
+        }
559
+      }
560
+      if (currentTransform) {
561
+        slide[0].style.transform = currentTransform;
562
+      }
563
+      if (currentWebKitTransform) {
564
+        slide[0].style.webkitTransform = currentWebKitTransform;
565
+      }
566
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
567
+    } else {
568
+      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
569
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
570
+
571
+      if (slides[i]) {
572
+        if (swiper.isHorizontal()) {
573
+          slides[i].style.width = `${slideSize}px`;
574
+        } else {
575
+          slides[i].style.height = `${slideSize}px`;
576
+        }
577
+      }
578
+    }
579
+    if (slides[i]) {
580
+      slides[i].swiperSlideSize = slideSize;
581
+    }
582
+    slidesSizesGrid.push(slideSize);
583
+
584
+
585
+    if (params.centeredSlides) {
586
+      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
587
+      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
588
+      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
589
+      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
590
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
591
+      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
592
+      slidesGrid.push(slidePosition);
593
+    } else {
594
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
595
+      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
596
+      slidesGrid.push(slidePosition);
597
+      slidePosition = slidePosition + slideSize + spaceBetween;
598
+    }
599
+
600
+    swiper.virtualSize += slideSize + spaceBetween;
601
+
602
+    prevSlideSize = slideSize;
603
+
604
+    index += 1;
605
+  }
606
+  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
607
+  let newSlidesGrid;
608
+
609
+  if (
610
+    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
611
+    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
612
+  }
613
+  if (params.setWrapperSize) {
614
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
615
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
616
+  }
617
+
618
+  if (params.slidesPerColumn > 1) {
619
+    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
620
+    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
621
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
622
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
623
+    if (params.centeredSlides) {
624
+      newSlidesGrid = [];
625
+      for (let i = 0; i < snapGrid.length; i += 1) {
626
+        let slidesGridItem = snapGrid[i];
627
+        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
628
+        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
629
+      }
630
+      snapGrid = newSlidesGrid;
631
+    }
632
+  }
633
+
634
+  // Remove last grid elements depending on width
635
+  if (!params.centeredSlides) {
636
+    newSlidesGrid = [];
637
+    for (let i = 0; i < snapGrid.length; i += 1) {
638
+      let slidesGridItem = snapGrid[i];
639
+      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
640
+      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
641
+        newSlidesGrid.push(slidesGridItem);
642
+      }
643
+    }
644
+    snapGrid = newSlidesGrid;
645
+    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
646
+      snapGrid.push(swiper.virtualSize - swiperSize);
647
+    }
648
+  }
649
+  if (snapGrid.length === 0) snapGrid = [0];
650
+
651
+  if (params.spaceBetween !== 0) {
652
+    if (swiper.isHorizontal()) {
653
+      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });
654
+      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });
655
+    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });
656
+  }
657
+
658
+  if (params.centeredSlides && params.centeredSlidesBounds) {
659
+    let allSlidesSize = 0;
660
+    slidesSizesGrid.forEach((slideSizeValue) => {
661
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
662
+    });
663
+    allSlidesSize -= params.spaceBetween;
664
+    const maxSnap = allSlidesSize - swiperSize;
665
+    snapGrid = snapGrid.map((snap) => {
666
+      if (snap < 0) return -offsetBefore;
667
+      if (snap > maxSnap) return maxSnap + offsetAfter;
668
+      return snap;
669
+    });
670
+  }
671
+
672
+  if (params.centerInsufficientSlides) {
673
+    let allSlidesSize = 0;
674
+    slidesSizesGrid.forEach((slideSizeValue) => {
675
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
676
+    });
677
+    allSlidesSize -= params.spaceBetween;
678
+    if (allSlidesSize < swiperSize) {
679
+      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
680
+      snapGrid.forEach((snap, snapIndex) => {
681
+        snapGrid[snapIndex] = snap - allSlidesOffset;
682
+      });
683
+      slidesGrid.forEach((snap, snapIndex) => {
684
+        slidesGrid[snapIndex] = snap + allSlidesOffset;
685
+      });
686
+    }
687
+  }
688
+
689
+  Utils.extend(swiper, {
690
+    slides,
691
+    snapGrid,
692
+    slidesGrid,
693
+    slidesSizesGrid,
694
+  });
695
+
696
+  if (slidesLength !== previousSlidesLength) {
697
+    swiper.emit('slidesLengthChange');
698
+  }
699
+  if (snapGrid.length !== previousSnapGridLength) {
700
+    if (swiper.params.watchOverflow) swiper.checkOverflow();
701
+    swiper.emit('snapGridLengthChange');
702
+  }
703
+  if (slidesGrid.length !== previousSlidesGridLength) {
704
+    swiper.emit('slidesGridLengthChange');
705
+  }
706
+
707
+  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
708
+    swiper.updateSlidesOffset();
709
+  }
710
+}
711
+
712
+function updateAutoHeight (speed) {
713
+  const swiper = this;
714
+  const activeSlides = [];
715
+  let newHeight = 0;
716
+  let i;
717
+  if (typeof speed === 'number') {
718
+    swiper.setTransition(speed);
719
+  } else if (speed === true) {
720
+    swiper.setTransition(swiper.params.speed);
721
+  }
722
+  // Find slides currently in view
723
+  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
724
+    if (swiper.params.centeredSlides) {
725
+      swiper.visibleSlides.each((index, slide) => {
726
+        activeSlides.push(slide);
727
+      });
728
+    } else {
729
+      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
730
+        const index = swiper.activeIndex + i;
731
+        if (index > swiper.slides.length) break;
732
+        activeSlides.push(swiper.slides.eq(index)[0]);
733
+      }
734
+    }
735
+  } else {
736
+    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
737
+  }
738
+
739
+  // Find new height from highest slide in view
740
+  for (i = 0; i < activeSlides.length; i += 1) {
741
+    if (typeof activeSlides[i] !== 'undefined') {
742
+      const height = activeSlides[i].offsetHeight;
743
+      newHeight = height > newHeight ? height : newHeight;
744
+    }
745
+  }
746
+
747
+  // Update Height
748
+  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);
749
+}
750
+
751
+function updateSlidesOffset () {
752
+  const swiper = this;
753
+  const slides = swiper.slides;
754
+  for (let i = 0; i < slides.length; i += 1) {
755
+    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
756
+  }
757
+}
758
+
759
+function updateSlidesProgress (translate = (this && this.translate) || 0) {
760
+  const swiper = this;
761
+  const params = swiper.params;
762
+
763
+  const { slides, rtlTranslate: rtl } = swiper;
764
+
765
+  if (slides.length === 0) return;
766
+  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
767
+
768
+  let offsetCenter = -translate;
769
+  if (rtl) offsetCenter = translate;
770
+
771
+  // Visible Slides
772
+  slides.removeClass(params.slideVisibleClass);
773
+
774
+  swiper.visibleSlidesIndexes = [];
775
+  swiper.visibleSlides = [];
776
+
777
+  for (let i = 0; i < slides.length; i += 1) {
778
+    const slide = slides[i];
779
+    const slideProgress = (
780
+      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
781
+    ) / (slide.swiperSlideSize + params.spaceBetween);
782
+    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
783
+      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);
784
+      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
785
+      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
786
+                || (slideAfter > 1 && slideAfter <= swiper.size)
787
+                || (slideBefore <= 0 && slideAfter >= swiper.size);
788
+      if (isVisible) {
789
+        swiper.visibleSlides.push(slide);
790
+        swiper.visibleSlidesIndexes.push(i);
791
+        slides.eq(i).addClass(params.slideVisibleClass);
792
+      }
793
+    }
794
+    slide.progress = rtl ? -slideProgress : slideProgress;
795
+  }
796
+  swiper.visibleSlides = $(swiper.visibleSlides);
797
+}
798
+
799
+function updateProgress (translate) {
800
+  const swiper = this;
801
+  if (typeof translate === 'undefined') {
802
+    const multiplier = swiper.rtlTranslate ? -1 : 1;
803
+    // eslint-disable-next-line
804
+    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
805
+  }
806
+  const params = swiper.params;
807
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
808
+  let { progress, isBeginning, isEnd } = swiper;
809
+  const wasBeginning = isBeginning;
810
+  const wasEnd = isEnd;
811
+  if (translatesDiff === 0) {
812
+    progress = 0;
813
+    isBeginning = true;
814
+    isEnd = true;
815
+  } else {
816
+    progress = (translate - swiper.minTranslate()) / (translatesDiff);
817
+    isBeginning = progress <= 0;
818
+    isEnd = progress >= 1;
819
+  }
820
+  Utils.extend(swiper, {
821
+    progress,
822
+    isBeginning,
823
+    isEnd,
824
+  });
825
+
826
+  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);
827
+
828
+  if (isBeginning && !wasBeginning) {
829
+    swiper.emit('reachBeginning toEdge');
830
+  }
831
+  if (isEnd && !wasEnd) {
832
+    swiper.emit('reachEnd toEdge');
833
+  }
834
+  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
835
+    swiper.emit('fromEdge');
836
+  }
837
+
838
+  swiper.emit('progress', progress);
839
+}
840
+
841
+function updateSlidesClasses () {
842
+  const swiper = this;
843
+
844
+  const {
845
+    slides, params, $wrapperEl, activeIndex, realIndex,
846
+  } = swiper;
847
+  const isVirtual = swiper.virtual && params.virtual.enabled;
848
+
849
+  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);
850
+
851
+  let activeSlide;
852
+  if (isVirtual) {
853
+    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`);
854
+  } else {
855
+    activeSlide = slides.eq(activeIndex);
856
+  }
857
+
858
+  // Active classes
859
+  activeSlide.addClass(params.slideActiveClass);
860
+
861
+  if (params.loop) {
862
+    // Duplicate to all looped slides
863
+    if (activeSlide.hasClass(params.slideDuplicateClass)) {
864
+      $wrapperEl
865
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`)
866
+        .addClass(params.slideDuplicateActiveClass);
867
+    } else {
868
+      $wrapperEl
869
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`)
870
+        .addClass(params.slideDuplicateActiveClass);
871
+    }
872
+  }
873
+  // Next Slide
874
+  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);
875
+  if (params.loop && nextSlide.length === 0) {
876
+    nextSlide = slides.eq(0);
877
+    nextSlide.addClass(params.slideNextClass);
878
+  }
879
+  // Prev Slide
880
+  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);
881
+  if (params.loop && prevSlide.length === 0) {
882
+    prevSlide = slides.eq(-1);
883
+    prevSlide.addClass(params.slidePrevClass);
884
+  }
885
+  if (params.loop) {
886
+    // Duplicate to all looped slides
887
+    if (nextSlide.hasClass(params.slideDuplicateClass)) {
888
+      $wrapperEl
889
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
890
+        .addClass(params.slideDuplicateNextClass);
891
+    } else {
892
+      $wrapperEl
893
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
894
+        .addClass(params.slideDuplicateNextClass);
895
+    }
896
+    if (prevSlide.hasClass(params.slideDuplicateClass)) {
897
+      $wrapperEl
898
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
899
+        .addClass(params.slideDuplicatePrevClass);
900
+    } else {
901
+      $wrapperEl
902
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
903
+        .addClass(params.slideDuplicatePrevClass);
904
+    }
905
+  }
906
+}
907
+
908
+function updateActiveIndex (newActiveIndex) {
909
+  const swiper = this;
910
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
911
+  const {
912
+    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,
913
+  } = swiper;
914
+  let activeIndex = newActiveIndex;
915
+  let snapIndex;
916
+  if (typeof activeIndex === 'undefined') {
917
+    for (let i = 0; i < slidesGrid.length; i += 1) {
918
+      if (typeof slidesGrid[i + 1] !== 'undefined') {
919
+        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
920
+          activeIndex = i;
921
+        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
922
+          activeIndex = i + 1;
923
+        }
924
+      } else if (translate >= slidesGrid[i]) {
925
+        activeIndex = i;
926
+      }
927
+    }
928
+    // Normalize slideIndex
929
+    if (params.normalizeSlideIndex) {
930
+      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
931
+    }
932
+  }
933
+  if (snapGrid.indexOf(translate) >= 0) {
934
+    snapIndex = snapGrid.indexOf(translate);
935
+  } else {
936
+    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
937
+    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
938
+  }
939
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
940
+  if (activeIndex === previousIndex) {
941
+    if (snapIndex !== previousSnapIndex) {
942
+      swiper.snapIndex = snapIndex;
943
+      swiper.emit('snapIndexChange');
944
+    }
945
+    return;
946
+  }
947
+
948
+  // Get real index
949
+  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
950
+
951
+  Utils.extend(swiper, {
952
+    snapIndex,
953
+    realIndex,
954
+    previousIndex,
955
+    activeIndex,
956
+  });
957
+  swiper.emit('activeIndexChange');
958
+  swiper.emit('snapIndexChange');
959
+  if (previousRealIndex !== realIndex) {
960
+    swiper.emit('realIndexChange');
961
+  }
962
+  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
963
+    swiper.emit('slideChange');
964
+  }
965
+}
966
+
967
+function updateClickedSlide (e) {
968
+  const swiper = this;
969
+  const params = swiper.params;
970
+  const slide = $(e.target).closest(`.${params.slideClass}`)[0];
971
+  let slideFound = false;
972
+  if (slide) {
973
+    for (let i = 0; i < swiper.slides.length; i += 1) {
974
+      if (swiper.slides[i] === slide) slideFound = true;
975
+    }
976
+  }
977
+
978
+  if (slide && slideFound) {
979
+    swiper.clickedSlide = slide;
980
+    if (swiper.virtual && swiper.params.virtual.enabled) {
981
+      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
982
+    } else {
983
+      swiper.clickedIndex = $(slide).index();
984
+    }
985
+  } else {
986
+    swiper.clickedSlide = undefined;
987
+    swiper.clickedIndex = undefined;
988
+    return;
989
+  }
990
+  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
991
+    swiper.slideToClickedSlide();
992
+  }
993
+}
994
+
995
+var update = {
996
+  updateSize,
997
+  updateSlides,
998
+  updateAutoHeight,
999
+  updateSlidesOffset,
1000
+  updateSlidesProgress,
1001
+  updateProgress,
1002
+  updateSlidesClasses,
1003
+  updateActiveIndex,
1004
+  updateClickedSlide,
1005
+};
1006
+
1007
+function getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {
1008
+  const swiper = this;
1009
+
1010
+  const {
1011
+    params, rtlTranslate: rtl, translate, $wrapperEl,
1012
+  } = swiper;
1013
+
1014
+  if (params.virtualTranslate) {
1015
+    return rtl ? -translate : translate;
1016
+  }
1017
+  if (params.cssMode) {
1018
+    return translate;
1019
+  }
1020
+
1021
+  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
1022
+  if (rtl) currentTranslate = -currentTranslate;
1023
+
1024
+  return currentTranslate || 0;
1025
+}
1026
+
1027
+function setTranslate (translate, byController) {
1028
+  const swiper = this;
1029
+  const {
1030
+    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,
1031
+  } = swiper;
1032
+  let x = 0;
1033
+  let y = 0;
1034
+  const z = 0;
1035
+
1036
+  if (swiper.isHorizontal()) {
1037
+    x = rtl ? -translate : translate;
1038
+  } else {
1039
+    y = translate;
1040
+  }
1041
+
1042
+  if (params.roundLengths) {
1043
+    x = Math.floor(x);
1044
+    y = Math.floor(y);
1045
+  }
1046
+
1047
+  if (params.cssMode) {
1048
+    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1049
+  } else if (!params.virtualTranslate) {
1050
+    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
1051
+  }
1052
+  swiper.previousTranslate = swiper.translate;
1053
+  swiper.translate = swiper.isHorizontal() ? x : y;
1054
+
1055
+  // Check if we need to update progress
1056
+  let newProgress;
1057
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1058
+  if (translatesDiff === 0) {
1059
+    newProgress = 0;
1060
+  } else {
1061
+    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
1062
+  }
1063
+  if (newProgress !== progress) {
1064
+    swiper.updateProgress(translate);
1065
+  }
1066
+
1067
+  swiper.emit('setTranslate', swiper.translate, byController);
1068
+}
1069
+
1070
+function minTranslate () {
1071
+  return (-this.snapGrid[0]);
1072
+}
1073
+
1074
+function maxTranslate () {
1075
+  return (-this.snapGrid[this.snapGrid.length - 1]);
1076
+}
1077
+
1078
+function translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
1079
+  const swiper = this;
1080
+
1081
+  const {
1082
+    params,
1083
+    wrapperEl,
1084
+  } = swiper;
1085
+
1086
+  if (swiper.animating && params.preventInteractionOnTransition) {
1087
+    return false;
1088
+  }
1089
+
1090
+  const minTranslate = swiper.minTranslate();
1091
+  const maxTranslate = swiper.maxTranslate();
1092
+  let newTranslate;
1093
+  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
1094
+  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
1095
+  else newTranslate = translate;
1096
+
1097
+  // Update progress
1098
+  swiper.updateProgress(newTranslate);
1099
+
1100
+  if (params.cssMode) {
1101
+    const isH = swiper.isHorizontal();
1102
+    if (speed === 0) {
1103
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1104
+    } else {
1105
+      // eslint-disable-next-line
1106
+      if (wrapperEl.scrollTo) {
1107
+        wrapperEl.scrollTo({
1108
+          [isH ? 'left' : 'top']: -newTranslate,
1109
+          behavior: 'smooth',
1110
+        });
1111
+      } else {
1112
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1113
+      }
1114
+    }
1115
+    return true;
1116
+  }
1117
+
1118
+  if (speed === 0) {
1119
+    swiper.setTransition(0);
1120
+    swiper.setTranslate(newTranslate);
1121
+    if (runCallbacks) {
1122
+      swiper.emit('beforeTransitionStart', speed, internal);
1123
+      swiper.emit('transitionEnd');
1124
+    }
1125
+  } else {
1126
+    swiper.setTransition(speed);
1127
+    swiper.setTranslate(newTranslate);
1128
+    if (runCallbacks) {
1129
+      swiper.emit('beforeTransitionStart', speed, internal);
1130
+      swiper.emit('transitionStart');
1131
+    }
1132
+    if (!swiper.animating) {
1133
+      swiper.animating = true;
1134
+      if (!swiper.onTranslateToWrapperTransitionEnd) {
1135
+        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
1136
+          if (!swiper || swiper.destroyed) return;
1137
+          if (e.target !== this) return;
1138
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1139
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1140
+          swiper.onTranslateToWrapperTransitionEnd = null;
1141
+          delete swiper.onTranslateToWrapperTransitionEnd;
1142
+          if (runCallbacks) {
1143
+            swiper.emit('transitionEnd');
1144
+          }
1145
+        };
1146
+      }
1147
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1148
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1149
+    }
1150
+  }
1151
+
1152
+  return true;
1153
+}
1154
+
1155
+var translate = {
1156
+  getTranslate,
1157
+  setTranslate,
1158
+  minTranslate,
1159
+  maxTranslate,
1160
+  translateTo,
1161
+};
1162
+
1163
+function setTransition (duration, byController) {
1164
+  const swiper = this;
1165
+
1166
+  if (!swiper.params.cssMode) {
1167
+    swiper.$wrapperEl.transition(duration);
1168
+  }
1169
+
1170
+  swiper.emit('setTransition', duration, byController);
1171
+}
1172
+
1173
+function transitionStart (runCallbacks = true, direction) {
1174
+  const swiper = this;
1175
+  const { activeIndex, params, previousIndex } = swiper;
1176
+  if (params.cssMode) return;
1177
+  if (params.autoHeight) {
1178
+    swiper.updateAutoHeight();
1179
+  }
1180
+
1181
+  let dir = direction;
1182
+  if (!dir) {
1183
+    if (activeIndex > previousIndex) dir = 'next';
1184
+    else if (activeIndex < previousIndex) dir = 'prev';
1185
+    else dir = 'reset';
1186
+  }
1187
+
1188
+  swiper.emit('transitionStart');
1189
+
1190
+  if (runCallbacks && activeIndex !== previousIndex) {
1191
+    if (dir === 'reset') {
1192
+      swiper.emit('slideResetTransitionStart');
1193
+      return;
1194
+    }
1195
+    swiper.emit('slideChangeTransitionStart');
1196
+    if (dir === 'next') {
1197
+      swiper.emit('slideNextTransitionStart');
1198
+    } else {
1199
+      swiper.emit('slidePrevTransitionStart');
1200
+    }
1201
+  }
1202
+}
1203
+
1204
+function transitionEnd (runCallbacks = true, direction) {
1205
+  const swiper = this;
1206
+  const { activeIndex, previousIndex, params } = swiper;
1207
+  swiper.animating = false;
1208
+  if (params.cssMode) return;
1209
+  swiper.setTransition(0);
1210
+
1211
+  let dir = direction;
1212
+  if (!dir) {
1213
+    if (activeIndex > previousIndex) dir = 'next';
1214
+    else if (activeIndex < previousIndex) dir = 'prev';
1215
+    else dir = 'reset';
1216
+  }
1217
+
1218
+  swiper.emit('transitionEnd');
1219
+
1220
+  if (runCallbacks && activeIndex !== previousIndex) {
1221
+    if (dir === 'reset') {
1222
+      swiper.emit('slideResetTransitionEnd');
1223
+      return;
1224
+    }
1225
+    swiper.emit('slideChangeTransitionEnd');
1226
+    if (dir === 'next') {
1227
+      swiper.emit('slideNextTransitionEnd');
1228
+    } else {
1229
+      swiper.emit('slidePrevTransitionEnd');
1230
+    }
1231
+  }
1232
+}
1233
+
1234
+var transition = {
1235
+  setTransition,
1236
+  transitionStart,
1237
+  transitionEnd,
1238
+};
1239
+
1240
+function slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
1241
+  const swiper = this;
1242
+  let slideIndex = index;
1243
+  if (slideIndex < 0) slideIndex = 0;
1244
+
1245
+  const {
1246
+    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,
1247
+  } = swiper;
1248
+  if (swiper.animating && params.preventInteractionOnTransition) {
1249
+    return false;
1250
+  }
1251
+
1252
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
1253
+  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
1254
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1255
+
1256
+  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
1257
+    swiper.emit('beforeSlideChangeStart');
1258
+  }
1259
+
1260
+  const translate = -snapGrid[snapIndex];
1261
+
1262
+  // Update progress
1263
+  swiper.updateProgress(translate);
1264
+
1265
+  // Normalize slideIndex
1266
+  if (params.normalizeSlideIndex) {
1267
+    for (let i = 0; i < slidesGrid.length; i += 1) {
1268
+      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
1269
+        slideIndex = i;
1270
+      }
1271
+    }
1272
+  }
1273
+  // Directions locks
1274
+  if (swiper.initialized && slideIndex !== activeIndex) {
1275
+    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
1276
+      return false;
1277
+    }
1278
+    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
1279
+      if ((activeIndex || 0) !== slideIndex) return false;
1280
+    }
1281
+  }
1282
+
1283
+  let direction;
1284
+  if (slideIndex > activeIndex) direction = 'next';
1285
+  else if (slideIndex < activeIndex) direction = 'prev';
1286
+  else direction = 'reset';
1287
+
1288
+
1289
+  // Update Index
1290
+  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
1291
+    swiper.updateActiveIndex(slideIndex);
1292
+    // Update Height
1293
+    if (params.autoHeight) {
1294
+      swiper.updateAutoHeight();
1295
+    }
1296
+    swiper.updateSlidesClasses();
1297
+    if (params.effect !== 'slide') {
1298
+      swiper.setTranslate(translate);
1299
+    }
1300
+    if (direction !== 'reset') {
1301
+      swiper.transitionStart(runCallbacks, direction);
1302
+      swiper.transitionEnd(runCallbacks, direction);
1303
+    }
1304
+    return false;
1305
+  }
1306
+  if (params.cssMode) {
1307
+    const isH = swiper.isHorizontal();
1308
+    let t = -translate;
1309
+    if (rtl) {
1310
+      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
1311
+    }
1312
+    if (speed === 0) {
1313
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1314
+    } else {
1315
+      // eslint-disable-next-line
1316
+      if (wrapperEl.scrollTo) {
1317
+        wrapperEl.scrollTo({
1318
+          [isH ? 'left' : 'top']: t,
1319
+          behavior: 'smooth',
1320
+        });
1321
+      } else {
1322
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1323
+      }
1324
+    }
1325
+    return true;
1326
+  }
1327
+
1328
+  if (speed === 0) {
1329
+    swiper.setTransition(0);
1330
+    swiper.setTranslate(translate);
1331
+    swiper.updateActiveIndex(slideIndex);
1332
+    swiper.updateSlidesClasses();
1333
+    swiper.emit('beforeTransitionStart', speed, internal);
1334
+    swiper.transitionStart(runCallbacks, direction);
1335
+    swiper.transitionEnd(runCallbacks, direction);
1336
+  } else {
1337
+    swiper.setTransition(speed);
1338
+    swiper.setTranslate(translate);
1339
+    swiper.updateActiveIndex(slideIndex);
1340
+    swiper.updateSlidesClasses();
1341
+    swiper.emit('beforeTransitionStart', speed, internal);
1342
+    swiper.transitionStart(runCallbacks, direction);
1343
+    if (!swiper.animating) {
1344
+      swiper.animating = true;
1345
+      if (!swiper.onSlideToWrapperTransitionEnd) {
1346
+        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
1347
+          if (!swiper || swiper.destroyed) return;
1348
+          if (e.target !== this) return;
1349
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1350
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
1351
+          swiper.onSlideToWrapperTransitionEnd = null;
1352
+          delete swiper.onSlideToWrapperTransitionEnd;
1353
+          swiper.transitionEnd(runCallbacks, direction);
1354
+        };
1355
+      }
1356
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1357
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
1358
+    }
1359
+  }
1360
+
1361
+  return true;
1362
+}
1363
+
1364
+function slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
1365
+  const swiper = this;
1366
+  let newIndex = index;
1367
+  if (swiper.params.loop) {
1368
+    newIndex += swiper.loopedSlides;
1369
+  }
1370
+
1371
+  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
1372
+}
1373
+
1374
+/* eslint no-unused-vars: "off" */
1375
+function slideNext (speed = this.params.speed, runCallbacks = true, internal) {
1376
+  const swiper = this;
1377
+  const { params, animating } = swiper;
1378
+  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
1379
+  if (params.loop) {
1380
+    if (animating) return false;
1381
+    swiper.loopFix();
1382
+    // eslint-disable-next-line
1383
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
1384
+  }
1385
+  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
1386
+}
1387
+
1388
+/* eslint no-unused-vars: "off" */
1389
+function slidePrev (speed = this.params.speed, runCallbacks = true, internal) {
1390
+  const swiper = this;
1391
+  const {
1392
+    params, animating, snapGrid, slidesGrid, rtlTranslate,
1393
+  } = swiper;
1394
+
1395
+  if (params.loop) {
1396
+    if (animating) return false;
1397
+    swiper.loopFix();
1398
+    // eslint-disable-next-line
1399
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
1400
+  }
1401
+  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
1402
+  function normalize(val) {
1403
+    if (val < 0) return -Math.floor(Math.abs(val));
1404
+    return Math.floor(val);
1405
+  }
1406
+  const normalizedTranslate = normalize(translate);
1407
+  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
1408
+  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));
1409
+
1410
+  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
1411
+  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
1412
+  if (typeof prevSnap === 'undefined' && params.cssMode) {
1413
+    snapGrid.forEach((snap) => {
1414
+      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
1415
+    });
1416
+  }
1417
+  let prevIndex;
1418
+  if (typeof prevSnap !== 'undefined') {
1419
+    prevIndex = slidesGrid.indexOf(prevSnap);
1420
+    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
1421
+  }
1422
+  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
1423
+}
1424
+
1425
+/* eslint no-unused-vars: "off" */
1426
+function slideReset (speed = this.params.speed, runCallbacks = true, internal) {
1427
+  const swiper = this;
1428
+  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
1429
+}
1430
+
1431
+/* eslint no-unused-vars: "off" */
1432
+function slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
1433
+  const swiper = this;
1434
+  let index = swiper.activeIndex;
1435
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
1436
+  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
1437
+
1438
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1439
+
1440
+  if (translate >= swiper.snapGrid[snapIndex]) {
1441
+    // The current translate is on or after the current snap index, so the choice
1442
+    // is between the current index and the one after it.
1443
+    const currentSnap = swiper.snapGrid[snapIndex];
1444
+    const nextSnap = swiper.snapGrid[snapIndex + 1];
1445
+    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
1446
+      index += swiper.params.slidesPerGroup;
1447
+    }
1448
+  } else {
1449
+    // The current translate is before the current snap index, so the choice
1450
+    // is between the current index and the one before it.
1451
+    const prevSnap = swiper.snapGrid[snapIndex - 1];
1452
+    const currentSnap = swiper.snapGrid[snapIndex];
1453
+    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {
1454
+      index -= swiper.params.slidesPerGroup;
1455
+    }
1456
+  }
1457
+  index = Math.max(index, 0);
1458
+  index = Math.min(index, swiper.slidesGrid.length - 1);
1459
+
1460
+  return swiper.slideTo(index, speed, runCallbacks, internal);
1461
+}
1462
+
1463
+function slideToClickedSlide () {
1464
+  const swiper = this;
1465
+  const { params, $wrapperEl } = swiper;
1466
+
1467
+  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
1468
+  let slideToIndex = swiper.clickedIndex;
1469
+  let realIndex;
1470
+  if (params.loop) {
1471
+    if (swiper.animating) return;
1472
+    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
1473
+    if (params.centeredSlides) {
1474
+      if (
1475
+        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
1476
+        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
1477
+      ) {
1478
+        swiper.loopFix();
1479
+        slideToIndex = $wrapperEl
1480
+          .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
1481
+          .eq(0)
1482
+          .index();
1483
+
1484
+        Utils.nextTick(() => {
1485
+          swiper.slideTo(slideToIndex);
1486
+        });
1487
+      } else {
1488
+        swiper.slideTo(slideToIndex);
1489
+      }
1490
+    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
1491
+      swiper.loopFix();
1492
+      slideToIndex = $wrapperEl
1493
+        .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
1494
+        .eq(0)
1495
+        .index();
1496
+
1497
+      Utils.nextTick(() => {
1498
+        swiper.slideTo(slideToIndex);
1499
+      });
1500
+    } else {
1501
+      swiper.slideTo(slideToIndex);
1502
+    }
1503
+  } else {
1504
+    swiper.slideTo(slideToIndex);
1505
+  }
1506
+}
1507
+
1508
+var slide = {
1509
+  slideTo,
1510
+  slideToLoop,
1511
+  slideNext,
1512
+  slidePrev,
1513
+  slideReset,
1514
+  slideToClosest,
1515
+  slideToClickedSlide,
1516
+};
1517
+
1518
+function loopCreate () {
1519
+  const swiper = this;
1520
+  const { params, $wrapperEl } = swiper;
1521
+  // Remove duplicated slides
1522
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();
1523
+
1524
+  let slides = $wrapperEl.children(`.${params.slideClass}`);
1525
+
1526
+  if (params.loopFillGroupWithBlank) {
1527
+    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
1528
+    if (blankSlidesNum !== params.slidesPerGroup) {
1529
+      for (let i = 0; i < blankSlidesNum; i += 1) {
1530
+        const blankNode = $(document$1.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);
1531
+        $wrapperEl.append(blankNode);
1532
+      }
1533
+      slides = $wrapperEl.children(`.${params.slideClass}`);
1534
+    }
1535
+  }
1536
+
1537
+  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
1538
+
1539
+  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
1540
+  swiper.loopedSlides += params.loopAdditionalSlides;
1541
+  if (swiper.loopedSlides > slides.length) {
1542
+    swiper.loopedSlides = slides.length;
1543
+  }
1544
+
1545
+  const prependSlides = [];
1546
+  const appendSlides = [];
1547
+  slides.each((index, el) => {
1548
+    const slide = $(el);
1549
+    if (index < swiper.loopedSlides) appendSlides.push(el);
1550
+    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
1551
+    slide.attr('data-swiper-slide-index', index);
1552
+  });
1553
+  for (let i = 0; i < appendSlides.length; i += 1) {
1554
+    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
1555
+  }
1556
+  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {
1557
+    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
1558
+  }
1559
+}
1560
+
1561
+function loopFix () {
1562
+  const swiper = this;
1563
+
1564
+  swiper.emit('beforeLoopFix');
1565
+
1566
+  const {
1567
+    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,
1568
+  } = swiper;
1569
+  let newIndex;
1570
+  swiper.allowSlidePrev = true;
1571
+  swiper.allowSlideNext = true;
1572
+
1573
+  const snapTranslate = -snapGrid[activeIndex];
1574
+  const diff = snapTranslate - swiper.getTranslate();
1575
+
1576
+  // Fix For Negative Oversliding
1577
+  if (activeIndex < loopedSlides) {
1578
+    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
1579
+    newIndex += loopedSlides;
1580
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
1581
+    if (slideChanged && diff !== 0) {
1582
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
1583
+    }
1584
+  } else if (activeIndex >= slides.length - loopedSlides) {
1585
+    // Fix For Positive Oversliding
1586
+    newIndex = -slides.length + activeIndex + loopedSlides;
1587
+    newIndex += loopedSlides;
1588
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
1589
+    if (slideChanged && diff !== 0) {
1590
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
1591
+    }
1592
+  }
1593
+  swiper.allowSlidePrev = allowSlidePrev;
1594
+  swiper.allowSlideNext = allowSlideNext;
1595
+
1596
+  swiper.emit('loopFix');
1597
+}
1598
+
1599
+function loopDestroy () {
1600
+  const swiper = this;
1601
+  const { $wrapperEl, params, slides } = swiper;
1602
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();
1603
+  slides.removeAttr('data-swiper-slide-index');
1604
+}
1605
+
1606
+var loop = {
1607
+  loopCreate,
1608
+  loopFix,
1609
+  loopDestroy,
1610
+};
1611
+
1612
+function setGrabCursor (moving) {
1613
+  const swiper = this;
1614
+  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
1615
+  const el = swiper.el;
1616
+  el.style.cursor = 'move';
1617
+  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
1618
+  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
1619
+  el.style.cursor = moving ? 'grabbing' : 'grab';
1620
+}
1621
+
1622
+function unsetGrabCursor () {
1623
+  const swiper = this;
1624
+  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
1625
+  swiper.el.style.cursor = '';
1626
+}
1627
+
1628
+var grabCursor = {
1629
+  setGrabCursor,
1630
+  unsetGrabCursor,
1631
+};
1632
+
1633
+function appendSlide (slides) {
1634
+  const swiper = this;
1635
+  const { $wrapperEl, params } = swiper;
1636
+  if (params.loop) {
1637
+    swiper.loopDestroy();
1638
+  }
1639
+  if (typeof slides === 'object' && 'length' in slides) {
1640
+    for (let i = 0; i < slides.length; i += 1) {
1641
+      if (slides[i]) $wrapperEl.append(slides[i]);
1642
+    }
1643
+  } else {
1644
+    $wrapperEl.append(slides);
1645
+  }
1646
+  if (params.loop) {
1647
+    swiper.loopCreate();
1648
+  }
1649
+  if (!(params.observer && Support.observer)) {
1650
+    swiper.update();
1651
+  }
1652
+}
1653
+
1654
+function prependSlide (slides) {
1655
+  const swiper = this;
1656
+  const { params, $wrapperEl, activeIndex } = swiper;
1657
+
1658
+  if (params.loop) {
1659
+    swiper.loopDestroy();
1660
+  }
1661
+  let newActiveIndex = activeIndex + 1;
1662
+  if (typeof slides === 'object' && 'length' in slides) {
1663
+    for (let i = 0; i < slides.length; i += 1) {
1664
+      if (slides[i]) $wrapperEl.prepend(slides[i]);
1665
+    }
1666
+    newActiveIndex = activeIndex + slides.length;
1667
+  } else {
1668
+    $wrapperEl.prepend(slides);
1669
+  }
1670
+  if (params.loop) {
1671
+    swiper.loopCreate();
1672
+  }
1673
+  if (!(params.observer && Support.observer)) {
1674
+    swiper.update();
1675
+  }
1676
+  swiper.slideTo(newActiveIndex, 0, false);
1677
+}
1678
+
1679
+function addSlide (index, slides) {
1680
+  const swiper = this;
1681
+  const { $wrapperEl, params, activeIndex } = swiper;
1682
+  let activeIndexBuffer = activeIndex;
1683
+  if (params.loop) {
1684
+    activeIndexBuffer -= swiper.loopedSlides;
1685
+    swiper.loopDestroy();
1686
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
1687
+  }
1688
+  const baseLength = swiper.slides.length;
1689
+  if (index <= 0) {
1690
+    swiper.prependSlide(slides);
1691
+    return;
1692
+  }
1693
+  if (index >= baseLength) {
1694
+    swiper.appendSlide(slides);
1695
+    return;
1696
+  }
1697
+  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
1698
+
1699
+  const slidesBuffer = [];
1700
+  for (let i = baseLength - 1; i >= index; i -= 1) {
1701
+    const currentSlide = swiper.slides.eq(i);
1702
+    currentSlide.remove();
1703
+    slidesBuffer.unshift(currentSlide);
1704
+  }
1705
+
1706
+  if (typeof slides === 'object' && 'length' in slides) {
1707
+    for (let i = 0; i < slides.length; i += 1) {
1708
+      if (slides[i]) $wrapperEl.append(slides[i]);
1709
+    }
1710
+    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
1711
+  } else {
1712
+    $wrapperEl.append(slides);
1713
+  }
1714
+
1715
+  for (let i = 0; i < slidesBuffer.length; i += 1) {
1716
+    $wrapperEl.append(slidesBuffer[i]);
1717
+  }
1718
+
1719
+  if (params.loop) {
1720
+    swiper.loopCreate();
1721
+  }
1722
+  if (!(params.observer && Support.observer)) {
1723
+    swiper.update();
1724
+  }
1725
+  if (params.loop) {
1726
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
1727
+  } else {
1728
+    swiper.slideTo(newActiveIndex, 0, false);
1729
+  }
1730
+}
1731
+
1732
+function removeSlide (slidesIndexes) {
1733
+  const swiper = this;
1734
+  const { params, $wrapperEl, activeIndex } = swiper;
1735
+
1736
+  let activeIndexBuffer = activeIndex;
1737
+  if (params.loop) {
1738
+    activeIndexBuffer -= swiper.loopedSlides;
1739
+    swiper.loopDestroy();
1740
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
1741
+  }
1742
+  let newActiveIndex = activeIndexBuffer;
1743
+  let indexToRemove;
1744
+
1745
+  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
1746
+    for (let i = 0; i < slidesIndexes.length; i += 1) {
1747
+      indexToRemove = slidesIndexes[i];
1748
+      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
1749
+      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
1750
+    }
1751
+    newActiveIndex = Math.max(newActiveIndex, 0);
1752
+  } else {
1753
+    indexToRemove = slidesIndexes;
1754
+    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
1755
+    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
1756
+    newActiveIndex = Math.max(newActiveIndex, 0);
1757
+  }
1758
+
1759
+  if (params.loop) {
1760
+    swiper.loopCreate();
1761
+  }
1762
+
1763
+  if (!(params.observer && Support.observer)) {
1764
+    swiper.update();
1765
+  }
1766
+  if (params.loop) {
1767
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
1768
+  } else {
1769
+    swiper.slideTo(newActiveIndex, 0, false);
1770
+  }
1771
+}
1772
+
1773
+function removeAllSlides () {
1774
+  const swiper = this;
1775
+
1776
+  const slidesIndexes = [];
1777
+  for (let i = 0; i < swiper.slides.length; i += 1) {
1778
+    slidesIndexes.push(i);
1779
+  }
1780
+  swiper.removeSlide(slidesIndexes);
1781
+}
1782
+
1783
+var manipulation = {
1784
+  appendSlide,
1785
+  prependSlide,
1786
+  addSlide,
1787
+  removeSlide,
1788
+  removeAllSlides,
1789
+};
1790
+
1791
+const Device = (function Device() {
1792
+  const platform = window.navigator.platform;
1793
+  const ua = window.navigator.userAgent;
1794
+
1795
+  const device = {
1796
+    ios: false,
1797
+    android: false,
1798
+    androidChrome: false,
1799
+    desktop: false,
1800
+    iphone: false,
1801
+    ipod: false,
1802
+    ipad: false,
1803
+    edge: false,
1804
+    ie: false,
1805
+    firefox: false,
1806
+    macos: false,
1807
+    windows: false,
1808
+    cordova: !!(window.cordova || window.phonegap),
1809
+    phonegap: !!(window.cordova || window.phonegap),
1810
+    electron: false,
1811
+  };
1812
+
1813
+  const screenWidth = window.screen.width;
1814
+  const screenHeight = window.screen.height;
1815
+
1816
+  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
1817
+  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
1818
+  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
1819
+  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
1820
+  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
1821
+  const edge = ua.indexOf('Edge/') >= 0;
1822
+  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
1823
+  const windows = platform === 'Win32';
1824
+  const electron = ua.toLowerCase().indexOf('electron') >= 0;
1825
+  let macos = platform === 'MacIntel';
1826
+
1827
+  // iPadOs 13 fix
1828
+  if (!ipad
1829
+    && macos
1830
+    && Support.touch
1831
+    && (
1832
+      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
1833
+      || (screenWidth === 834 && screenHeight === 1194) // Pro 11
1834
+      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
1835
+      || (screenWidth === 768 && screenHeight === 1024) // other
1836
+    )
1837
+  ) {
1838
+    ipad = ua.match(/(Version)\/([\d.]+)/);
1839
+    macos = false;
1840
+  }
1841
+
1842
+  device.ie = ie;
1843
+  device.edge = edge;
1844
+  device.firefox = firefox;
1845
+
1846
+  // Android
1847
+  if (android && !windows) {
1848
+    device.os = 'android';
1849
+    device.osVersion = android[2];
1850
+    device.android = true;
1851
+    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
1852
+  }
1853
+  if (ipad || iphone || ipod) {
1854
+    device.os = 'ios';
1855
+    device.ios = true;
1856
+  }
1857
+  // iOS
1858
+  if (iphone && !ipod) {
1859
+    device.osVersion = iphone[2].replace(/_/g, '.');
1860
+    device.iphone = true;
1861
+  }
1862
+  if (ipad) {
1863
+    device.osVersion = ipad[2].replace(/_/g, '.');
1864
+    device.ipad = true;
1865
+  }
1866
+  if (ipod) {
1867
+    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
1868
+    device.ipod = true;
1869
+  }
1870
+  // iOS 8+ changed UA
1871
+  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
1872
+    if (device.osVersion.split('.')[0] === '10') {
1873
+      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
1874
+    }
1875
+  }
1876
+
1877
+  // Webview
1878
+  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))
1879
+    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);
1880
+  device.webview = device.webView;
1881
+  device.standalone = device.webView;
1882
+
1883
+  // Desktop
1884
+  device.desktop = !(device.ios || device.android) || electron;
1885
+  if (device.desktop) {
1886
+    device.electron = electron;
1887
+    device.macos = macos;
1888
+    device.windows = windows;
1889
+    if (device.macos) {
1890
+      device.os = 'macos';
1891
+    }
1892
+    if (device.windows) {
1893
+      device.os = 'windows';
1894
+    }
1895
+  }
1896
+
1897
+  // Pixel Ratio
1898
+  device.pixelRatio = window.devicePixelRatio || 1;
1899
+
1900
+  // Export object
1901
+  return device;
1902
+}());
1903
+
1904
+function onTouchStart (event) {
1905
+  const swiper = this;
1906
+  const data = swiper.touchEventsData;
1907
+  const { params, touches } = swiper;
1908
+
1909
+  if (swiper.animating && params.preventInteractionOnTransition) {
1910
+    return;
1911
+  }
1912
+  let e = event;
1913
+  if (e.originalEvent) e = e.originalEvent;
1914
+  const $targetEl = $(e.target);
1915
+
1916
+  if (params.touchEventsTarget === 'wrapper') {
1917
+    if (!$targetEl.closest(swiper.wrapperEl).length) return;
1918
+  }
1919
+  data.isTouchEvent = e.type === 'touchstart';
1920
+  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
1921
+  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
1922
+  if (data.isTouched && data.isMoved) return;
1923
+  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
1924
+    swiper.allowClick = true;
1925
+    return;
1926
+  }
1927
+  if (params.swipeHandler) {
1928
+    if (!$targetEl.closest(params.swipeHandler)[0]) return;
1929
+  }
1930
+
1931
+  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
1932
+  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
1933
+  const startX = touches.currentX;
1934
+  const startY = touches.currentY;
1935
+
1936
+  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
1937
+
1938
+  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
1939
+  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
1940
+  if (
1941
+    edgeSwipeDetection
1942
+    && ((startX <= edgeSwipeThreshold)
1943
+    || (startX >= window.screen.width - edgeSwipeThreshold))
1944
+  ) {
1945
+    return;
1946
+  }
1947
+
1948
+  Utils.extend(data, {
1949
+    isTouched: true,
1950
+    isMoved: false,
1951
+    allowTouchCallbacks: true,
1952
+    isScrolling: undefined,
1953
+    startMoving: undefined,
1954
+  });
1955
+
1956
+  touches.startX = startX;
1957
+  touches.startY = startY;
1958
+  data.touchStartTime = Utils.now();
1959
+  swiper.allowClick = true;
1960
+  swiper.updateSize();
1961
+  swiper.swipeDirection = undefined;
1962
+  if (params.threshold > 0) data.allowThresholdMove = false;
1963
+  if (e.type !== 'touchstart') {
1964
+    let preventDefault = true;
1965
+    if ($targetEl.is(data.formElements)) preventDefault = false;
1966
+    if (
1967
+      document$1.activeElement
1968
+      && $(document$1.activeElement).is(data.formElements)
1969
+      && document$1.activeElement !== $targetEl[0]
1970
+    ) {
1971
+      document$1.activeElement.blur();
1972
+    }
1973
+
1974
+    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
1975
+    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
1976
+      e.preventDefault();
1977
+    }
1978
+  }
1979
+  swiper.emit('touchStart', e);
1980
+}
1981
+
1982
+function onTouchMove (event) {
1983
+  const swiper = this;
1984
+  const data = swiper.touchEventsData;
1985
+  const { params, touches, rtlTranslate: rtl } = swiper;
1986
+  let e = event;
1987
+  if (e.originalEvent) e = e.originalEvent;
1988
+  if (!data.isTouched) {
1989
+    if (data.startMoving && data.isScrolling) {
1990
+      swiper.emit('touchMoveOpposite', e);
1991
+    }
1992
+    return;
1993
+  }
1994
+  if (data.isTouchEvent && e.type !== 'touchmove') return;
1995
+  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
1996
+  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
1997
+  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
1998
+  if (e.preventedByNestedSwiper) {
1999
+    touches.startX = pageX;
2000
+    touches.startY = pageY;
2001
+    return;
2002
+  }
2003
+  if (!swiper.allowTouchMove) {
2004
+    // isMoved = true;
2005
+    swiper.allowClick = false;
2006
+    if (data.isTouched) {
2007
+      Utils.extend(touches, {
2008
+        startX: pageX,
2009
+        startY: pageY,
2010
+        currentX: pageX,
2011
+        currentY: pageY,
2012
+      });
2013
+      data.touchStartTime = Utils.now();
2014
+    }
2015
+    return;
2016
+  }
2017
+  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
2018
+    if (swiper.isVertical()) {
2019
+      // Vertical
2020
+      if (
2021
+        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
2022
+        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
2023
+      ) {
2024
+        data.isTouched = false;
2025
+        data.isMoved = false;
2026
+        return;
2027
+      }
2028
+    } else if (
2029
+      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
2030
+      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
2031
+    ) {
2032
+      return;
2033
+    }
2034
+  }
2035
+  if (data.isTouchEvent && document$1.activeElement) {
2036
+    if (e.target === document$1.activeElement && $(e.target).is(data.formElements)) {
2037
+      data.isMoved = true;
2038
+      swiper.allowClick = false;
2039
+      return;
2040
+    }
2041
+  }
2042
+  if (data.allowTouchCallbacks) {
2043
+    swiper.emit('touchMove', e);
2044
+  }
2045
+  if (e.targetTouches && e.targetTouches.length > 1) return;
2046
+
2047
+  touches.currentX = pageX;
2048
+  touches.currentY = pageY;
2049
+
2050
+  const diffX = touches.currentX - touches.startX;
2051
+  const diffY = touches.currentY - touches.startY;
2052
+  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;
2053
+
2054
+  if (typeof data.isScrolling === 'undefined') {
2055
+    let touchAngle;
2056
+    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
2057
+      data.isScrolling = false;
2058
+    } else {
2059
+      // eslint-disable-next-line
2060
+      if ((diffX * diffX) + (diffY * diffY) >= 25) {
2061
+        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
2062
+        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
2063
+      }
2064
+    }
2065
+  }
2066
+  if (data.isScrolling) {
2067
+    swiper.emit('touchMoveOpposite', e);
2068
+  }
2069
+  if (typeof data.startMoving === 'undefined') {
2070
+    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
2071
+      data.startMoving = true;
2072
+    }
2073
+  }
2074
+  if (data.isScrolling) {
2075
+    data.isTouched = false;
2076
+    return;
2077
+  }
2078
+  if (!data.startMoving) {
2079
+    return;
2080
+  }
2081
+  swiper.allowClick = false;
2082
+  if (!params.cssMode && e.cancelable) {
2083
+    e.preventDefault();
2084
+  }
2085
+  if (params.touchMoveStopPropagation && !params.nested) {
2086
+    e.stopPropagation();
2087
+  }
2088
+
2089
+  if (!data.isMoved) {
2090
+    if (params.loop) {
2091
+      swiper.loopFix();
2092
+    }
2093
+    data.startTranslate = swiper.getTranslate();
2094
+    swiper.setTransition(0);
2095
+    if (swiper.animating) {
2096
+      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
2097
+    }
2098
+    data.allowMomentumBounce = false;
2099
+    // Grab Cursor
2100
+    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2101
+      swiper.setGrabCursor(true);
2102
+    }
2103
+    swiper.emit('sliderFirstMove', e);
2104
+  }
2105
+  swiper.emit('sliderMove', e);
2106
+  data.isMoved = true;
2107
+
2108
+  let diff = swiper.isHorizontal() ? diffX : diffY;
2109
+  touches.diff = diff;
2110
+
2111
+  diff *= params.touchRatio;
2112
+  if (rtl) diff = -diff;
2113
+
2114
+  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
2115
+  data.currentTranslate = diff + data.startTranslate;
2116
+
2117
+  let disableParentSwiper = true;
2118
+  let resistanceRatio = params.resistanceRatio;
2119
+  if (params.touchReleaseOnEdges) {
2120
+    resistanceRatio = 0;
2121
+  }
2122
+  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
2123
+    disableParentSwiper = false;
2124
+    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);
2125
+  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
2126
+    disableParentSwiper = false;
2127
+    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);
2128
+  }
2129
+
2130
+  if (disableParentSwiper) {
2131
+    e.preventedByNestedSwiper = true;
2132
+  }
2133
+
2134
+  // Directions locks
2135
+  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
2136
+    data.currentTranslate = data.startTranslate;
2137
+  }
2138
+  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
2139
+    data.currentTranslate = data.startTranslate;
2140
+  }
2141
+
2142
+
2143
+  // Threshold
2144
+  if (params.threshold > 0) {
2145
+    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
2146
+      if (!data.allowThresholdMove) {
2147
+        data.allowThresholdMove = true;
2148
+        touches.startX = touches.currentX;
2149
+        touches.startY = touches.currentY;
2150
+        data.currentTranslate = data.startTranslate;
2151
+        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
2152
+        return;
2153
+      }
2154
+    } else {
2155
+      data.currentTranslate = data.startTranslate;
2156
+      return;
2157
+    }
2158
+  }
2159
+
2160
+  if (!params.followFinger || params.cssMode) return;
2161
+
2162
+  // Update active index in free mode
2163
+  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
2164
+    swiper.updateActiveIndex();
2165
+    swiper.updateSlidesClasses();
2166
+  }
2167
+  if (params.freeMode) {
2168
+    // Velocity
2169
+    if (data.velocities.length === 0) {
2170
+      data.velocities.push({
2171
+        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
2172
+        time: data.touchStartTime,
2173
+      });
2174
+    }
2175
+    data.velocities.push({
2176
+      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
2177
+      time: Utils.now(),
2178
+    });
2179
+  }
2180
+  // Update progress
2181
+  swiper.updateProgress(data.currentTranslate);
2182
+  // Update translate
2183
+  swiper.setTranslate(data.currentTranslate);
2184
+}
2185
+
2186
+function onTouchEnd (event) {
2187
+  const swiper = this;
2188
+  const data = swiper.touchEventsData;
2189
+
2190
+  const {
2191
+    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,
2192
+  } = swiper;
2193
+  let e = event;
2194
+  if (e.originalEvent) e = e.originalEvent;
2195
+  if (data.allowTouchCallbacks) {
2196
+    swiper.emit('touchEnd', e);
2197
+  }
2198
+  data.allowTouchCallbacks = false;
2199
+  if (!data.isTouched) {
2200
+    if (data.isMoved && params.grabCursor) {
2201
+      swiper.setGrabCursor(false);
2202
+    }
2203
+    data.isMoved = false;
2204
+    data.startMoving = false;
2205
+    return;
2206
+  }
2207
+  // Return Grab Cursor
2208
+  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2209
+    swiper.setGrabCursor(false);
2210
+  }
2211
+
2212
+  // Time diff
2213
+  const touchEndTime = Utils.now();
2214
+  const timeDiff = touchEndTime - data.touchStartTime;
2215
+
2216
+  // Tap, doubleTap, Click
2217
+  if (swiper.allowClick) {
2218
+    swiper.updateClickedSlide(e);
2219
+    swiper.emit('tap click', e);
2220
+    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
2221
+      swiper.emit('doubleTap doubleClick', e);
2222
+    }
2223
+  }
2224
+
2225
+  data.lastClickTime = Utils.now();
2226
+  Utils.nextTick(() => {
2227
+    if (!swiper.destroyed) swiper.allowClick = true;
2228
+  });
2229
+
2230
+  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
2231
+    data.isTouched = false;
2232
+    data.isMoved = false;
2233
+    data.startMoving = false;
2234
+    return;
2235
+  }
2236
+  data.isTouched = false;
2237
+  data.isMoved = false;
2238
+  data.startMoving = false;
2239
+
2240
+  let currentPos;
2241
+  if (params.followFinger) {
2242
+    currentPos = rtl ? swiper.translate : -swiper.translate;
2243
+  } else {
2244
+    currentPos = -data.currentTranslate;
2245
+  }
2246
+
2247
+  if (params.cssMode) {
2248
+    return;
2249
+  }
2250
+
2251
+  if (params.freeMode) {
2252
+    if (currentPos < -swiper.minTranslate()) {
2253
+      swiper.slideTo(swiper.activeIndex);
2254
+      return;
2255
+    }
2256
+    if (currentPos > -swiper.maxTranslate()) {
2257
+      if (swiper.slides.length < snapGrid.length) {
2258
+        swiper.slideTo(snapGrid.length - 1);
2259
+      } else {
2260
+        swiper.slideTo(swiper.slides.length - 1);
2261
+      }
2262
+      return;
2263
+    }
2264
+
2265
+    if (params.freeModeMomentum) {
2266
+      if (data.velocities.length > 1) {
2267
+        const lastMoveEvent = data.velocities.pop();
2268
+        const velocityEvent = data.velocities.pop();
2269
+
2270
+        const distance = lastMoveEvent.position - velocityEvent.position;
2271
+        const time = lastMoveEvent.time - velocityEvent.time;
2272
+        swiper.velocity = distance / time;
2273
+        swiper.velocity /= 2;
2274
+        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
2275
+          swiper.velocity = 0;
2276
+        }
2277
+        // this implies that the user stopped moving a finger then released.
2278
+        // There would be no events with distance zero, so the last event is stale.
2279
+        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
2280
+          swiper.velocity = 0;
2281
+        }
2282
+      } else {
2283
+        swiper.velocity = 0;
2284
+      }
2285
+      swiper.velocity *= params.freeModeMomentumVelocityRatio;
2286
+
2287
+      data.velocities.length = 0;
2288
+      let momentumDuration = 1000 * params.freeModeMomentumRatio;
2289
+      const momentumDistance = swiper.velocity * momentumDuration;
2290
+
2291
+      let newPosition = swiper.translate + momentumDistance;
2292
+      if (rtl) newPosition = -newPosition;
2293
+
2294
+      let doBounce = false;
2295
+      let afterBouncePosition;
2296
+      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
2297
+      let needsLoopFix;
2298
+      if (newPosition < swiper.maxTranslate()) {
2299
+        if (params.freeModeMomentumBounce) {
2300
+          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
2301
+            newPosition = swiper.maxTranslate() - bounceAmount;
2302
+          }
2303
+          afterBouncePosition = swiper.maxTranslate();
2304
+          doBounce = true;
2305
+          data.allowMomentumBounce = true;
2306
+        } else {
2307
+          newPosition = swiper.maxTranslate();
2308
+        }
2309
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
2310
+      } else if (newPosition > swiper.minTranslate()) {
2311
+        if (params.freeModeMomentumBounce) {
2312
+          if (newPosition - swiper.minTranslate() > bounceAmount) {
2313
+            newPosition = swiper.minTranslate() + bounceAmount;
2314
+          }
2315
+          afterBouncePosition = swiper.minTranslate();
2316
+          doBounce = true;
2317
+          data.allowMomentumBounce = true;
2318
+        } else {
2319
+          newPosition = swiper.minTranslate();
2320
+        }
2321
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
2322
+      } else if (params.freeModeSticky) {
2323
+        let nextSlide;
2324
+        for (let j = 0; j < snapGrid.length; j += 1) {
2325
+          if (snapGrid[j] > -newPosition) {
2326
+            nextSlide = j;
2327
+            break;
2328
+          }
2329
+        }
2330
+
2331
+        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
2332
+          newPosition = snapGrid[nextSlide];
2333
+        } else {
2334
+          newPosition = snapGrid[nextSlide - 1];
2335
+        }
2336
+        newPosition = -newPosition;
2337
+      }
2338
+      if (needsLoopFix) {
2339
+        swiper.once('transitionEnd', () => {
2340
+          swiper.loopFix();
2341
+        });
2342
+      }
2343
+      // Fix duration
2344
+      if (swiper.velocity !== 0) {
2345
+        if (rtl) {
2346
+          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
2347
+        } else {
2348
+          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
2349
+        }
2350
+        if (params.freeModeSticky) {
2351
+          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
2352
+          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
2353
+          // It's easy to see this when simulating touch with mouse events. To fix this,
2354
+          // limit single-slide swipes to the default slide duration. This also has the
2355
+          // nice side effect of matching slide speed if the user stopped moving before
2356
+          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
2357
+          // For faster swipes, also apply limits (albeit higher ones).
2358
+          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
2359
+          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
2360
+          if (moveDistance < currentSlideSize) {
2361
+            momentumDuration = params.speed;
2362
+          } else if (moveDistance < 2 * currentSlideSize) {
2363
+            momentumDuration = params.speed * 1.5;
2364
+          } else {
2365
+            momentumDuration = params.speed * 2.5;
2366
+          }
2367
+        }
2368
+      } else if (params.freeModeSticky) {
2369
+        swiper.slideToClosest();
2370
+        return;
2371
+      }
2372
+
2373
+      if (params.freeModeMomentumBounce && doBounce) {
2374
+        swiper.updateProgress(afterBouncePosition);
2375
+        swiper.setTransition(momentumDuration);
2376
+        swiper.setTranslate(newPosition);
2377
+        swiper.transitionStart(true, swiper.swipeDirection);
2378
+        swiper.animating = true;
2379
+        $wrapperEl.transitionEnd(() => {
2380
+          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
2381
+          swiper.emit('momentumBounce');
2382
+          swiper.setTransition(params.speed);
2383
+          setTimeout(() => {
2384
+            swiper.setTranslate(afterBouncePosition);
2385
+            $wrapperEl.transitionEnd(() => {
2386
+              if (!swiper || swiper.destroyed) return;
2387
+              swiper.transitionEnd();
2388
+            });
2389
+          }, 0);
2390
+        });
2391
+      } else if (swiper.velocity) {
2392
+        swiper.updateProgress(newPosition);
2393
+        swiper.setTransition(momentumDuration);
2394
+        swiper.setTranslate(newPosition);
2395
+        swiper.transitionStart(true, swiper.swipeDirection);
2396
+        if (!swiper.animating) {
2397
+          swiper.animating = true;
2398
+          $wrapperEl.transitionEnd(() => {
2399
+            if (!swiper || swiper.destroyed) return;
2400
+            swiper.transitionEnd();
2401
+          });
2402
+        }
2403
+      } else {
2404
+        swiper.updateProgress(newPosition);
2405
+      }
2406
+
2407
+      swiper.updateActiveIndex();
2408
+      swiper.updateSlidesClasses();
2409
+    } else if (params.freeModeSticky) {
2410
+      swiper.slideToClosest();
2411
+      return;
2412
+    }
2413
+
2414
+    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
2415
+      swiper.updateProgress();
2416
+      swiper.updateActiveIndex();
2417
+      swiper.updateSlidesClasses();
2418
+    }
2419
+    return;
2420
+  }
2421
+
2422
+  // Find current slide
2423
+  let stopIndex = 0;
2424
+  let groupSize = swiper.slidesSizesGrid[0];
2425
+  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
2426
+    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
2427
+    if (typeof slidesGrid[i + increment] !== 'undefined') {
2428
+      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
2429
+        stopIndex = i;
2430
+        groupSize = slidesGrid[i + increment] - slidesGrid[i];
2431
+      }
2432
+    } else if (currentPos >= slidesGrid[i]) {
2433
+      stopIndex = i;
2434
+      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
2435
+    }
2436
+  }
2437
+
2438
+  // Find current slide size
2439
+  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
2440
+  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
2441
+
2442
+  if (timeDiff > params.longSwipesMs) {
2443
+    // Long touches
2444
+    if (!params.longSwipes) {
2445
+      swiper.slideTo(swiper.activeIndex);
2446
+      return;
2447
+    }
2448
+    if (swiper.swipeDirection === 'next') {
2449
+      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);
2450
+      else swiper.slideTo(stopIndex);
2451
+    }
2452
+    if (swiper.swipeDirection === 'prev') {
2453
+      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);
2454
+      else swiper.slideTo(stopIndex);
2455
+    }
2456
+  } else {
2457
+    // Short swipes
2458
+    if (!params.shortSwipes) {
2459
+      swiper.slideTo(swiper.activeIndex);
2460
+      return;
2461
+    }
2462
+    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
2463
+    if (!isNavButtonTarget) {
2464
+      if (swiper.swipeDirection === 'next') {
2465
+        swiper.slideTo(stopIndex + increment);
2466
+      }
2467
+      if (swiper.swipeDirection === 'prev') {
2468
+        swiper.slideTo(stopIndex);
2469
+      }
2470
+    } else if (e.target === swiper.navigation.nextEl) {
2471
+      swiper.slideTo(stopIndex + increment);
2472
+    } else {
2473
+      swiper.slideTo(stopIndex);
2474
+    }
2475
+  }
2476
+}
2477
+
2478
+function onResize () {
2479
+  const swiper = this;
2480
+
2481
+  const { params, el } = swiper;
2482
+
2483
+  if (el && el.offsetWidth === 0) return;
2484
+
2485
+  // Breakpoints
2486
+  if (params.breakpoints) {
2487
+    swiper.setBreakpoint();
2488
+  }
2489
+
2490
+  // Save locks
2491
+  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;
2492
+
2493
+  // Disable locks on resize
2494
+  swiper.allowSlideNext = true;
2495
+  swiper.allowSlidePrev = true;
2496
+
2497
+  swiper.updateSize();
2498
+  swiper.updateSlides();
2499
+
2500
+  swiper.updateSlidesClasses();
2501
+  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
2502
+    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
2503
+  } else {
2504
+    swiper.slideTo(swiper.activeIndex, 0, false, true);
2505
+  }
2506
+
2507
+  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
2508
+    swiper.autoplay.run();
2509
+  }
2510
+  // Return locks after resize
2511
+  swiper.allowSlidePrev = allowSlidePrev;
2512
+  swiper.allowSlideNext = allowSlideNext;
2513
+
2514
+  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
2515
+    swiper.checkOverflow();
2516
+  }
2517
+}
2518
+
2519
+function onClick (e) {
2520
+  const swiper = this;
2521
+  if (!swiper.allowClick) {
2522
+    if (swiper.params.preventClicks) e.preventDefault();
2523
+    if (swiper.params.preventClicksPropagation && swiper.animating) {
2524
+      e.stopPropagation();
2525
+      e.stopImmediatePropagation();
2526
+    }
2527
+  }
2528
+}
2529
+
2530
+function onScroll () {
2531
+  const swiper = this;
2532
+  const { wrapperEl, rtlTranslate } = swiper;
2533
+  swiper.previousTranslate = swiper.translate;
2534
+  if (swiper.isHorizontal()) {
2535
+    if (rtlTranslate) {
2536
+      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
2537
+    } else {
2538
+      swiper.translate = -wrapperEl.scrollLeft;
2539
+    }
2540
+  } else {
2541
+    swiper.translate = -wrapperEl.scrollTop;
2542
+  }
2543
+  // eslint-disable-next-line
2544
+  if (swiper.translate === -0) swiper.translate = 0;
2545
+
2546
+  swiper.updateActiveIndex();
2547
+  swiper.updateSlidesClasses();
2548
+
2549
+  let newProgress;
2550
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
2551
+  if (translatesDiff === 0) {
2552
+    newProgress = 0;
2553
+  } else {
2554
+    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
2555
+  }
2556
+  if (newProgress !== swiper.progress) {
2557
+    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
2558
+  }
2559
+
2560
+  swiper.emit('setTranslate', swiper.translate, false);
2561
+}
2562
+
2563
+let dummyEventAttached = false;
2564
+function dummyEventListener() {}
2565
+
2566
+function attachEvents() {
2567
+  const swiper = this;
2568
+  const {
2569
+    params, touchEvents, el, wrapperEl,
2570
+  } = swiper;
2571
+
2572
+  swiper.onTouchStart = onTouchStart.bind(swiper);
2573
+  swiper.onTouchMove = onTouchMove.bind(swiper);
2574
+  swiper.onTouchEnd = onTouchEnd.bind(swiper);
2575
+  if (params.cssMode) {
2576
+    swiper.onScroll = onScroll.bind(swiper);
2577
+  }
2578
+
2579
+  swiper.onClick = onClick.bind(swiper);
2580
+
2581
+  const capture = !!params.nested;
2582
+
2583
+  // Touch Events
2584
+  if (!Support.touch && Support.pointerEvents) {
2585
+    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
2586
+    document$1.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
2587
+    document$1.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
2588
+  } else {
2589
+    if (Support.touch) {
2590
+      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
2591
+      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
2592
+      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
2593
+      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
2594
+      if (touchEvents.cancel) {
2595
+        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
2596
+      }
2597
+      if (!dummyEventAttached) {
2598
+        document$1.addEventListener('touchstart', dummyEventListener);
2599
+        dummyEventAttached = true;
2600
+      }
2601
+    }
2602
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
2603
+      el.addEventListener('mousedown', swiper.onTouchStart, false);
2604
+      document$1.addEventListener('mousemove', swiper.onTouchMove, capture);
2605
+      document$1.addEventListener('mouseup', swiper.onTouchEnd, false);
2606
+    }
2607
+  }
2608
+  // Prevent Links Clicks
2609
+  if (params.preventClicks || params.preventClicksPropagation) {
2610
+    el.addEventListener('click', swiper.onClick, true);
2611
+  }
2612
+  if (params.cssMode) {
2613
+    wrapperEl.addEventListener('scroll', swiper.onScroll);
2614
+  }
2615
+
2616
+  // Resize handler
2617
+  if (params.updateOnWindowResize) {
2618
+    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
2619
+  } else {
2620
+    swiper.on('observerUpdate', onResize, true);
2621
+  }
2622
+}
2623
+
2624
+function detachEvents() {
2625
+  const swiper = this;
2626
+
2627
+  const {
2628
+    params, touchEvents, el, wrapperEl,
2629
+  } = swiper;
2630
+
2631
+  const capture = !!params.nested;
2632
+
2633
+  // Touch Events
2634
+  if (!Support.touch && Support.pointerEvents) {
2635
+    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
2636
+    document$1.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
2637
+    document$1.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
2638
+  } else {
2639
+    if (Support.touch) {
2640
+      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
2641
+      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
2642
+      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
2643
+      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
2644
+      if (touchEvents.cancel) {
2645
+        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
2646
+      }
2647
+    }
2648
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
2649
+      el.removeEventListener('mousedown', swiper.onTouchStart, false);
2650
+      document$1.removeEventListener('mousemove', swiper.onTouchMove, capture);
2651
+      document$1.removeEventListener('mouseup', swiper.onTouchEnd, false);
2652
+    }
2653
+  }
2654
+  // Prevent Links Clicks
2655
+  if (params.preventClicks || params.preventClicksPropagation) {
2656
+    el.removeEventListener('click', swiper.onClick, true);
2657
+  }
2658
+
2659
+  if (params.cssMode) {
2660
+    wrapperEl.removeEventListener('scroll', swiper.onScroll);
2661
+  }
2662
+
2663
+  // Resize handler
2664
+  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
2665
+}
2666
+
2667
+var events = {
2668
+  attachEvents,
2669
+  detachEvents,
2670
+};
2671
+
2672
+function setBreakpoint () {
2673
+  const swiper = this;
2674
+  const {
2675
+    activeIndex, initialized, loopedSlides = 0, params, $el,
2676
+  } = swiper;
2677
+  const breakpoints = params.breakpoints;
2678
+  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;
2679
+
2680
+  // Get breakpoint for window width and update parameters
2681
+  const breakpoint = swiper.getBreakpoint(breakpoints);
2682
+
2683
+  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
2684
+    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
2685
+    if (breakpointOnlyParams) {
2686
+      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {
2687
+        const paramValue = breakpointOnlyParams[param];
2688
+        if (typeof paramValue === 'undefined') return;
2689
+        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
2690
+          breakpointOnlyParams[param] = 'auto';
2691
+        } else if (param === 'slidesPerView') {
2692
+          breakpointOnlyParams[param] = parseFloat(paramValue);
2693
+        } else {
2694
+          breakpointOnlyParams[param] = parseInt(paramValue, 10);
2695
+        }
2696
+      });
2697
+    }
2698
+
2699
+    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
2700
+    const wasMultiRow = params.slidesPerColumn > 1;
2701
+    const isMultiRow = breakpointParams.slidesPerColumn > 1;
2702
+    if (wasMultiRow && !isMultiRow) {
2703
+      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);
2704
+    } else if (!wasMultiRow && isMultiRow) {
2705
+      $el.addClass(`${params.containerModifierClass}multirow`);
2706
+      if (breakpointParams.slidesPerColumnFill === 'column') {
2707
+        $el.addClass(`${params.containerModifierClass}multirow-column`);
2708
+      }
2709
+    }
2710
+
2711
+    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
2712
+    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
2713
+
2714
+    if (directionChanged && initialized) {
2715
+      swiper.changeDirection();
2716
+    }
2717
+
2718
+    Utils.extend(swiper.params, breakpointParams);
2719
+
2720
+    Utils.extend(swiper, {
2721
+      allowTouchMove: swiper.params.allowTouchMove,
2722
+      allowSlideNext: swiper.params.allowSlideNext,
2723
+      allowSlidePrev: swiper.params.allowSlidePrev,
2724
+    });
2725
+
2726
+    swiper.currentBreakpoint = breakpoint;
2727
+
2728
+    if (needsReLoop && initialized) {
2729
+      swiper.loopDestroy();
2730
+      swiper.loopCreate();
2731
+      swiper.updateSlides();
2732
+      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
2733
+    }
2734
+
2735
+    swiper.emit('breakpoint', breakpointParams);
2736
+  }
2737
+}
2738
+
2739
+function getBreakpoint (breakpoints) {
2740
+  // Get breakpoint for window width
2741
+  if (!breakpoints) return undefined;
2742
+  let breakpoint = false;
2743
+
2744
+  const points = Object.keys(breakpoints).map((point) => {
2745
+    if (typeof point === 'string' && point.indexOf('@') === 0) {
2746
+      const minRatio = parseFloat(point.substr(1));
2747
+      const value = window.innerHeight * minRatio;
2748
+      return { value, point };
2749
+    }
2750
+    return { value: point, point };
2751
+  });
2752
+
2753
+  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
2754
+  for (let i = 0; i < points.length; i += 1) {
2755
+    const { point, value } = points[i];
2756
+    if (value <= window.innerWidth) {
2757
+      breakpoint = point;
2758
+    }
2759
+  }
2760
+  return breakpoint || 'max';
2761
+}
2762
+
2763
+var breakpoints = { setBreakpoint, getBreakpoint };
2764
+
2765
+function addClasses () {
2766
+  const swiper = this;
2767
+  const {
2768
+    classNames, params, rtl, $el,
2769
+  } = swiper;
2770
+  const suffixes = [];
2771
+
2772
+  suffixes.push('initialized');
2773
+  suffixes.push(params.direction);
2774
+
2775
+  if (params.freeMode) {
2776
+    suffixes.push('free-mode');
2777
+  }
2778
+  if (params.autoHeight) {
2779
+    suffixes.push('autoheight');
2780
+  }
2781
+  if (rtl) {
2782
+    suffixes.push('rtl');
2783
+  }
2784
+  if (params.slidesPerColumn > 1) {
2785
+    suffixes.push('multirow');
2786
+    if (params.slidesPerColumnFill === 'column') {
2787
+      suffixes.push('multirow-column');
2788
+    }
2789
+  }
2790
+  if (Device.android) {
2791
+    suffixes.push('android');
2792
+  }
2793
+  if (Device.ios) {
2794
+    suffixes.push('ios');
2795
+  }
2796
+
2797
+  if (params.cssMode) {
2798
+    suffixes.push('css-mode');
2799
+  }
2800
+
2801
+  suffixes.forEach((suffix) => {
2802
+    classNames.push(params.containerModifierClass + suffix);
2803
+  });
2804
+
2805
+  $el.addClass(classNames.join(' '));
2806
+}
2807
+
2808
+function removeClasses () {
2809
+  const swiper = this;
2810
+  const { $el, classNames } = swiper;
2811
+
2812
+  $el.removeClass(classNames.join(' '));
2813
+}
2814
+
2815
+var classes = { addClasses, removeClasses };
2816
+
2817
+function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
2818
+  let image;
2819
+  function onReady() {
2820
+    if (callback) callback();
2821
+  }
2822
+  const isPicture = $(imageEl).parent('picture')[0];
2823
+
2824
+  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
2825
+    if (src) {
2826
+      image = new window.Image();
2827
+      image.onload = onReady;
2828
+      image.onerror = onReady;
2829
+      if (sizes) {
2830
+        image.sizes = sizes;
2831
+      }
2832
+      if (srcset) {
2833
+        image.srcset = srcset;
2834
+      }
2835
+      if (src) {
2836
+        image.src = src;
2837
+      }
2838
+    } else {
2839
+      onReady();
2840
+    }
2841
+  } else {
2842
+    // image already loaded...
2843
+    onReady();
2844
+  }
2845
+}
2846
+
2847
+function preloadImages () {
2848
+  const swiper = this;
2849
+  swiper.imagesToLoad = swiper.$el.find('img');
2850
+  function onReady() {
2851
+    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
2852
+    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
2853
+    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
2854
+      if (swiper.params.updateOnImagesReady) swiper.update();
2855
+      swiper.emit('imagesReady');
2856
+    }
2857
+  }
2858
+  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {
2859
+    const imageEl = swiper.imagesToLoad[i];
2860
+    swiper.loadImage(
2861
+      imageEl,
2862
+      imageEl.currentSrc || imageEl.getAttribute('src'),
2863
+      imageEl.srcset || imageEl.getAttribute('srcset'),
2864
+      imageEl.sizes || imageEl.getAttribute('sizes'),
2865
+      true,
2866
+      onReady
2867
+    );
2868
+  }
2869
+}
2870
+
2871
+var images = {
2872
+  loadImage,
2873
+  preloadImages,
2874
+};
2875
+
2876
+function checkOverflow() {
2877
+  const swiper = this;
2878
+  const params = swiper.params;
2879
+  const wasLocked = swiper.isLocked;
2880
+  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);
2881
+
2882
+  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
2883
+    swiper.isLocked = lastSlidePosition <= swiper.size;
2884
+  } else {
2885
+    swiper.isLocked = swiper.snapGrid.length === 1;
2886
+  }
2887
+
2888
+  swiper.allowSlideNext = !swiper.isLocked;
2889
+  swiper.allowSlidePrev = !swiper.isLocked;
2890
+
2891
+  // events
2892
+  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
2893
+
2894
+  if (wasLocked && wasLocked !== swiper.isLocked) {
2895
+    swiper.isEnd = false;
2896
+    swiper.navigation.update();
2897
+  }
2898
+}
2899
+
2900
+var checkOverflow$1 = { checkOverflow };
2901
+
2902
+var defaults = {
2903
+  init: true,
2904
+  direction: 'horizontal',
2905
+  touchEventsTarget: 'container',
2906
+  initialSlide: 0,
2907
+  speed: 300,
2908
+  cssMode: false,
2909
+  updateOnWindowResize: true,
2910
+  //
2911
+  preventInteractionOnTransition: false,
2912
+
2913
+  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
2914
+  edgeSwipeDetection: false,
2915
+  edgeSwipeThreshold: 20,
2916
+
2917
+  // Free mode
2918
+  freeMode: false,
2919
+  freeModeMomentum: true,
2920
+  freeModeMomentumRatio: 1,
2921
+  freeModeMomentumBounce: true,
2922
+  freeModeMomentumBounceRatio: 1,
2923
+  freeModeMomentumVelocityRatio: 1,
2924
+  freeModeSticky: false,
2925
+  freeModeMinimumVelocity: 0.02,
2926
+
2927
+  // Autoheight
2928
+  autoHeight: false,
2929
+
2930
+  // Set wrapper width
2931
+  setWrapperSize: false,
2932
+
2933
+  // Virtual Translate
2934
+  virtualTranslate: false,
2935
+
2936
+  // Effects
2937
+  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
2938
+
2939
+  // Breakpoints
2940
+  breakpoints: undefined,
2941
+
2942
+  // Slides grid
2943
+  spaceBetween: 0,
2944
+  slidesPerView: 1,
2945
+  slidesPerColumn: 1,
2946
+  slidesPerColumnFill: 'column',
2947
+  slidesPerGroup: 1,
2948
+  slidesPerGroupSkip: 0,
2949
+  centeredSlides: false,
2950
+  centeredSlidesBounds: false,
2951
+  slidesOffsetBefore: 0, // in px
2952
+  slidesOffsetAfter: 0, // in px
2953
+  normalizeSlideIndex: true,
2954
+  centerInsufficientSlides: false,
2955
+
2956
+  // Disable swiper and hide navigation when container not overflow
2957
+  watchOverflow: false,
2958
+
2959
+  // Round length
2960
+  roundLengths: false,
2961
+
2962
+  // Touches
2963
+  touchRatio: 1,
2964
+  touchAngle: 45,
2965
+  simulateTouch: true,
2966
+  shortSwipes: true,
2967
+  longSwipes: true,
2968
+  longSwipesRatio: 0.5,
2969
+  longSwipesMs: 300,
2970
+  followFinger: true,
2971
+  allowTouchMove: true,
2972
+  threshold: 0,
2973
+  touchMoveStopPropagation: false,
2974
+  touchStartPreventDefault: true,
2975
+  touchStartForcePreventDefault: false,
2976
+  touchReleaseOnEdges: false,
2977
+
2978
+  // Unique Navigation Elements
2979
+  uniqueNavElements: true,
2980
+
2981
+  // Resistance
2982
+  resistance: true,
2983
+  resistanceRatio: 0.85,
2984
+
2985
+  // Progress
2986
+  watchSlidesProgress: false,
2987
+  watchSlidesVisibility: false,
2988
+
2989
+  // Cursor
2990
+  grabCursor: false,
2991
+
2992
+  // Clicks
2993
+  preventClicks: true,
2994
+  preventClicksPropagation: true,
2995
+  slideToClickedSlide: false,
2996
+
2997
+  // Images
2998
+  preloadImages: true,
2999
+  updateOnImagesReady: true,
3000
+
3001
+  // loop
3002
+  loop: false,
3003
+  loopAdditionalSlides: 0,
3004
+  loopedSlides: null,
3005
+  loopFillGroupWithBlank: false,
3006
+
3007
+  // Swiping/no swiping
3008
+  allowSlidePrev: true,
3009
+  allowSlideNext: true,
3010
+  swipeHandler: null, // '.swipe-handler',
3011
+  noSwiping: true,
3012
+  noSwipingClass: 'swiper-no-swiping',
3013
+  noSwipingSelector: null,
3014
+
3015
+  // Passive Listeners
3016
+  passiveListeners: true,
3017
+
3018
+  // NS
3019
+  containerModifierClass: 'swiper-container-', // NEW
3020
+  slideClass: 'swiper-slide',
3021
+  slideBlankClass: 'swiper-slide-invisible-blank',
3022
+  slideActiveClass: 'swiper-slide-active',
3023
+  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
3024
+  slideVisibleClass: 'swiper-slide-visible',
3025
+  slideDuplicateClass: 'swiper-slide-duplicate',
3026
+  slideNextClass: 'swiper-slide-next',
3027
+  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
3028
+  slidePrevClass: 'swiper-slide-prev',
3029
+  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
3030
+  wrapperClass: 'swiper-wrapper',
3031
+
3032
+  // Callbacks
3033
+  runCallbacksOnInit: true,
3034
+};
3035
+
3036
+/* eslint no-param-reassign: "off" */
3037
+
3038
+const prototypes = {
3039
+  update,
3040
+  translate,
3041
+  transition,
3042
+  slide,
3043
+  loop,
3044
+  grabCursor,
3045
+  manipulation,
3046
+  events,
3047
+  breakpoints,
3048
+  checkOverflow: checkOverflow$1,
3049
+  classes,
3050
+  images,
3051
+};
3052
+
3053
+const extendedDefaults = {};
3054
+
3055
+class Swiper extends SwiperClass {
3056
+  constructor(...args) {
3057
+    let el;
3058
+    let params;
3059
+    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
3060
+      params = args[0];
3061
+    } else {
3062
+      [el, params] = args;
3063
+    }
3064
+    if (!params) params = {};
3065
+
3066
+    params = Utils.extend({}, params);
3067
+    if (el && !params.el) params.el = el;
3068
+
3069
+    super(params);
3070
+
3071
+    Object.keys(prototypes).forEach((prototypeGroup) => {
3072
+      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
3073
+        if (!Swiper.prototype[protoMethod]) {
3074
+          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
3075
+        }
3076
+      });
3077
+    });
3078
+
3079
+    // Swiper Instance
3080
+    const swiper = this;
3081
+    if (typeof swiper.modules === 'undefined') {
3082
+      swiper.modules = {};
3083
+    }
3084
+    Object.keys(swiper.modules).forEach((moduleName) => {
3085
+      const module = swiper.modules[moduleName];
3086
+      if (module.params) {
3087
+        const moduleParamName = Object.keys(module.params)[0];
3088
+        const moduleParams = module.params[moduleParamName];
3089
+        if (typeof moduleParams !== 'object' || moduleParams === null) return;
3090
+        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
3091
+        if (params[moduleParamName] === true) {
3092
+          params[moduleParamName] = { enabled: true };
3093
+        }
3094
+        if (
3095
+          typeof params[moduleParamName] === 'object'
3096
+          && !('enabled' in params[moduleParamName])
3097
+        ) {
3098
+          params[moduleParamName].enabled = true;
3099
+        }
3100
+        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
3101
+      }
3102
+    });
3103
+
3104
+    // Extend defaults with modules params
3105
+    const swiperParams = Utils.extend({}, defaults);
3106
+    swiper.useModulesParams(swiperParams);
3107
+
3108
+    // Extend defaults with passed params
3109
+    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
3110
+    swiper.originalParams = Utils.extend({}, swiper.params);
3111
+    swiper.passedParams = Utils.extend({}, params);
3112
+
3113
+    // Save Dom lib
3114
+    swiper.$ = $;
3115
+
3116
+    // Find el
3117
+    const $el = $(swiper.params.el);
3118
+    el = $el[0];
3119
+
3120
+    if (!el) {
3121
+      return undefined;
3122
+    }
3123
+
3124
+    if ($el.length > 1) {
3125
+      const swipers = [];
3126
+      $el.each((index, containerEl) => {
3127
+        const newParams = Utils.extend({}, params, { el: containerEl });
3128
+        swipers.push(new Swiper(newParams));
3129
+      });
3130
+      return swipers;
3131
+    }
3132
+
3133
+    el.swiper = swiper;
3134
+    $el.data('swiper', swiper);
3135
+
3136
+    // Find Wrapper
3137
+    let $wrapperEl;
3138
+    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
3139
+      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));
3140
+      // Children needs to return slot items
3141
+      $wrapperEl.children = (options) => $el.children(options);
3142
+    } else {
3143
+      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);
3144
+    }
3145
+    // Extend Swiper
3146
+    Utils.extend(swiper, {
3147
+      $el,
3148
+      el,
3149
+      $wrapperEl,
3150
+      wrapperEl: $wrapperEl[0],
3151
+
3152
+      // Classes
3153
+      classNames: [],
3154
+
3155
+      // Slides
3156
+      slides: $(),
3157
+      slidesGrid: [],
3158
+      snapGrid: [],
3159
+      slidesSizesGrid: [],
3160
+
3161
+      // isDirection
3162
+      isHorizontal() {
3163
+        return swiper.params.direction === 'horizontal';
3164
+      },
3165
+      isVertical() {
3166
+        return swiper.params.direction === 'vertical';
3167
+      },
3168
+      // RTL
3169
+      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3170
+      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3171
+      wrongRTL: $wrapperEl.css('display') === '-webkit-box',
3172
+
3173
+      // Indexes
3174
+      activeIndex: 0,
3175
+      realIndex: 0,
3176
+
3177
+      //
3178
+      isBeginning: true,
3179
+      isEnd: false,
3180
+
3181
+      // Props
3182
+      translate: 0,
3183
+      previousTranslate: 0,
3184
+      progress: 0,
3185
+      velocity: 0,
3186
+      animating: false,
3187
+
3188
+      // Locks
3189
+      allowSlideNext: swiper.params.allowSlideNext,
3190
+      allowSlidePrev: swiper.params.allowSlidePrev,
3191
+
3192
+      // Touch Events
3193
+      touchEvents: (function touchEvents() {
3194
+        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
3195
+        let desktop = ['mousedown', 'mousemove', 'mouseup'];
3196
+        if (Support.pointerEvents) {
3197
+          desktop = ['pointerdown', 'pointermove', 'pointerup'];
3198
+        }
3199
+        swiper.touchEventsTouch = {
3200
+          start: touch[0],
3201
+          move: touch[1],
3202
+          end: touch[2],
3203
+          cancel: touch[3],
3204
+        };
3205
+        swiper.touchEventsDesktop = {
3206
+          start: desktop[0],
3207
+          move: desktop[1],
3208
+          end: desktop[2],
3209
+        };
3210
+        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
3211
+      }()),
3212
+      touchEventsData: {
3213
+        isTouched: undefined,
3214
+        isMoved: undefined,
3215
+        allowTouchCallbacks: undefined,
3216
+        touchStartTime: undefined,
3217
+        isScrolling: undefined,
3218
+        currentTranslate: undefined,
3219
+        startTranslate: undefined,
3220
+        allowThresholdMove: undefined,
3221
+        // Form elements to match
3222
+        formElements: 'input, select, option, textarea, button, video, label',
3223
+        // Last click time
3224
+        lastClickTime: Utils.now(),
3225
+        clickTimeout: undefined,
3226
+        // Velocities
3227
+        velocities: [],
3228
+        allowMomentumBounce: undefined,
3229
+        isTouchEvent: undefined,
3230
+        startMoving: undefined,
3231
+      },
3232
+
3233
+      // Clicks
3234
+      allowClick: true,
3235
+
3236
+      // Touches
3237
+      allowTouchMove: swiper.params.allowTouchMove,
3238
+
3239
+      touches: {
3240
+        startX: 0,
3241
+        startY: 0,
3242
+        currentX: 0,
3243
+        currentY: 0,
3244
+        diff: 0,
3245
+      },
3246
+
3247
+      // Images
3248
+      imagesToLoad: [],
3249
+      imagesLoaded: 0,
3250
+
3251
+    });
3252
+
3253
+    // Install Modules
3254
+    swiper.useModules();
3255
+
3256
+    // Init
3257
+    if (swiper.params.init) {
3258
+      swiper.init();
3259
+    }
3260
+
3261
+    // Return app instance
3262
+    return swiper;
3263
+  }
3264
+
3265
+  slidesPerViewDynamic() {
3266
+    const swiper = this;
3267
+    const {
3268
+      params, slides, slidesGrid, size: swiperSize, activeIndex,
3269
+    } = swiper;
3270
+    let spv = 1;
3271
+    if (params.centeredSlides) {
3272
+      let slideSize = slides[activeIndex].swiperSlideSize;
3273
+      let breakLoop;
3274
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
3275
+        if (slides[i] && !breakLoop) {
3276
+          slideSize += slides[i].swiperSlideSize;
3277
+          spv += 1;
3278
+          if (slideSize > swiperSize) breakLoop = true;
3279
+        }
3280
+      }
3281
+      for (let i = activeIndex - 1; i >= 0; i -= 1) {
3282
+        if (slides[i] && !breakLoop) {
3283
+          slideSize += slides[i].swiperSlideSize;
3284
+          spv += 1;
3285
+          if (slideSize > swiperSize) breakLoop = true;
3286
+        }
3287
+      }
3288
+    } else {
3289
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
3290
+        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {
3291
+          spv += 1;
3292
+        }
3293
+      }
3294
+    }
3295
+    return spv;
3296
+  }
3297
+
3298
+  update() {
3299
+    const swiper = this;
3300
+    if (!swiper || swiper.destroyed) return;
3301
+    const { snapGrid, params } = swiper;
3302
+    // Breakpoints
3303
+    if (params.breakpoints) {
3304
+      swiper.setBreakpoint();
3305
+    }
3306
+    swiper.updateSize();
3307
+    swiper.updateSlides();
3308
+    swiper.updateProgress();
3309
+    swiper.updateSlidesClasses();
3310
+
3311
+    function setTranslate() {
3312
+      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
3313
+      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
3314
+      swiper.setTranslate(newTranslate);
3315
+      swiper.updateActiveIndex();
3316
+      swiper.updateSlidesClasses();
3317
+    }
3318
+    let translated;
3319
+    if (swiper.params.freeMode) {
3320
+      setTranslate();
3321
+      if (swiper.params.autoHeight) {
3322
+        swiper.updateAutoHeight();
3323
+      }
3324
+    } else {
3325
+      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
3326
+        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3327
+      } else {
3328
+        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
3329
+      }
3330
+      if (!translated) {
3331
+        setTranslate();
3332
+      }
3333
+    }
3334
+    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
3335
+      swiper.checkOverflow();
3336
+    }
3337
+    swiper.emit('update');
3338
+  }
3339
+
3340
+  changeDirection(newDirection, needUpdate = true) {
3341
+    const swiper = this;
3342
+    const currentDirection = swiper.params.direction;
3343
+    if (!newDirection) {
3344
+      // eslint-disable-next-line
3345
+      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
3346
+    }
3347
+    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
3348
+      return swiper;
3349
+    }
3350
+
3351
+    swiper.$el
3352
+      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)
3353
+      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);
3354
+
3355
+    swiper.params.direction = newDirection;
3356
+
3357
+    swiper.slides.each((slideIndex, slideEl) => {
3358
+      if (newDirection === 'vertical') {
3359
+        slideEl.style.width = '';
3360
+      } else {
3361
+        slideEl.style.height = '';
3362
+      }
3363
+    });
3364
+
3365
+    swiper.emit('changeDirection');
3366
+    if (needUpdate) swiper.update();
3367
+
3368
+    return swiper;
3369
+  }
3370
+
3371
+  init() {
3372
+    const swiper = this;
3373
+    if (swiper.initialized) return;
3374
+
3375
+    swiper.emit('beforeInit');
3376
+
3377
+    // Set breakpoint
3378
+    if (swiper.params.breakpoints) {
3379
+      swiper.setBreakpoint();
3380
+    }
3381
+
3382
+    // Add Classes
3383
+    swiper.addClasses();
3384
+
3385
+    // Create loop
3386
+    if (swiper.params.loop) {
3387
+      swiper.loopCreate();
3388
+    }
3389
+
3390
+    // Update size
3391
+    swiper.updateSize();
3392
+
3393
+    // Update slides
3394
+    swiper.updateSlides();
3395
+
3396
+    if (swiper.params.watchOverflow) {
3397
+      swiper.checkOverflow();
3398
+    }
3399
+
3400
+    // Set Grab Cursor
3401
+    if (swiper.params.grabCursor) {
3402
+      swiper.setGrabCursor();
3403
+    }
3404
+
3405
+    if (swiper.params.preloadImages) {
3406
+      swiper.preloadImages();
3407
+    }
3408
+
3409
+    // Slide To Initial Slide
3410
+    if (swiper.params.loop) {
3411
+      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
3412
+    } else {
3413
+      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
3414
+    }
3415
+
3416
+    // Attach events
3417
+    swiper.attachEvents();
3418
+
3419
+    // Init Flag
3420
+    swiper.initialized = true;
3421
+
3422
+    // Emit
3423
+    swiper.emit('init');
3424
+  }
3425
+
3426
+  destroy(deleteInstance = true, cleanStyles = true) {
3427
+    const swiper = this;
3428
+    const {
3429
+      params, $el, $wrapperEl, slides,
3430
+    } = swiper;
3431
+
3432
+    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
3433
+      return null;
3434
+    }
3435
+
3436
+    swiper.emit('beforeDestroy');
3437
+
3438
+    // Init Flag
3439
+    swiper.initialized = false;
3440
+
3441
+    // Detach events
3442
+    swiper.detachEvents();
3443
+
3444
+    // Destroy loop
3445
+    if (params.loop) {
3446
+      swiper.loopDestroy();
3447
+    }
3448
+
3449
+    // Cleanup styles
3450
+    if (cleanStyles) {
3451
+      swiper.removeClasses();
3452
+      $el.removeAttr('style');
3453
+      $wrapperEl.removeAttr('style');
3454
+      if (slides && slides.length) {
3455
+        slides
3456
+          .removeClass([
3457
+            params.slideVisibleClass,
3458
+            params.slideActiveClass,
3459
+            params.slideNextClass,
3460
+            params.slidePrevClass,
3461
+          ].join(' '))
3462
+          .removeAttr('style')
3463
+          .removeAttr('data-swiper-slide-index');
3464
+      }
3465
+    }
3466
+
3467
+    swiper.emit('destroy');
3468
+
3469
+    // Detach emitter events
3470
+    Object.keys(swiper.eventsListeners).forEach((eventName) => {
3471
+      swiper.off(eventName);
3472
+    });
3473
+
3474
+    if (deleteInstance !== false) {
3475
+      swiper.$el[0].swiper = null;
3476
+      swiper.$el.data('swiper', null);
3477
+      Utils.deleteProps(swiper);
3478
+    }
3479
+    swiper.destroyed = true;
3480
+
3481
+    return null;
3482
+  }
3483
+
3484
+  static extendDefaults(newDefaults) {
3485
+    Utils.extend(extendedDefaults, newDefaults);
3486
+  }
3487
+
3488
+  static get extendedDefaults() {
3489
+    return extendedDefaults;
3490
+  }
3491
+
3492
+  static get defaults() {
3493
+    return defaults;
3494
+  }
3495
+
3496
+  static get Class() {
3497
+    return SwiperClass;
3498
+  }
3499
+
3500
+  static get $() {
3501
+    return $;
3502
+  }
3503
+}
3504
+
3505
+var Device$1 = {
3506
+  name: 'device',
3507
+  proto: {
3508
+    device: Device,
3509
+  },
3510
+  static: {
3511
+    device: Device,
3512
+  },
3513
+};
3514
+
3515
+var Support$1 = {
3516
+  name: 'support',
3517
+  proto: {
3518
+    support: Support,
3519
+  },
3520
+  static: {
3521
+    support: Support,
3522
+  },
3523
+};
3524
+
3525
+const Browser = (function Browser() {
3526
+  function isSafari() {
3527
+    const ua = window.navigator.userAgent.toLowerCase();
3528
+    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
3529
+  }
3530
+  return {
3531
+    isEdge: !!window.navigator.userAgent.match(/Edge/g),
3532
+    isSafari: isSafari(),
3533
+    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
3534
+  };
3535
+}());
3536
+
3537
+var Browser$1 = {
3538
+  name: 'browser',
3539
+  proto: {
3540
+    browser: Browser,
3541
+  },
3542
+  static: {
3543
+    browser: Browser,
3544
+  },
3545
+};
3546
+
3547
+var Resize = {
3548
+  name: 'resize',
3549
+  create() {
3550
+    const swiper = this;
3551
+    Utils.extend(swiper, {
3552
+      resize: {
3553
+        resizeHandler() {
3554
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
3555
+          swiper.emit('beforeResize');
3556
+          swiper.emit('resize');
3557
+        },
3558
+        orientationChangeHandler() {
3559
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
3560
+          swiper.emit('orientationchange');
3561
+        },
3562
+      },
3563
+    });
3564
+  },
3565
+  on: {
3566
+    init() {
3567
+      const swiper = this;
3568
+      // Emit resize
3569
+      window.addEventListener('resize', swiper.resize.resizeHandler);
3570
+
3571
+      // Emit orientationchange
3572
+      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
3573
+    },
3574
+    destroy() {
3575
+      const swiper = this;
3576
+      window.removeEventListener('resize', swiper.resize.resizeHandler);
3577
+      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
3578
+    },
3579
+  },
3580
+};
3581
+
3582
+const Observer = {
3583
+  func: window.MutationObserver || window.WebkitMutationObserver,
3584
+  attach(target, options = {}) {
3585
+    const swiper = this;
3586
+
3587
+    const ObserverFunc = Observer.func;
3588
+    const observer = new ObserverFunc((mutations) => {
3589
+      // The observerUpdate event should only be triggered
3590
+      // once despite the number of mutations.  Additional
3591
+      // triggers are redundant and are very costly
3592
+      if (mutations.length === 1) {
3593
+        swiper.emit('observerUpdate', mutations[0]);
3594
+        return;
3595
+      }
3596
+      const observerUpdate = function observerUpdate() {
3597
+        swiper.emit('observerUpdate', mutations[0]);
3598
+      };
3599
+
3600
+      if (window.requestAnimationFrame) {
3601
+        window.requestAnimationFrame(observerUpdate);
3602
+      } else {
3603
+        window.setTimeout(observerUpdate, 0);
3604
+      }
3605
+    });
3606
+
3607
+    observer.observe(target, {
3608
+      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
3609
+      childList: typeof options.childList === 'undefined' ? true : options.childList,
3610
+      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
3611
+    });
3612
+
3613
+    swiper.observer.observers.push(observer);
3614
+  },
3615
+  init() {
3616
+    const swiper = this;
3617
+    if (!Support.observer || !swiper.params.observer) return;
3618
+    if (swiper.params.observeParents) {
3619
+      const containerParents = swiper.$el.parents();
3620
+      for (let i = 0; i < containerParents.length; i += 1) {
3621
+        swiper.observer.attach(containerParents[i]);
3622
+      }
3623
+    }
3624
+    // Observe container
3625
+    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });
3626
+
3627
+    // Observe wrapper
3628
+    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
3629
+  },
3630
+  destroy() {
3631
+    const swiper = this;
3632
+    swiper.observer.observers.forEach((observer) => {
3633
+      observer.disconnect();
3634
+    });
3635
+    swiper.observer.observers = [];
3636
+  },
3637
+};
3638
+
3639
+var Observer$1 = {
3640
+  name: 'observer',
3641
+  params: {
3642
+    observer: false,
3643
+    observeParents: false,
3644
+    observeSlideChildren: false,
3645
+  },
3646
+  create() {
3647
+    const swiper = this;
3648
+    Utils.extend(swiper, {
3649
+      observer: {
3650
+        init: Observer.init.bind(swiper),
3651
+        attach: Observer.attach.bind(swiper),
3652
+        destroy: Observer.destroy.bind(swiper),
3653
+        observers: [],
3654
+      },
3655
+    });
3656
+  },
3657
+  on: {
3658
+    init() {
3659
+      const swiper = this;
3660
+      swiper.observer.init();
3661
+    },
3662
+    destroy() {
3663
+      const swiper = this;
3664
+      swiper.observer.destroy();
3665
+    },
3666
+  },
3667
+};
3668
+
3669
+const Virtual = {
3670
+  update(force) {
3671
+    const swiper = this;
3672
+    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;
3673
+    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
3674
+    const {
3675
+      from: previousFrom,
3676
+      to: previousTo,
3677
+      slides,
3678
+      slidesGrid: previousSlidesGrid,
3679
+      renderSlide,
3680
+      offset: previousOffset,
3681
+    } = swiper.virtual;
3682
+    swiper.updateActiveIndex();
3683
+    const activeIndex = swiper.activeIndex || 0;
3684
+
3685
+    let offsetProp;
3686
+    if (swiper.rtlTranslate) offsetProp = 'right';
3687
+    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
3688
+
3689
+    let slidesAfter;
3690
+    let slidesBefore;
3691
+    if (centeredSlides) {
3692
+      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
3693
+      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
3694
+    } else {
3695
+      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
3696
+      slidesBefore = slidesPerGroup + addSlidesAfter;
3697
+    }
3698
+    const from = Math.max((activeIndex || 0) - slidesBefore, 0);
3699
+    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
3700
+    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
3701
+
3702
+    Utils.extend(swiper.virtual, {
3703
+      from,
3704
+      to,
3705
+      offset,
3706
+      slidesGrid: swiper.slidesGrid,
3707
+    });
3708
+
3709
+    function onRendered() {
3710
+      swiper.updateSlides();
3711
+      swiper.updateProgress();
3712
+      swiper.updateSlidesClasses();
3713
+      if (swiper.lazy && swiper.params.lazy.enabled) {
3714
+        swiper.lazy.load();
3715
+      }
3716
+    }
3717
+
3718
+    if (previousFrom === from && previousTo === to && !force) {
3719
+      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
3720
+        swiper.slides.css(offsetProp, `${offset}px`);
3721
+      }
3722
+      swiper.updateProgress();
3723
+      return;
3724
+    }
3725
+    if (swiper.params.virtual.renderExternal) {
3726
+      swiper.params.virtual.renderExternal.call(swiper, {
3727
+        offset,
3728
+        from,
3729
+        to,
3730
+        slides: (function getSlides() {
3731
+          const slidesToRender = [];
3732
+          for (let i = from; i <= to; i += 1) {
3733
+            slidesToRender.push(slides[i]);
3734
+          }
3735
+          return slidesToRender;
3736
+        }()),
3737
+      });
3738
+      onRendered();
3739
+      return;
3740
+    }
3741
+    const prependIndexes = [];
3742
+    const appendIndexes = [];
3743
+    if (force) {
3744
+      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();
3745
+    } else {
3746
+      for (let i = previousFrom; i <= previousTo; i += 1) {
3747
+        if (i < from || i > to) {
3748
+          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove();
3749
+        }
3750
+      }
3751
+    }
3752
+    for (let i = 0; i < slides.length; i += 1) {
3753
+      if (i >= from && i <= to) {
3754
+        if (typeof previousTo === 'undefined' || force) {
3755
+          appendIndexes.push(i);
3756
+        } else {
3757
+          if (i > previousTo) appendIndexes.push(i);
3758
+          if (i < previousFrom) prependIndexes.push(i);
3759
+        }
3760
+      }
3761
+    }
3762
+    appendIndexes.forEach((index) => {
3763
+      swiper.$wrapperEl.append(renderSlide(slides[index], index));
3764
+    });
3765
+    prependIndexes.sort((a, b) => b - a).forEach((index) => {
3766
+      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
3767
+    });
3768
+    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);
3769
+    onRendered();
3770
+  },
3771
+  renderSlide(slide, index) {
3772
+    const swiper = this;
3773
+    const params = swiper.params.virtual;
3774
+    if (params.cache && swiper.virtual.cache[index]) {
3775
+      return swiper.virtual.cache[index];
3776
+    }
3777
+    const $slideEl = params.renderSlide
3778
+      ? $(params.renderSlide.call(swiper, slide, index))
3779
+      : $(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`);
3780
+    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
3781
+    if (params.cache) swiper.virtual.cache[index] = $slideEl;
3782
+    return $slideEl;
3783
+  },
3784
+  appendSlide(slides) {
3785
+    const swiper = this;
3786
+    if (typeof slides === 'object' && 'length' in slides) {
3787
+      for (let i = 0; i < slides.length; i += 1) {
3788
+        if (slides[i]) swiper.virtual.slides.push(slides[i]);
3789
+      }
3790
+    } else {
3791
+      swiper.virtual.slides.push(slides);
3792
+    }
3793
+    swiper.virtual.update(true);
3794
+  },
3795
+  prependSlide(slides) {
3796
+    const swiper = this;
3797
+    const activeIndex = swiper.activeIndex;
3798
+    let newActiveIndex = activeIndex + 1;
3799
+    let numberOfNewSlides = 1;
3800
+
3801
+    if (Array.isArray(slides)) {
3802
+      for (let i = 0; i < slides.length; i += 1) {
3803
+        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
3804
+      }
3805
+      newActiveIndex = activeIndex + slides.length;
3806
+      numberOfNewSlides = slides.length;
3807
+    } else {
3808
+      swiper.virtual.slides.unshift(slides);
3809
+    }
3810
+    if (swiper.params.virtual.cache) {
3811
+      const cache = swiper.virtual.cache;
3812
+      const newCache = {};
3813
+      Object.keys(cache).forEach((cachedIndex) => {
3814
+        const $cachedEl = cache[cachedIndex];
3815
+        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
3816
+        if (cachedElIndex) {
3817
+          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
3818
+        }
3819
+        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
3820
+      });
3821
+      swiper.virtual.cache = newCache;
3822
+    }
3823
+    swiper.virtual.update(true);
3824
+    swiper.slideTo(newActiveIndex, 0);
3825
+  },
3826
+  removeSlide(slidesIndexes) {
3827
+    const swiper = this;
3828
+    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
3829
+    let activeIndex = swiper.activeIndex;
3830
+    if (Array.isArray(slidesIndexes)) {
3831
+      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
3832
+        swiper.virtual.slides.splice(slidesIndexes[i], 1);
3833
+        if (swiper.params.virtual.cache) {
3834
+          delete swiper.virtual.cache[slidesIndexes[i]];
3835
+        }
3836
+        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
3837
+        activeIndex = Math.max(activeIndex, 0);
3838
+      }
3839
+    } else {
3840
+      swiper.virtual.slides.splice(slidesIndexes, 1);
3841
+      if (swiper.params.virtual.cache) {
3842
+        delete swiper.virtual.cache[slidesIndexes];
3843
+      }
3844
+      if (slidesIndexes < activeIndex) activeIndex -= 1;
3845
+      activeIndex = Math.max(activeIndex, 0);
3846
+    }
3847
+    swiper.virtual.update(true);
3848
+    swiper.slideTo(activeIndex, 0);
3849
+  },
3850
+  removeAllSlides() {
3851
+    const swiper = this;
3852
+    swiper.virtual.slides = [];
3853
+    if (swiper.params.virtual.cache) {
3854
+      swiper.virtual.cache = {};
3855
+    }
3856
+    swiper.virtual.update(true);
3857
+    swiper.slideTo(0, 0);
3858
+  },
3859
+};
3860
+
3861
+var Virtual$1 = {
3862
+  name: 'virtual',
3863
+  params: {
3864
+    virtual: {
3865
+      enabled: false,
3866
+      slides: [],
3867
+      cache: true,
3868
+      renderSlide: null,
3869
+      renderExternal: null,
3870
+      addSlidesBefore: 0,
3871
+      addSlidesAfter: 0,
3872
+    },
3873
+  },
3874
+  create() {
3875
+    const swiper = this;
3876
+    Utils.extend(swiper, {
3877
+      virtual: {
3878
+        update: Virtual.update.bind(swiper),
3879
+        appendSlide: Virtual.appendSlide.bind(swiper),
3880
+        prependSlide: Virtual.prependSlide.bind(swiper),
3881
+        removeSlide: Virtual.removeSlide.bind(swiper),
3882
+        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
3883
+        renderSlide: Virtual.renderSlide.bind(swiper),
3884
+        slides: swiper.params.virtual.slides,
3885
+        cache: {},
3886
+      },
3887
+    });
3888
+  },
3889
+  on: {
3890
+    beforeInit() {
3891
+      const swiper = this;
3892
+      if (!swiper.params.virtual.enabled) return;
3893
+      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
3894
+      const overwriteParams = {
3895
+        watchSlidesProgress: true,
3896
+      };
3897
+      Utils.extend(swiper.params, overwriteParams);
3898
+      Utils.extend(swiper.originalParams, overwriteParams);
3899
+
3900
+      if (!swiper.params.initialSlide) {
3901
+        swiper.virtual.update();
3902
+      }
3903
+    },
3904
+    setTranslate() {
3905
+      const swiper = this;
3906
+      if (!swiper.params.virtual.enabled) return;
3907
+      swiper.virtual.update();
3908
+    },
3909
+  },
3910
+};
3911
+
3912
+const Keyboard = {
3913
+  handle(event) {
3914
+    const swiper = this;
3915
+    const { rtlTranslate: rtl } = swiper;
3916
+    let e = event;
3917
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
3918
+    const kc = e.keyCode || e.charCode;
3919
+    // Directions locks
3920
+    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {
3921
+      return false;
3922
+    }
3923
+    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {
3924
+      return false;
3925
+    }
3926
+    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
3927
+      return undefined;
3928
+    }
3929
+    if (document$1.activeElement && document$1.activeElement.nodeName && (document$1.activeElement.nodeName.toLowerCase() === 'input' || document$1.activeElement.nodeName.toLowerCase() === 'textarea')) {
3930
+      return undefined;
3931
+    }
3932
+    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
3933
+      let inView = false;
3934
+      // Check that swiper should be inside of visible area of window
3935
+      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {
3936
+        return undefined;
3937
+      }
3938
+      const windowWidth = window.innerWidth;
3939
+      const windowHeight = window.innerHeight;
3940
+      const swiperOffset = swiper.$el.offset();
3941
+      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
3942
+      const swiperCoord = [
3943
+        [swiperOffset.left, swiperOffset.top],
3944
+        [swiperOffset.left + swiper.width, swiperOffset.top],
3945
+        [swiperOffset.left, swiperOffset.top + swiper.height],
3946
+        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],
3947
+      ];
3948
+      for (let i = 0; i < swiperCoord.length; i += 1) {
3949
+        const point = swiperCoord[i];
3950
+        if (
3951
+          point[0] >= 0 && point[0] <= windowWidth
3952
+          && point[1] >= 0 && point[1] <= windowHeight
3953
+        ) {
3954
+          inView = true;
3955
+        }
3956
+      }
3957
+      if (!inView) return undefined;
3958
+    }
3959
+    if (swiper.isHorizontal()) {
3960
+      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
3961
+        if (e.preventDefault) e.preventDefault();
3962
+        else e.returnValue = false;
3963
+      }
3964
+      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();
3965
+      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();
3966
+    } else {
3967
+      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
3968
+        if (e.preventDefault) e.preventDefault();
3969
+        else e.returnValue = false;
3970
+      }
3971
+      if (kc === 34 || kc === 40) swiper.slideNext();
3972
+      if (kc === 33 || kc === 38) swiper.slidePrev();
3973
+    }
3974
+    swiper.emit('keyPress', kc);
3975
+    return undefined;
3976
+  },
3977
+  enable() {
3978
+    const swiper = this;
3979
+    if (swiper.keyboard.enabled) return;
3980
+    $(document$1).on('keydown', swiper.keyboard.handle);
3981
+    swiper.keyboard.enabled = true;
3982
+  },
3983
+  disable() {
3984
+    const swiper = this;
3985
+    if (!swiper.keyboard.enabled) return;
3986
+    $(document$1).off('keydown', swiper.keyboard.handle);
3987
+    swiper.keyboard.enabled = false;
3988
+  },
3989
+};
3990
+
3991
+var Keyboard$1 = {
3992
+  name: 'keyboard',
3993
+  params: {
3994
+    keyboard: {
3995
+      enabled: false,
3996
+      onlyInViewport: true,
3997
+    },
3998
+  },
3999
+  create() {
4000
+    const swiper = this;
4001
+    Utils.extend(swiper, {
4002
+      keyboard: {
4003
+        enabled: false,
4004
+        enable: Keyboard.enable.bind(swiper),
4005
+        disable: Keyboard.disable.bind(swiper),
4006
+        handle: Keyboard.handle.bind(swiper),
4007
+      },
4008
+    });
4009
+  },
4010
+  on: {
4011
+    init() {
4012
+      const swiper = this;
4013
+      if (swiper.params.keyboard.enabled) {
4014
+        swiper.keyboard.enable();
4015
+      }
4016
+    },
4017
+    destroy() {
4018
+      const swiper = this;
4019
+      if (swiper.keyboard.enabled) {
4020
+        swiper.keyboard.disable();
4021
+      }
4022
+    },
4023
+  },
4024
+};
4025
+
4026
+function isEventSupported() {
4027
+  const eventName = 'onwheel';
4028
+  let isSupported = eventName in document$1;
4029
+
4030
+  if (!isSupported) {
4031
+    const element = document$1.createElement('div');
4032
+    element.setAttribute(eventName, 'return;');
4033
+    isSupported = typeof element[eventName] === 'function';
4034
+  }
4035
+
4036
+  if (!isSupported
4037
+    && document$1.implementation
4038
+    && document$1.implementation.hasFeature
4039
+    // always returns true in newer browsers as per the standard.
4040
+    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
4041
+    && document$1.implementation.hasFeature('', '') !== true
4042
+  ) {
4043
+    // This is the only way to test support for the `wheel` event in IE9+.
4044
+    isSupported = document$1.implementation.hasFeature('Events.wheel', '3.0');
4045
+  }
4046
+
4047
+  return isSupported;
4048
+}
4049
+const Mousewheel = {
4050
+  lastScrollTime: Utils.now(),
4051
+  lastEventBeforeSnap: undefined,
4052
+  recentWheelEvents: [],
4053
+  event() {
4054
+    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
4055
+    return isEventSupported() ? 'wheel' : 'mousewheel';
4056
+  },
4057
+  normalize(e) {
4058
+    // Reasonable defaults
4059
+    const PIXEL_STEP = 10;
4060
+    const LINE_HEIGHT = 40;
4061
+    const PAGE_HEIGHT = 800;
4062
+
4063
+    let sX = 0;
4064
+    let sY = 0; // spinX, spinY
4065
+    let pX = 0;
4066
+    let pY = 0; // pixelX, pixelY
4067
+
4068
+    // Legacy
4069
+    if ('detail' in e) {
4070
+      sY = e.detail;
4071
+    }
4072
+    if ('wheelDelta' in e) {
4073
+      sY = -e.wheelDelta / 120;
4074
+    }
4075
+    if ('wheelDeltaY' in e) {
4076
+      sY = -e.wheelDeltaY / 120;
4077
+    }
4078
+    if ('wheelDeltaX' in e) {
4079
+      sX = -e.wheelDeltaX / 120;
4080
+    }
4081
+
4082
+    // side scrolling on FF with DOMMouseScroll
4083
+    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
4084
+      sX = sY;
4085
+      sY = 0;
4086
+    }
4087
+
4088
+    pX = sX * PIXEL_STEP;
4089
+    pY = sY * PIXEL_STEP;
4090
+
4091
+    if ('deltaY' in e) {
4092
+      pY = e.deltaY;
4093
+    }
4094
+    if ('deltaX' in e) {
4095
+      pX = e.deltaX;
4096
+    }
4097
+
4098
+    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
4099
+      pX = pY;
4100
+      pY = 0;
4101
+    }
4102
+
4103
+    if ((pX || pY) && e.deltaMode) {
4104
+      if (e.deltaMode === 1) { // delta in LINE units
4105
+        pX *= LINE_HEIGHT;
4106
+        pY *= LINE_HEIGHT;
4107
+      } else { // delta in PAGE units
4108
+        pX *= PAGE_HEIGHT;
4109
+        pY *= PAGE_HEIGHT;
4110
+      }
4111
+    }
4112
+
4113
+    // Fall-back if spin cannot be determined
4114
+    if (pX && !sX) {
4115
+      sX = (pX < 1) ? -1 : 1;
4116
+    }
4117
+    if (pY && !sY) {
4118
+      sY = (pY < 1) ? -1 : 1;
4119
+    }
4120
+
4121
+    return {
4122
+      spinX: sX,
4123
+      spinY: sY,
4124
+      pixelX: pX,
4125
+      pixelY: pY,
4126
+    };
4127
+  },
4128
+  handleMouseEnter() {
4129
+    const swiper = this;
4130
+    swiper.mouseEntered = true;
4131
+  },
4132
+  handleMouseLeave() {
4133
+    const swiper = this;
4134
+    swiper.mouseEntered = false;
4135
+  },
4136
+  handle(event) {
4137
+    let e = event;
4138
+    const swiper = this;
4139
+    const params = swiper.params.mousewheel;
4140
+
4141
+    if (swiper.params.cssMode) {
4142
+      e.preventDefault();
4143
+    }
4144
+
4145
+    let target = swiper.$el;
4146
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4147
+      target = $(swiper.params.mousewheel.eventsTarged);
4148
+    }
4149
+    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
4150
+
4151
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
4152
+    let delta = 0;
4153
+    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
4154
+
4155
+    const data = Mousewheel.normalize(e);
4156
+
4157
+    if (params.forceToAxis) {
4158
+      if (swiper.isHorizontal()) {
4159
+        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
4160
+        else return true;
4161
+      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
4162
+      else return true;
4163
+    } else {
4164
+      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
4165
+    }
4166
+
4167
+    if (delta === 0) return true;
4168
+
4169
+    if (params.invert) delta = -delta;
4170
+
4171
+    if (!swiper.params.freeMode) {
4172
+      // Register the new event in a variable which stores the relevant data
4173
+      const newEvent = {
4174
+        time: Utils.now(),
4175
+        delta: Math.abs(delta),
4176
+        direction: Math.sign(delta),
4177
+        raw: event,
4178
+      };
4179
+
4180
+      // Keep the most recent events
4181
+      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
4182
+      if (recentWheelEvents.length >= 2) {
4183
+        recentWheelEvents.shift(); // only store the last N events
4184
+      }
4185
+      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
4186
+      recentWheelEvents.push(newEvent);
4187
+
4188
+      // If there is at least one previous recorded event:
4189
+      //   If direction has changed or
4190
+      //   if the scroll is quicker than the previous one:
4191
+      //     Animate the slider.
4192
+      // Else (this is the first time the wheel is moved):
4193
+      //     Animate the slider.
4194
+      if (prevEvent) {
4195
+        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
4196
+          swiper.mousewheel.animateSlider(newEvent);
4197
+        }
4198
+      } else {
4199
+        swiper.mousewheel.animateSlider(newEvent);
4200
+      }
4201
+
4202
+      // If it's time to release the scroll:
4203
+      //   Return now so you don't hit the preventDefault.
4204
+      if (swiper.mousewheel.releaseScroll(newEvent)) {
4205
+        return true;
4206
+      }
4207
+    } else {
4208
+      // Freemode or scrollContainer:
4209
+
4210
+      // If we recently snapped after a momentum scroll, then ignore wheel events
4211
+      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
4212
+      // or if it's a new scroll (larger delta or inverse sign as last event before
4213
+      // an end-of-momentum snap).
4214
+      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
4215
+      const { lastEventBeforeSnap } = swiper.mousewheel;
4216
+      const ignoreWheelEvents = lastEventBeforeSnap
4217
+        && newEvent.time < lastEventBeforeSnap.time + 500
4218
+        && newEvent.delta <= lastEventBeforeSnap.delta
4219
+        && newEvent.direction === lastEventBeforeSnap.direction;
4220
+      if (!ignoreWheelEvents) {
4221
+        swiper.mousewheel.lastEventBeforeSnap = undefined;
4222
+
4223
+        if (swiper.params.loop) {
4224
+          swiper.loopFix();
4225
+        }
4226
+        let position = swiper.getTranslate() + (delta * params.sensitivity);
4227
+        const wasBeginning = swiper.isBeginning;
4228
+        const wasEnd = swiper.isEnd;
4229
+
4230
+        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
4231
+        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
4232
+
4233
+        swiper.setTransition(0);
4234
+        swiper.setTranslate(position);
4235
+        swiper.updateProgress();
4236
+        swiper.updateActiveIndex();
4237
+        swiper.updateSlidesClasses();
4238
+
4239
+        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
4240
+          swiper.updateSlidesClasses();
4241
+        }
4242
+
4243
+        if (swiper.params.freeModeSticky) {
4244
+          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
4245
+          // the end of a momentum scroll by storing recent (N=15?) wheel events.
4246
+          // 1. do all N events have decreasing or same (absolute value) delta?
4247
+          // 2. did all N events arrive in the last M (M=500?) msecs?
4248
+          // 3. does the earliest event have an (absolute value) delta that's
4249
+          //    at least P (P=1?) larger than the most recent event's delta?
4250
+          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
4251
+          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
4252
+          // Snap immediately and ignore remaining wheel events in this scroll.
4253
+          // See comment above for "remaining wheel events in this scroll" determination.
4254
+          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
4255
+          clearTimeout(swiper.mousewheel.timeout);
4256
+          swiper.mousewheel.timeout = undefined;
4257
+          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
4258
+          if (recentWheelEvents.length >= 15) {
4259
+            recentWheelEvents.shift(); // only store the last N events
4260
+          }
4261
+          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
4262
+          const firstEvent = recentWheelEvents[0];
4263
+          recentWheelEvents.push(newEvent);
4264
+          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
4265
+            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
4266
+            recentWheelEvents.splice(0);
4267
+          } else if (recentWheelEvents.length >= 15
4268
+              && newEvent.time - firstEvent.time < 500
4269
+              && firstEvent.delta - newEvent.delta >= 1
4270
+              && newEvent.delta <= 6
4271
+          ) {
4272
+            // We're at the end of the deceleration of a momentum scroll, so there's no need
4273
+            // to wait for more events. Snap ASAP on the next tick.
4274
+            // Also, because there's some remaining momentum we'll bias the snap in the
4275
+            // direction of the ongoing scroll because it's better UX for the scroll to snap
4276
+            // in the same direction as the scroll instead of reversing to snap.  Therefore,
4277
+            // if it's already scrolled more than 20% in the current direction, keep going.
4278
+            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
4279
+            swiper.mousewheel.lastEventBeforeSnap = newEvent;
4280
+            recentWheelEvents.splice(0);
4281
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
4282
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
4283
+            }, 0); // no delay; move on next tick
4284
+          }
4285
+          if (!swiper.mousewheel.timeout) {
4286
+            // if we get here, then we haven't detected the end of a momentum scroll, so
4287
+            // we'll consider a scroll "complete" when there haven't been any wheel events
4288
+            // for 500ms.
4289
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
4290
+              const snapToThreshold = 0.5;
4291
+              swiper.mousewheel.lastEventBeforeSnap = newEvent;
4292
+              recentWheelEvents.splice(0);
4293
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
4294
+            }, 500);
4295
+          }
4296
+        }
4297
+
4298
+        // Emit event
4299
+        if (!ignoreWheelEvents) swiper.emit('scroll', e);
4300
+
4301
+        // Stop autoplay
4302
+        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
4303
+        // Return page scroll on edge positions
4304
+        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
4305
+      }
4306
+    }
4307
+
4308
+    if (e.preventDefault) e.preventDefault();
4309
+    else e.returnValue = false;
4310
+    return false;
4311
+  },
4312
+  animateSlider(newEvent) {
4313
+    const swiper = this;
4314
+    // If the movement is NOT big enough and
4315
+    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
4316
+    //   Don't go any further (avoid insignificant scroll movement).
4317
+    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
4318
+      // Return false as a default
4319
+      return true;
4320
+    }
4321
+    // If user is scrolling towards the end:
4322
+    //   If the slider hasn't hit the latest slide or
4323
+    //   if the slider is a loop and
4324
+    //   if the slider isn't moving right now:
4325
+    //     Go to next slide and
4326
+    //     emit a scroll event.
4327
+    // Else (the user is scrolling towards the beginning) and
4328
+    // if the slider hasn't hit the first slide or
4329
+    // if the slider is a loop and
4330
+    // if the slider isn't moving right now:
4331
+    //   Go to prev slide and
4332
+    //   emit a scroll event.
4333
+    if (newEvent.direction < 0) {
4334
+      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
4335
+        swiper.slideNext();
4336
+        swiper.emit('scroll', newEvent.raw);
4337
+      }
4338
+    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
4339
+      swiper.slidePrev();
4340
+      swiper.emit('scroll', newEvent.raw);
4341
+    }
4342
+    // If you got here is because an animation has been triggered so store the current time
4343
+    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();
4344
+    // Return false as a default
4345
+    return false;
4346
+  },
4347
+  releaseScroll(newEvent) {
4348
+    const swiper = this;
4349
+    const params = swiper.params.mousewheel;
4350
+    if (newEvent.direction < 0) {
4351
+      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
4352
+        // Return true to animate scroll on edges
4353
+        return true;
4354
+      }
4355
+    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
4356
+      // Return true to animate scroll on edges
4357
+      return true;
4358
+    }
4359
+    return false;
4360
+  },
4361
+  enable() {
4362
+    const swiper = this;
4363
+    const event = Mousewheel.event();
4364
+    if (swiper.params.cssMode) {
4365
+      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
4366
+      return true;
4367
+    }
4368
+    if (!event) return false;
4369
+    if (swiper.mousewheel.enabled) return false;
4370
+    let target = swiper.$el;
4371
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4372
+      target = $(swiper.params.mousewheel.eventsTarged);
4373
+    }
4374
+    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
4375
+    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
4376
+    target.on(event, swiper.mousewheel.handle);
4377
+    swiper.mousewheel.enabled = true;
4378
+    return true;
4379
+  },
4380
+  disable() {
4381
+    const swiper = this;
4382
+    const event = Mousewheel.event();
4383
+    if (swiper.params.cssMode) {
4384
+      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
4385
+      return true;
4386
+    }
4387
+    if (!event) return false;
4388
+    if (!swiper.mousewheel.enabled) return false;
4389
+    let target = swiper.$el;
4390
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4391
+      target = $(swiper.params.mousewheel.eventsTarged);
4392
+    }
4393
+    target.off(event, swiper.mousewheel.handle);
4394
+    swiper.mousewheel.enabled = false;
4395
+    return true;
4396
+  },
4397
+};
4398
+
4399
+var Mousewheel$1 = {
4400
+  name: 'mousewheel',
4401
+  params: {
4402
+    mousewheel: {
4403
+      enabled: false,
4404
+      releaseOnEdges: false,
4405
+      invert: false,
4406
+      forceToAxis: false,
4407
+      sensitivity: 1,
4408
+      eventsTarged: 'container',
4409
+    },
4410
+  },
4411
+  create() {
4412
+    const swiper = this;
4413
+    Utils.extend(swiper, {
4414
+      mousewheel: {
4415
+        enabled: false,
4416
+        enable: Mousewheel.enable.bind(swiper),
4417
+        disable: Mousewheel.disable.bind(swiper),
4418
+        handle: Mousewheel.handle.bind(swiper),
4419
+        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
4420
+        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
4421
+        animateSlider: Mousewheel.animateSlider.bind(swiper),
4422
+        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
4423
+        lastScrollTime: Utils.now(),
4424
+        lastEventBeforeSnap: undefined,
4425
+        recentWheelEvents: [],
4426
+      },
4427
+    });
4428
+  },
4429
+  on: {
4430
+    init() {
4431
+      const swiper = this;
4432
+      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
4433
+        swiper.mousewheel.disable();
4434
+      }
4435
+      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
4436
+    },
4437
+    destroy() {
4438
+      const swiper = this;
4439
+      if (swiper.params.cssMode) {
4440
+        swiper.mousewheel.enable();
4441
+      }
4442
+      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
4443
+    },
4444
+  },
4445
+};
4446
+
4447
+const Navigation = {
4448
+  update() {
4449
+    // Update Navigation Buttons
4450
+    const swiper = this;
4451
+    const params = swiper.params.navigation;
4452
+
4453
+    if (swiper.params.loop) return;
4454
+    const { $nextEl, $prevEl } = swiper.navigation;
4455
+
4456
+    if ($prevEl && $prevEl.length > 0) {
4457
+      if (swiper.isBeginning) {
4458
+        $prevEl.addClass(params.disabledClass);
4459
+      } else {
4460
+        $prevEl.removeClass(params.disabledClass);
4461
+      }
4462
+      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4463
+    }
4464
+    if ($nextEl && $nextEl.length > 0) {
4465
+      if (swiper.isEnd) {
4466
+        $nextEl.addClass(params.disabledClass);
4467
+      } else {
4468
+        $nextEl.removeClass(params.disabledClass);
4469
+      }
4470
+      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4471
+    }
4472
+  },
4473
+  onPrevClick(e) {
4474
+    const swiper = this;
4475
+    e.preventDefault();
4476
+    if (swiper.isBeginning && !swiper.params.loop) return;
4477
+    swiper.slidePrev();
4478
+  },
4479
+  onNextClick(e) {
4480
+    const swiper = this;
4481
+    e.preventDefault();
4482
+    if (swiper.isEnd && !swiper.params.loop) return;
4483
+    swiper.slideNext();
4484
+  },
4485
+  init() {
4486
+    const swiper = this;
4487
+    const params = swiper.params.navigation;
4488
+    if (!(params.nextEl || params.prevEl)) return;
4489
+
4490
+    let $nextEl;
4491
+    let $prevEl;
4492
+    if (params.nextEl) {
4493
+      $nextEl = $(params.nextEl);
4494
+      if (
4495
+        swiper.params.uniqueNavElements
4496
+        && typeof params.nextEl === 'string'
4497
+        && $nextEl.length > 1
4498
+        && swiper.$el.find(params.nextEl).length === 1
4499
+      ) {
4500
+        $nextEl = swiper.$el.find(params.nextEl);
4501
+      }
4502
+    }
4503
+    if (params.prevEl) {
4504
+      $prevEl = $(params.prevEl);
4505
+      if (
4506
+        swiper.params.uniqueNavElements
4507
+        && typeof params.prevEl === 'string'
4508
+        && $prevEl.length > 1
4509
+        && swiper.$el.find(params.prevEl).length === 1
4510
+      ) {
4511
+        $prevEl = swiper.$el.find(params.prevEl);
4512
+      }
4513
+    }
4514
+
4515
+    if ($nextEl && $nextEl.length > 0) {
4516
+      $nextEl.on('click', swiper.navigation.onNextClick);
4517
+    }
4518
+    if ($prevEl && $prevEl.length > 0) {
4519
+      $prevEl.on('click', swiper.navigation.onPrevClick);
4520
+    }
4521
+
4522
+    Utils.extend(swiper.navigation, {
4523
+      $nextEl,
4524
+      nextEl: $nextEl && $nextEl[0],
4525
+      $prevEl,
4526
+      prevEl: $prevEl && $prevEl[0],
4527
+    });
4528
+  },
4529
+  destroy() {
4530
+    const swiper = this;
4531
+    const { $nextEl, $prevEl } = swiper.navigation;
4532
+    if ($nextEl && $nextEl.length) {
4533
+      $nextEl.off('click', swiper.navigation.onNextClick);
4534
+      $nextEl.removeClass(swiper.params.navigation.disabledClass);
4535
+    }
4536
+    if ($prevEl && $prevEl.length) {
4537
+      $prevEl.off('click', swiper.navigation.onPrevClick);
4538
+      $prevEl.removeClass(swiper.params.navigation.disabledClass);
4539
+    }
4540
+  },
4541
+};
4542
+
4543
+var Navigation$1 = {
4544
+  name: 'navigation',
4545
+  params: {
4546
+    navigation: {
4547
+      nextEl: null,
4548
+      prevEl: null,
4549
+
4550
+      hideOnClick: false,
4551
+      disabledClass: 'swiper-button-disabled',
4552
+      hiddenClass: 'swiper-button-hidden',
4553
+      lockClass: 'swiper-button-lock',
4554
+    },
4555
+  },
4556
+  create() {
4557
+    const swiper = this;
4558
+    Utils.extend(swiper, {
4559
+      navigation: {
4560
+        init: Navigation.init.bind(swiper),
4561
+        update: Navigation.update.bind(swiper),
4562
+        destroy: Navigation.destroy.bind(swiper),
4563
+        onNextClick: Navigation.onNextClick.bind(swiper),
4564
+        onPrevClick: Navigation.onPrevClick.bind(swiper),
4565
+      },
4566
+    });
4567
+  },
4568
+  on: {
4569
+    init() {
4570
+      const swiper = this;
4571
+      swiper.navigation.init();
4572
+      swiper.navigation.update();
4573
+    },
4574
+    toEdge() {
4575
+      const swiper = this;
4576
+      swiper.navigation.update();
4577
+    },
4578
+    fromEdge() {
4579
+      const swiper = this;
4580
+      swiper.navigation.update();
4581
+    },
4582
+    destroy() {
4583
+      const swiper = this;
4584
+      swiper.navigation.destroy();
4585
+    },
4586
+    click(e) {
4587
+      const swiper = this;
4588
+      const { $nextEl, $prevEl } = swiper.navigation;
4589
+      if (
4590
+        swiper.params.navigation.hideOnClick
4591
+        && !$(e.target).is($prevEl)
4592
+        && !$(e.target).is($nextEl)
4593
+      ) {
4594
+        let isHidden;
4595
+        if ($nextEl) {
4596
+          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
4597
+        } else if ($prevEl) {
4598
+          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
4599
+        }
4600
+        if (isHidden === true) {
4601
+          swiper.emit('navigationShow', swiper);
4602
+        } else {
4603
+          swiper.emit('navigationHide', swiper);
4604
+        }
4605
+        if ($nextEl) {
4606
+          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
4607
+        }
4608
+        if ($prevEl) {
4609
+          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
4610
+        }
4611
+      }
4612
+    },
4613
+  },
4614
+};
4615
+
4616
+const Pagination = {
4617
+  update() {
4618
+    // Render || Update Pagination bullets/items
4619
+    const swiper = this;
4620
+    const rtl = swiper.rtl;
4621
+    const params = swiper.params.pagination;
4622
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4623
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
4624
+    const $el = swiper.pagination.$el;
4625
+    // Current/Total
4626
+    let current;
4627
+    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
4628
+    if (swiper.params.loop) {
4629
+      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
4630
+      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
4631
+        current -= (slidesLength - (swiper.loopedSlides * 2));
4632
+      }
4633
+      if (current > total - 1) current -= total;
4634
+      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
4635
+    } else if (typeof swiper.snapIndex !== 'undefined') {
4636
+      current = swiper.snapIndex;
4637
+    } else {
4638
+      current = swiper.activeIndex || 0;
4639
+    }
4640
+    // Types
4641
+    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
4642
+      const bullets = swiper.pagination.bullets;
4643
+      let firstIndex;
4644
+      let lastIndex;
4645
+      let midIndex;
4646
+      if (params.dynamicBullets) {
4647
+        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
4648
+        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);
4649
+        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
4650
+          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
4651
+          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
4652
+            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
4653
+          } else if (swiper.pagination.dynamicBulletIndex < 0) {
4654
+            swiper.pagination.dynamicBulletIndex = 0;
4655
+          }
4656
+        }
4657
+        firstIndex = current - swiper.pagination.dynamicBulletIndex;
4658
+        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
4659
+        midIndex = (lastIndex + firstIndex) / 2;
4660
+      }
4661
+      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);
4662
+      if ($el.length > 1) {
4663
+        bullets.each((index, bullet) => {
4664
+          const $bullet = $(bullet);
4665
+          const bulletIndex = $bullet.index();
4666
+          if (bulletIndex === current) {
4667
+            $bullet.addClass(params.bulletActiveClass);
4668
+          }
4669
+          if (params.dynamicBullets) {
4670
+            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
4671
+              $bullet.addClass(`${params.bulletActiveClass}-main`);
4672
+            }
4673
+            if (bulletIndex === firstIndex) {
4674
+              $bullet
4675
+                .prev()
4676
+                .addClass(`${params.bulletActiveClass}-prev`)
4677
+                .prev()
4678
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
4679
+            }
4680
+            if (bulletIndex === lastIndex) {
4681
+              $bullet
4682
+                .next()
4683
+                .addClass(`${params.bulletActiveClass}-next`)
4684
+                .next()
4685
+                .addClass(`${params.bulletActiveClass}-next-next`);
4686
+            }
4687
+          }
4688
+        });
4689
+      } else {
4690
+        const $bullet = bullets.eq(current);
4691
+        const bulletIndex = $bullet.index();
4692
+        $bullet.addClass(params.bulletActiveClass);
4693
+        if (params.dynamicBullets) {
4694
+          const $firstDisplayedBullet = bullets.eq(firstIndex);
4695
+          const $lastDisplayedBullet = bullets.eq(lastIndex);
4696
+          for (let i = firstIndex; i <= lastIndex; i += 1) {
4697
+            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);
4698
+          }
4699
+          if (swiper.params.loop) {
4700
+            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
4701
+              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {
4702
+                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);
4703
+              }
4704
+              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);
4705
+            } else {
4706
+              $firstDisplayedBullet
4707
+                .prev()
4708
+                .addClass(`${params.bulletActiveClass}-prev`)
4709
+                .prev()
4710
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
4711
+              $lastDisplayedBullet
4712
+                .next()
4713
+                .addClass(`${params.bulletActiveClass}-next`)
4714
+                .next()
4715
+                .addClass(`${params.bulletActiveClass}-next-next`);
4716
+            }
4717
+          } else {
4718
+            $firstDisplayedBullet
4719
+              .prev()
4720
+              .addClass(`${params.bulletActiveClass}-prev`)
4721
+              .prev()
4722
+              .addClass(`${params.bulletActiveClass}-prev-prev`);
4723
+            $lastDisplayedBullet
4724
+              .next()
4725
+              .addClass(`${params.bulletActiveClass}-next`)
4726
+              .next()
4727
+              .addClass(`${params.bulletActiveClass}-next-next`);
4728
+          }
4729
+        }
4730
+      }
4731
+      if (params.dynamicBullets) {
4732
+        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
4733
+        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
4734
+        const offsetProp = rtl ? 'right' : 'left';
4735
+        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);
4736
+      }
4737
+    }
4738
+    if (params.type === 'fraction') {
4739
+      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));
4740
+      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));
4741
+    }
4742
+    if (params.type === 'progressbar') {
4743
+      let progressbarDirection;
4744
+      if (params.progressbarOpposite) {
4745
+        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
4746
+      } else {
4747
+        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
4748
+      }
4749
+      const scale = (current + 1) / total;
4750
+      let scaleX = 1;
4751
+      let scaleY = 1;
4752
+      if (progressbarDirection === 'horizontal') {
4753
+        scaleX = scale;
4754
+      } else {
4755
+        scaleY = scale;
4756
+      }
4757
+      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);
4758
+    }
4759
+    if (params.type === 'custom' && params.renderCustom) {
4760
+      $el.html(params.renderCustom(swiper, current + 1, total));
4761
+      swiper.emit('paginationRender', swiper, $el[0]);
4762
+    } else {
4763
+      swiper.emit('paginationUpdate', swiper, $el[0]);
4764
+    }
4765
+    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4766
+  },
4767
+  render() {
4768
+    // Render Container
4769
+    const swiper = this;
4770
+    const params = swiper.params.pagination;
4771
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4772
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
4773
+
4774
+    const $el = swiper.pagination.$el;
4775
+    let paginationHTML = '';
4776
+    if (params.type === 'bullets') {
4777
+      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
4778
+      for (let i = 0; i < numberOfBullets; i += 1) {
4779
+        if (params.renderBullet) {
4780
+          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
4781
+        } else {
4782
+          paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`;
4783
+        }
4784
+      }
4785
+      $el.html(paginationHTML);
4786
+      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);
4787
+    }
4788
+    if (params.type === 'fraction') {
4789
+      if (params.renderFraction) {
4790
+        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
4791
+      } else {
4792
+        paginationHTML = `<span class="${params.currentClass}"></span>`
4793
+        + ' / '
4794
+        + `<span class="${params.totalClass}"></span>`;
4795
+      }
4796
+      $el.html(paginationHTML);
4797
+    }
4798
+    if (params.type === 'progressbar') {
4799
+      if (params.renderProgressbar) {
4800
+        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
4801
+      } else {
4802
+        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
4803
+      }
4804
+      $el.html(paginationHTML);
4805
+    }
4806
+    if (params.type !== 'custom') {
4807
+      swiper.emit('paginationRender', swiper.pagination.$el[0]);
4808
+    }
4809
+  },
4810
+  init() {
4811
+    const swiper = this;
4812
+    const params = swiper.params.pagination;
4813
+    if (!params.el) return;
4814
+
4815
+    let $el = $(params.el);
4816
+    if ($el.length === 0) return;
4817
+
4818
+    if (
4819
+      swiper.params.uniqueNavElements
4820
+      && typeof params.el === 'string'
4821
+      && $el.length > 1
4822
+      && swiper.$el.find(params.el).length === 1
4823
+    ) {
4824
+      $el = swiper.$el.find(params.el);
4825
+    }
4826
+
4827
+    if (params.type === 'bullets' && params.clickable) {
4828
+      $el.addClass(params.clickableClass);
4829
+    }
4830
+
4831
+    $el.addClass(params.modifierClass + params.type);
4832
+
4833
+    if (params.type === 'bullets' && params.dynamicBullets) {
4834
+      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);
4835
+      swiper.pagination.dynamicBulletIndex = 0;
4836
+      if (params.dynamicMainBullets < 1) {
4837
+        params.dynamicMainBullets = 1;
4838
+      }
4839
+    }
4840
+    if (params.type === 'progressbar' && params.progressbarOpposite) {
4841
+      $el.addClass(params.progressbarOppositeClass);
4842
+    }
4843
+
4844
+    if (params.clickable) {
4845
+      $el.on('click', `.${params.bulletClass}`, function onClick(e) {
4846
+        e.preventDefault();
4847
+        let index = $(this).index() * swiper.params.slidesPerGroup;
4848
+        if (swiper.params.loop) index += swiper.loopedSlides;
4849
+        swiper.slideTo(index);
4850
+      });
4851
+    }
4852
+
4853
+    Utils.extend(swiper.pagination, {
4854
+      $el,
4855
+      el: $el[0],
4856
+    });
4857
+  },
4858
+  destroy() {
4859
+    const swiper = this;
4860
+    const params = swiper.params.pagination;
4861
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4862
+    const $el = swiper.pagination.$el;
4863
+
4864
+    $el.removeClass(params.hiddenClass);
4865
+    $el.removeClass(params.modifierClass + params.type);
4866
+    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
4867
+    if (params.clickable) {
4868
+      $el.off('click', `.${params.bulletClass}`);
4869
+    }
4870
+  },
4871
+};
4872
+
4873
+var Pagination$1 = {
4874
+  name: 'pagination',
4875
+  params: {
4876
+    pagination: {
4877
+      el: null,
4878
+      bulletElement: 'span',
4879
+      clickable: false,
4880
+      hideOnClick: false,
4881
+      renderBullet: null,
4882
+      renderProgressbar: null,
4883
+      renderFraction: null,
4884
+      renderCustom: null,
4885
+      progressbarOpposite: false,
4886
+      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
4887
+      dynamicBullets: false,
4888
+      dynamicMainBullets: 1,
4889
+      formatFractionCurrent: (number) => number,
4890
+      formatFractionTotal: (number) => number,
4891
+      bulletClass: 'swiper-pagination-bullet',
4892
+      bulletActiveClass: 'swiper-pagination-bullet-active',
4893
+      modifierClass: 'swiper-pagination-', // NEW
4894
+      currentClass: 'swiper-pagination-current',
4895
+      totalClass: 'swiper-pagination-total',
4896
+      hiddenClass: 'swiper-pagination-hidden',
4897
+      progressbarFillClass: 'swiper-pagination-progressbar-fill',
4898
+      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
4899
+      clickableClass: 'swiper-pagination-clickable', // NEW
4900
+      lockClass: 'swiper-pagination-lock',
4901
+    },
4902
+  },
4903
+  create() {
4904
+    const swiper = this;
4905
+    Utils.extend(swiper, {
4906
+      pagination: {
4907
+        init: Pagination.init.bind(swiper),
4908
+        render: Pagination.render.bind(swiper),
4909
+        update: Pagination.update.bind(swiper),
4910
+        destroy: Pagination.destroy.bind(swiper),
4911
+        dynamicBulletIndex: 0,
4912
+      },
4913
+    });
4914
+  },
4915
+  on: {
4916
+    init() {
4917
+      const swiper = this;
4918
+      swiper.pagination.init();
4919
+      swiper.pagination.render();
4920
+      swiper.pagination.update();
4921
+    },
4922
+    activeIndexChange() {
4923
+      const swiper = this;
4924
+      if (swiper.params.loop) {
4925
+        swiper.pagination.update();
4926
+      } else if (typeof swiper.snapIndex === 'undefined') {
4927
+        swiper.pagination.update();
4928
+      }
4929
+    },
4930
+    snapIndexChange() {
4931
+      const swiper = this;
4932
+      if (!swiper.params.loop) {
4933
+        swiper.pagination.update();
4934
+      }
4935
+    },
4936
+    slidesLengthChange() {
4937
+      const swiper = this;
4938
+      if (swiper.params.loop) {
4939
+        swiper.pagination.render();
4940
+        swiper.pagination.update();
4941
+      }
4942
+    },
4943
+    snapGridLengthChange() {
4944
+      const swiper = this;
4945
+      if (!swiper.params.loop) {
4946
+        swiper.pagination.render();
4947
+        swiper.pagination.update();
4948
+      }
4949
+    },
4950
+    destroy() {
4951
+      const swiper = this;
4952
+      swiper.pagination.destroy();
4953
+    },
4954
+    click(e) {
4955
+      const swiper = this;
4956
+      if (
4957
+        swiper.params.pagination.el
4958
+        && swiper.params.pagination.hideOnClick
4959
+        && swiper.pagination.$el.length > 0
4960
+        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
4961
+      ) {
4962
+        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
4963
+        if (isHidden === true) {
4964
+          swiper.emit('paginationShow', swiper);
4965
+        } else {
4966
+          swiper.emit('paginationHide', swiper);
4967
+        }
4968
+        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
4969
+      }
4970
+    },
4971
+  },
4972
+};
4973
+
4974
+const Scrollbar = {
4975
+  setTranslate() {
4976
+    const swiper = this;
4977
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
4978
+    const { scrollbar, rtlTranslate: rtl, progress } = swiper;
4979
+    const {
4980
+      dragSize, trackSize, $dragEl, $el,
4981
+    } = scrollbar;
4982
+    const params = swiper.params.scrollbar;
4983
+
4984
+    let newSize = dragSize;
4985
+    let newPos = (trackSize - dragSize) * progress;
4986
+    if (rtl) {
4987
+      newPos = -newPos;
4988
+      if (newPos > 0) {
4989
+        newSize = dragSize - newPos;
4990
+        newPos = 0;
4991
+      } else if (-newPos + dragSize > trackSize) {
4992
+        newSize = trackSize + newPos;
4993
+      }
4994
+    } else if (newPos < 0) {
4995
+      newSize = dragSize + newPos;
4996
+      newPos = 0;
4997
+    } else if (newPos + dragSize > trackSize) {
4998
+      newSize = trackSize - newPos;
4999
+    }
5000
+    if (swiper.isHorizontal()) {
5001
+      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);
5002
+      $dragEl[0].style.width = `${newSize}px`;
5003
+    } else {
5004
+      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);
5005
+      $dragEl[0].style.height = `${newSize}px`;
5006
+    }
5007
+    if (params.hide) {
5008
+      clearTimeout(swiper.scrollbar.timeout);
5009
+      $el[0].style.opacity = 1;
5010
+      swiper.scrollbar.timeout = setTimeout(() => {
5011
+        $el[0].style.opacity = 0;
5012
+        $el.transition(400);
5013
+      }, 1000);
5014
+    }
5015
+  },
5016
+  setTransition(duration) {
5017
+    const swiper = this;
5018
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5019
+    swiper.scrollbar.$dragEl.transition(duration);
5020
+  },
5021
+  updateSize() {
5022
+    const swiper = this;
5023
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5024
+
5025
+    const { scrollbar } = swiper;
5026
+    const { $dragEl, $el } = scrollbar;
5027
+
5028
+    $dragEl[0].style.width = '';
5029
+    $dragEl[0].style.height = '';
5030
+    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
5031
+
5032
+    const divider = swiper.size / swiper.virtualSize;
5033
+    const moveDivider = divider * (trackSize / swiper.size);
5034
+    let dragSize;
5035
+    if (swiper.params.scrollbar.dragSize === 'auto') {
5036
+      dragSize = trackSize * divider;
5037
+    } else {
5038
+      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
5039
+    }
5040
+
5041
+    if (swiper.isHorizontal()) {
5042
+      $dragEl[0].style.width = `${dragSize}px`;
5043
+    } else {
5044
+      $dragEl[0].style.height = `${dragSize}px`;
5045
+    }
5046
+
5047
+    if (divider >= 1) {
5048
+      $el[0].style.display = 'none';
5049
+    } else {
5050
+      $el[0].style.display = '';
5051
+    }
5052
+    if (swiper.params.scrollbar.hide) {
5053
+      $el[0].style.opacity = 0;
5054
+    }
5055
+    Utils.extend(scrollbar, {
5056
+      trackSize,
5057
+      divider,
5058
+      moveDivider,
5059
+      dragSize,
5060
+    });
5061
+    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
5062
+  },
5063
+  getPointerPosition(e) {
5064
+    const swiper = this;
5065
+    if (swiper.isHorizontal()) {
5066
+      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
5067
+    }
5068
+    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
5069
+  },
5070
+  setDragPosition(e) {
5071
+    const swiper = this;
5072
+    const { scrollbar, rtlTranslate: rtl } = swiper;
5073
+    const {
5074
+      $el,
5075
+      dragSize,
5076
+      trackSize,
5077
+      dragStartPos,
5078
+    } = scrollbar;
5079
+
5080
+    let positionRatio;
5081
+    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
5082
+      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
5083
+    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
5084
+    if (rtl) {
5085
+      positionRatio = 1 - positionRatio;
5086
+    }
5087
+
5088
+    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
5089
+
5090
+    swiper.updateProgress(position);
5091
+    swiper.setTranslate(position);
5092
+    swiper.updateActiveIndex();
5093
+    swiper.updateSlidesClasses();
5094
+  },
5095
+  onDragStart(e) {
5096
+    const swiper = this;
5097
+    const params = swiper.params.scrollbar;
5098
+    const { scrollbar, $wrapperEl } = swiper;
5099
+    const { $el, $dragEl } = scrollbar;
5100
+    swiper.scrollbar.isTouched = true;
5101
+    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
5102
+      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
5103
+    e.preventDefault();
5104
+    e.stopPropagation();
5105
+
5106
+    $wrapperEl.transition(100);
5107
+    $dragEl.transition(100);
5108
+    scrollbar.setDragPosition(e);
5109
+
5110
+    clearTimeout(swiper.scrollbar.dragTimeout);
5111
+
5112
+    $el.transition(0);
5113
+    if (params.hide) {
5114
+      $el.css('opacity', 1);
5115
+    }
5116
+    if (swiper.params.cssMode) {
5117
+      swiper.$wrapperEl.css('scroll-snap-type', 'none');
5118
+    }
5119
+    swiper.emit('scrollbarDragStart', e);
5120
+  },
5121
+  onDragMove(e) {
5122
+    const swiper = this;
5123
+    const { scrollbar, $wrapperEl } = swiper;
5124
+    const { $el, $dragEl } = scrollbar;
5125
+
5126
+    if (!swiper.scrollbar.isTouched) return;
5127
+    if (e.preventDefault) e.preventDefault();
5128
+    else e.returnValue = false;
5129
+    scrollbar.setDragPosition(e);
5130
+    $wrapperEl.transition(0);
5131
+    $el.transition(0);
5132
+    $dragEl.transition(0);
5133
+    swiper.emit('scrollbarDragMove', e);
5134
+  },
5135
+  onDragEnd(e) {
5136
+    const swiper = this;
5137
+
5138
+    const params = swiper.params.scrollbar;
5139
+    const { scrollbar, $wrapperEl } = swiper;
5140
+    const { $el } = scrollbar;
5141
+
5142
+    if (!swiper.scrollbar.isTouched) return;
5143
+    swiper.scrollbar.isTouched = false;
5144
+    if (swiper.params.cssMode) {
5145
+      swiper.$wrapperEl.css('scroll-snap-type', '');
5146
+      $wrapperEl.transition('');
5147
+    }
5148
+    if (params.hide) {
5149
+      clearTimeout(swiper.scrollbar.dragTimeout);
5150
+      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {
5151
+        $el.css('opacity', 0);
5152
+        $el.transition(400);
5153
+      }, 1000);
5154
+    }
5155
+    swiper.emit('scrollbarDragEnd', e);
5156
+    if (params.snapOnRelease) {
5157
+      swiper.slideToClosest();
5158
+    }
5159
+  },
5160
+  enableDraggable() {
5161
+    const swiper = this;
5162
+    if (!swiper.params.scrollbar.el) return;
5163
+    const {
5164
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
5165
+    } = swiper;
5166
+    const $el = scrollbar.$el;
5167
+    const target = $el[0];
5168
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
5169
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
5170
+    if (!Support.touch) {
5171
+      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
5172
+      document$1.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
5173
+      document$1.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
5174
+    } else {
5175
+      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
5176
+      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
5177
+      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
5178
+    }
5179
+  },
5180
+  disableDraggable() {
5181
+    const swiper = this;
5182
+    if (!swiper.params.scrollbar.el) return;
5183
+    const {
5184
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
5185
+    } = swiper;
5186
+    const $el = scrollbar.$el;
5187
+    const target = $el[0];
5188
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
5189
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
5190
+    if (!Support.touch) {
5191
+      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
5192
+      document$1.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
5193
+      document$1.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
5194
+    } else {
5195
+      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
5196
+      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
5197
+      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
5198
+    }
5199
+  },
5200
+  init() {
5201
+    const swiper = this;
5202
+    if (!swiper.params.scrollbar.el) return;
5203
+    const { scrollbar, $el: $swiperEl } = swiper;
5204
+    const params = swiper.params.scrollbar;
5205
+
5206
+    let $el = $(params.el);
5207
+    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
5208
+      $el = $swiperEl.find(params.el);
5209
+    }
5210
+
5211
+    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);
5212
+    if ($dragEl.length === 0) {
5213
+      $dragEl = $(`<div class="${swiper.params.scrollbar.dragClass}"></div>`);
5214
+      $el.append($dragEl);
5215
+    }
5216
+
5217
+    Utils.extend(scrollbar, {
5218
+      $el,
5219
+      el: $el[0],
5220
+      $dragEl,
5221
+      dragEl: $dragEl[0],
5222
+    });
5223
+
5224
+    if (params.draggable) {
5225
+      scrollbar.enableDraggable();
5226
+    }
5227
+  },
5228
+  destroy() {
5229
+    const swiper = this;
5230
+    swiper.scrollbar.disableDraggable();
5231
+  },
5232
+};
5233
+
5234
+var Scrollbar$1 = {
5235
+  name: 'scrollbar',
5236
+  params: {
5237
+    scrollbar: {
5238
+      el: null,
5239
+      dragSize: 'auto',
5240
+      hide: false,
5241
+      draggable: false,
5242
+      snapOnRelease: true,
5243
+      lockClass: 'swiper-scrollbar-lock',
5244
+      dragClass: 'swiper-scrollbar-drag',
5245
+    },
5246
+  },
5247
+  create() {
5248
+    const swiper = this;
5249
+    Utils.extend(swiper, {
5250
+      scrollbar: {
5251
+        init: Scrollbar.init.bind(swiper),
5252
+        destroy: Scrollbar.destroy.bind(swiper),
5253
+        updateSize: Scrollbar.updateSize.bind(swiper),
5254
+        setTranslate: Scrollbar.setTranslate.bind(swiper),
5255
+        setTransition: Scrollbar.setTransition.bind(swiper),
5256
+        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
5257
+        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
5258
+        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
5259
+        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
5260
+        onDragStart: Scrollbar.onDragStart.bind(swiper),
5261
+        onDragMove: Scrollbar.onDragMove.bind(swiper),
5262
+        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
5263
+        isTouched: false,
5264
+        timeout: null,
5265
+        dragTimeout: null,
5266
+      },
5267
+    });
5268
+  },
5269
+  on: {
5270
+    init() {
5271
+      const swiper = this;
5272
+      swiper.scrollbar.init();
5273
+      swiper.scrollbar.updateSize();
5274
+      swiper.scrollbar.setTranslate();
5275
+    },
5276
+    update() {
5277
+      const swiper = this;
5278
+      swiper.scrollbar.updateSize();
5279
+    },
5280
+    resize() {
5281
+      const swiper = this;
5282
+      swiper.scrollbar.updateSize();
5283
+    },
5284
+    observerUpdate() {
5285
+      const swiper = this;
5286
+      swiper.scrollbar.updateSize();
5287
+    },
5288
+    setTranslate() {
5289
+      const swiper = this;
5290
+      swiper.scrollbar.setTranslate();
5291
+    },
5292
+    setTransition(duration) {
5293
+      const swiper = this;
5294
+      swiper.scrollbar.setTransition(duration);
5295
+    },
5296
+    destroy() {
5297
+      const swiper = this;
5298
+      swiper.scrollbar.destroy();
5299
+    },
5300
+  },
5301
+};
5302
+
5303
+const Parallax = {
5304
+  setTransform(el, progress) {
5305
+    const swiper = this;
5306
+    const { rtl } = swiper;
5307
+
5308
+    const $el = $(el);
5309
+    const rtlFactor = rtl ? -1 : 1;
5310
+
5311
+    const p = $el.attr('data-swiper-parallax') || '0';
5312
+    let x = $el.attr('data-swiper-parallax-x');
5313
+    let y = $el.attr('data-swiper-parallax-y');
5314
+    const scale = $el.attr('data-swiper-parallax-scale');
5315
+    const opacity = $el.attr('data-swiper-parallax-opacity');
5316
+
5317
+    if (x || y) {
5318
+      x = x || '0';
5319
+      y = y || '0';
5320
+    } else if (swiper.isHorizontal()) {
5321
+      x = p;
5322
+      y = '0';
5323
+    } else {
5324
+      y = p;
5325
+      x = '0';
5326
+    }
5327
+
5328
+    if ((x).indexOf('%') >= 0) {
5329
+      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
5330
+    } else {
5331
+      x = `${x * progress * rtlFactor}px`;
5332
+    }
5333
+    if ((y).indexOf('%') >= 0) {
5334
+      y = `${parseInt(y, 10) * progress}%`;
5335
+    } else {
5336
+      y = `${y * progress}px`;
5337
+    }
5338
+
5339
+    if (typeof opacity !== 'undefined' && opacity !== null) {
5340
+      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
5341
+      $el[0].style.opacity = currentOpacity;
5342
+    }
5343
+    if (typeof scale === 'undefined' || scale === null) {
5344
+      $el.transform(`translate3d(${x}, ${y}, 0px)`);
5345
+    } else {
5346
+      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
5347
+      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);
5348
+    }
5349
+  },
5350
+  setTranslate() {
5351
+    const swiper = this;
5352
+    const {
5353
+      $el, slides, progress, snapGrid,
5354
+    } = swiper;
5355
+    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5356
+      .each((index, el) => {
5357
+        swiper.parallax.setTransform(el, progress);
5358
+      });
5359
+    slides.each((slideIndex, slideEl) => {
5360
+      let slideProgress = slideEl.progress;
5361
+      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
5362
+        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
5363
+      }
5364
+      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
5365
+      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5366
+        .each((index, el) => {
5367
+          swiper.parallax.setTransform(el, slideProgress);
5368
+        });
5369
+    });
5370
+  },
5371
+  setTransition(duration = this.params.speed) {
5372
+    const swiper = this;
5373
+    const { $el } = swiper;
5374
+    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5375
+      .each((index, parallaxEl) => {
5376
+        const $parallaxEl = $(parallaxEl);
5377
+        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
5378
+        if (duration === 0) parallaxDuration = 0;
5379
+        $parallaxEl.transition(parallaxDuration);
5380
+      });
5381
+  },
5382
+};
5383
+
5384
+var Parallax$1 = {
5385
+  name: 'parallax',
5386
+  params: {
5387
+    parallax: {
5388
+      enabled: false,
5389
+    },
5390
+  },
5391
+  create() {
5392
+    const swiper = this;
5393
+    Utils.extend(swiper, {
5394
+      parallax: {
5395
+        setTransform: Parallax.setTransform.bind(swiper),
5396
+        setTranslate: Parallax.setTranslate.bind(swiper),
5397
+        setTransition: Parallax.setTransition.bind(swiper),
5398
+      },
5399
+    });
5400
+  },
5401
+  on: {
5402
+    beforeInit() {
5403
+      const swiper = this;
5404
+      if (!swiper.params.parallax.enabled) return;
5405
+      swiper.params.watchSlidesProgress = true;
5406
+      swiper.originalParams.watchSlidesProgress = true;
5407
+    },
5408
+    init() {
5409
+      const swiper = this;
5410
+      if (!swiper.params.parallax.enabled) return;
5411
+      swiper.parallax.setTranslate();
5412
+    },
5413
+    setTranslate() {
5414
+      const swiper = this;
5415
+      if (!swiper.params.parallax.enabled) return;
5416
+      swiper.parallax.setTranslate();
5417
+    },
5418
+    setTransition(duration) {
5419
+      const swiper = this;
5420
+      if (!swiper.params.parallax.enabled) return;
5421
+      swiper.parallax.setTransition(duration);
5422
+    },
5423
+  },
5424
+};
5425
+
5426
+const Zoom = {
5427
+  // Calc Scale From Multi-touches
5428
+  getDistanceBetweenTouches(e) {
5429
+    if (e.targetTouches.length < 2) return 1;
5430
+    const x1 = e.targetTouches[0].pageX;
5431
+    const y1 = e.targetTouches[0].pageY;
5432
+    const x2 = e.targetTouches[1].pageX;
5433
+    const y2 = e.targetTouches[1].pageY;
5434
+    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));
5435
+    return distance;
5436
+  },
5437
+  // Events
5438
+  onGestureStart(e) {
5439
+    const swiper = this;
5440
+    const params = swiper.params.zoom;
5441
+    const zoom = swiper.zoom;
5442
+    const { gesture } = zoom;
5443
+    zoom.fakeGestureTouched = false;
5444
+    zoom.fakeGestureMoved = false;
5445
+    if (!Support.gestures) {
5446
+      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
5447
+        return;
5448
+      }
5449
+      zoom.fakeGestureTouched = true;
5450
+      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
5451
+    }
5452
+    if (!gesture.$slideEl || !gesture.$slideEl.length) {
5453
+      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);
5454
+      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5455
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5456
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5457
+      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5458
+      if (gesture.$imageWrapEl.length === 0) {
5459
+        gesture.$imageEl = undefined;
5460
+        return;
5461
+      }
5462
+    }
5463
+    if (gesture.$imageEl) {
5464
+      gesture.$imageEl.transition(0);
5465
+    }
5466
+    swiper.zoom.isScaling = true;
5467
+  },
5468
+  onGestureChange(e) {
5469
+    const swiper = this;
5470
+    const params = swiper.params.zoom;
5471
+    const zoom = swiper.zoom;
5472
+    const { gesture } = zoom;
5473
+    if (!Support.gestures) {
5474
+      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
5475
+        return;
5476
+      }
5477
+      zoom.fakeGestureMoved = true;
5478
+      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
5479
+    }
5480
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5481
+    if (Support.gestures) {
5482
+      zoom.scale = e.scale * zoom.currentScale;
5483
+    } else {
5484
+      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
5485
+    }
5486
+    if (zoom.scale > gesture.maxRatio) {
5487
+      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);
5488
+    }
5489
+    if (zoom.scale < params.minRatio) {
5490
+      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);
5491
+    }
5492
+    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5493
+  },
5494
+  onGestureEnd(e) {
5495
+    const swiper = this;
5496
+    const params = swiper.params.zoom;
5497
+    const zoom = swiper.zoom;
5498
+    const { gesture } = zoom;
5499
+    if (!Support.gestures) {
5500
+      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
5501
+        return;
5502
+      }
5503
+      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
5504
+        return;
5505
+      }
5506
+      zoom.fakeGestureTouched = false;
5507
+      zoom.fakeGestureMoved = false;
5508
+    }
5509
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5510
+    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
5511
+    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5512
+    zoom.currentScale = zoom.scale;
5513
+    zoom.isScaling = false;
5514
+    if (zoom.scale === 1) gesture.$slideEl = undefined;
5515
+  },
5516
+  onTouchStart(e) {
5517
+    const swiper = this;
5518
+    const zoom = swiper.zoom;
5519
+    const { gesture, image } = zoom;
5520
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5521
+    if (image.isTouched) return;
5522
+    if (Device.android && e.cancelable) e.preventDefault();
5523
+    image.isTouched = true;
5524
+    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
5525
+    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
5526
+  },
5527
+  onTouchMove(e) {
5528
+    const swiper = this;
5529
+    const zoom = swiper.zoom;
5530
+    const { gesture, image, velocity } = zoom;
5531
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5532
+    swiper.allowClick = false;
5533
+    if (!image.isTouched || !gesture.$slideEl) return;
5534
+
5535
+    if (!image.isMoved) {
5536
+      image.width = gesture.$imageEl[0].offsetWidth;
5537
+      image.height = gesture.$imageEl[0].offsetHeight;
5538
+      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
5539
+      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
5540
+      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
5541
+      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
5542
+      gesture.$imageWrapEl.transition(0);
5543
+      if (swiper.rtl) {
5544
+        image.startX = -image.startX;
5545
+        image.startY = -image.startY;
5546
+      }
5547
+    }
5548
+    // Define if we need image drag
5549
+    const scaledWidth = image.width * zoom.scale;
5550
+    const scaledHeight = image.height * zoom.scale;
5551
+
5552
+    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
5553
+
5554
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
5555
+    image.maxX = -image.minX;
5556
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
5557
+    image.maxY = -image.minY;
5558
+
5559
+    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
5560
+    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
5561
+
5562
+    if (!image.isMoved && !zoom.isScaling) {
5563
+      if (
5564
+        swiper.isHorizontal()
5565
+        && (
5566
+          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
5567
+          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
5568
+        )
5569
+      ) {
5570
+        image.isTouched = false;
5571
+        return;
5572
+      } if (
5573
+        !swiper.isHorizontal()
5574
+        && (
5575
+          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
5576
+          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
5577
+        )
5578
+      ) {
5579
+        image.isTouched = false;
5580
+        return;
5581
+      }
5582
+    }
5583
+    if (e.cancelable) {
5584
+      e.preventDefault();
5585
+    }
5586
+    e.stopPropagation();
5587
+
5588
+    image.isMoved = true;
5589
+    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
5590
+    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
5591
+
5592
+    if (image.currentX < image.minX) {
5593
+      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);
5594
+    }
5595
+    if (image.currentX > image.maxX) {
5596
+      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);
5597
+    }
5598
+
5599
+    if (image.currentY < image.minY) {
5600
+      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);
5601
+    }
5602
+    if (image.currentY > image.maxY) {
5603
+      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);
5604
+    }
5605
+
5606
+    // Velocity
5607
+    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
5608
+    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
5609
+    if (!velocity.prevTime) velocity.prevTime = Date.now();
5610
+    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
5611
+    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
5612
+    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
5613
+    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
5614
+    velocity.prevPositionX = image.touchesCurrent.x;
5615
+    velocity.prevPositionY = image.touchesCurrent.y;
5616
+    velocity.prevTime = Date.now();
5617
+
5618
+    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
5619
+  },
5620
+  onTouchEnd() {
5621
+    const swiper = this;
5622
+    const zoom = swiper.zoom;
5623
+    const { gesture, image, velocity } = zoom;
5624
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5625
+    if (!image.isTouched || !image.isMoved) {
5626
+      image.isTouched = false;
5627
+      image.isMoved = false;
5628
+      return;
5629
+    }
5630
+    image.isTouched = false;
5631
+    image.isMoved = false;
5632
+    let momentumDurationX = 300;
5633
+    let momentumDurationY = 300;
5634
+    const momentumDistanceX = velocity.x * momentumDurationX;
5635
+    const newPositionX = image.currentX + momentumDistanceX;
5636
+    const momentumDistanceY = velocity.y * momentumDurationY;
5637
+    const newPositionY = image.currentY + momentumDistanceY;
5638
+
5639
+    // Fix duration
5640
+    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
5641
+    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
5642
+    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
5643
+
5644
+    image.currentX = newPositionX;
5645
+    image.currentY = newPositionY;
5646
+
5647
+    // Define if we need image drag
5648
+    const scaledWidth = image.width * zoom.scale;
5649
+    const scaledHeight = image.height * zoom.scale;
5650
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
5651
+    image.maxX = -image.minX;
5652
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
5653
+    image.maxY = -image.minY;
5654
+    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
5655
+    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
5656
+
5657
+    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
5658
+  },
5659
+  onTransitionEnd() {
5660
+    const swiper = this;
5661
+    const zoom = swiper.zoom;
5662
+    const { gesture } = zoom;
5663
+    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
5664
+      if (gesture.$imageEl) {
5665
+        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
5666
+      }
5667
+      if (gesture.$imageWrapEl) {
5668
+        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
5669
+      }
5670
+
5671
+      zoom.scale = 1;
5672
+      zoom.currentScale = 1;
5673
+
5674
+      gesture.$slideEl = undefined;
5675
+      gesture.$imageEl = undefined;
5676
+      gesture.$imageWrapEl = undefined;
5677
+    }
5678
+  },
5679
+  // Toggle Zoom
5680
+  toggle(e) {
5681
+    const swiper = this;
5682
+    const zoom = swiper.zoom;
5683
+
5684
+    if (zoom.scale && zoom.scale !== 1) {
5685
+      // Zoom Out
5686
+      zoom.out();
5687
+    } else {
5688
+      // Zoom In
5689
+      zoom.in(e);
5690
+    }
5691
+  },
5692
+  in(e) {
5693
+    const swiper = this;
5694
+
5695
+    const zoom = swiper.zoom;
5696
+    const params = swiper.params.zoom;
5697
+    const { gesture, image } = zoom;
5698
+
5699
+    if (!gesture.$slideEl) {
5700
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
5701
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
5702
+      } else {
5703
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5704
+      }
5705
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5706
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5707
+    }
5708
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5709
+
5710
+    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);
5711
+
5712
+    let touchX;
5713
+    let touchY;
5714
+    let offsetX;
5715
+    let offsetY;
5716
+    let diffX;
5717
+    let diffY;
5718
+    let translateX;
5719
+    let translateY;
5720
+    let imageWidth;
5721
+    let imageHeight;
5722
+    let scaledWidth;
5723
+    let scaledHeight;
5724
+    let translateMinX;
5725
+    let translateMinY;
5726
+    let translateMaxX;
5727
+    let translateMaxY;
5728
+    let slideWidth;
5729
+    let slideHeight;
5730
+
5731
+    if (typeof image.touchesStart.x === 'undefined' && e) {
5732
+      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
5733
+      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
5734
+    } else {
5735
+      touchX = image.touchesStart.x;
5736
+      touchY = image.touchesStart.y;
5737
+    }
5738
+
5739
+    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5740
+    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5741
+    if (e) {
5742
+      slideWidth = gesture.$slideEl[0].offsetWidth;
5743
+      slideHeight = gesture.$slideEl[0].offsetHeight;
5744
+      offsetX = gesture.$slideEl.offset().left;
5745
+      offsetY = gesture.$slideEl.offset().top;
5746
+      diffX = (offsetX + (slideWidth / 2)) - touchX;
5747
+      diffY = (offsetY + (slideHeight / 2)) - touchY;
5748
+
5749
+      imageWidth = gesture.$imageEl[0].offsetWidth;
5750
+      imageHeight = gesture.$imageEl[0].offsetHeight;
5751
+      scaledWidth = imageWidth * zoom.scale;
5752
+      scaledHeight = imageHeight * zoom.scale;
5753
+
5754
+      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
5755
+      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
5756
+      translateMaxX = -translateMinX;
5757
+      translateMaxY = -translateMinY;
5758
+
5759
+      translateX = diffX * zoom.scale;
5760
+      translateY = diffY * zoom.scale;
5761
+
5762
+      if (translateX < translateMinX) {
5763
+        translateX = translateMinX;
5764
+      }
5765
+      if (translateX > translateMaxX) {
5766
+        translateX = translateMaxX;
5767
+      }
5768
+
5769
+      if (translateY < translateMinY) {
5770
+        translateY = translateMinY;
5771
+      }
5772
+      if (translateY > translateMaxY) {
5773
+        translateY = translateMaxY;
5774
+      }
5775
+    } else {
5776
+      translateX = 0;
5777
+      translateY = 0;
5778
+    }
5779
+    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);
5780
+    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5781
+  },
5782
+  out() {
5783
+    const swiper = this;
5784
+
5785
+    const zoom = swiper.zoom;
5786
+    const params = swiper.params.zoom;
5787
+    const { gesture } = zoom;
5788
+
5789
+    if (!gesture.$slideEl) {
5790
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
5791
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
5792
+      } else {
5793
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5794
+      }
5795
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5796
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5797
+    }
5798
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5799
+
5800
+    zoom.scale = 1;
5801
+    zoom.currentScale = 1;
5802
+    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
5803
+    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
5804
+    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);
5805
+    gesture.$slideEl = undefined;
5806
+  },
5807
+  // Attach/Detach Events
5808
+  enable() {
5809
+    const swiper = this;
5810
+    const zoom = swiper.zoom;
5811
+    if (zoom.enabled) return;
5812
+    zoom.enabled = true;
5813
+
5814
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
5815
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
5816
+
5817
+    const slideSelector = `.${swiper.params.slideClass}`;
5818
+
5819
+    // Scale image
5820
+    if (Support.gestures) {
5821
+      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
5822
+      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
5823
+      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
5824
+    } else if (swiper.touchEvents.start === 'touchstart') {
5825
+      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
5826
+      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
5827
+      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
5828
+      if (swiper.touchEvents.cancel) {
5829
+        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
5830
+      }
5831
+    }
5832
+
5833
+    // Move image
5834
+    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
5835
+  },
5836
+  disable() {
5837
+    const swiper = this;
5838
+    const zoom = swiper.zoom;
5839
+    if (!zoom.enabled) return;
5840
+
5841
+    swiper.zoom.enabled = false;
5842
+
5843
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
5844
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
5845
+
5846
+    const slideSelector = `.${swiper.params.slideClass}`;
5847
+
5848
+    // Scale image
5849
+    if (Support.gestures) {
5850
+      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
5851
+      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
5852
+      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
5853
+    } else if (swiper.touchEvents.start === 'touchstart') {
5854
+      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
5855
+      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
5856
+      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
5857
+      if (swiper.touchEvents.cancel) {
5858
+        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
5859
+      }
5860
+    }
5861
+
5862
+    // Move image
5863
+    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
5864
+  },
5865
+};
5866
+
5867
+var Zoom$1 = {
5868
+  name: 'zoom',
5869
+  params: {
5870
+    zoom: {
5871
+      enabled: false,
5872
+      maxRatio: 3,
5873
+      minRatio: 1,
5874
+      toggle: true,
5875
+      containerClass: 'swiper-zoom-container',
5876
+      zoomedSlideClass: 'swiper-slide-zoomed',
5877
+    },
5878
+  },
5879
+  create() {
5880
+    const swiper = this;
5881
+    const zoom = {
5882
+      enabled: false,
5883
+      scale: 1,
5884
+      currentScale: 1,
5885
+      isScaling: false,
5886
+      gesture: {
5887
+        $slideEl: undefined,
5888
+        slideWidth: undefined,
5889
+        slideHeight: undefined,
5890
+        $imageEl: undefined,
5891
+        $imageWrapEl: undefined,
5892
+        maxRatio: 3,
5893
+      },
5894
+      image: {
5895
+        isTouched: undefined,
5896
+        isMoved: undefined,
5897
+        currentX: undefined,
5898
+        currentY: undefined,
5899
+        minX: undefined,
5900
+        minY: undefined,
5901
+        maxX: undefined,
5902
+        maxY: undefined,
5903
+        width: undefined,
5904
+        height: undefined,
5905
+        startX: undefined,
5906
+        startY: undefined,
5907
+        touchesStart: {},
5908
+        touchesCurrent: {},
5909
+      },
5910
+      velocity: {
5911
+        x: undefined,
5912
+        y: undefined,
5913
+        prevPositionX: undefined,
5914
+        prevPositionY: undefined,
5915
+        prevTime: undefined,
5916
+      },
5917
+    };
5918
+
5919
+    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {
5920
+      zoom[methodName] = Zoom[methodName].bind(swiper);
5921
+    });
5922
+    Utils.extend(swiper, {
5923
+      zoom,
5924
+    });
5925
+
5926
+    let scale = 1;
5927
+    Object.defineProperty(swiper.zoom, 'scale', {
5928
+      get() {
5929
+        return scale;
5930
+      },
5931
+      set(value) {
5932
+        if (scale !== value) {
5933
+          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
5934
+          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
5935
+          swiper.emit('zoomChange', value, imageEl, slideEl);
5936
+        }
5937
+        scale = value;
5938
+      },
5939
+    });
5940
+  },
5941
+  on: {
5942
+    init() {
5943
+      const swiper = this;
5944
+      if (swiper.params.zoom.enabled) {
5945
+        swiper.zoom.enable();
5946
+      }
5947
+    },
5948
+    destroy() {
5949
+      const swiper = this;
5950
+      swiper.zoom.disable();
5951
+    },
5952
+    touchStart(e) {
5953
+      const swiper = this;
5954
+      if (!swiper.zoom.enabled) return;
5955
+      swiper.zoom.onTouchStart(e);
5956
+    },
5957
+    touchEnd(e) {
5958
+      const swiper = this;
5959
+      if (!swiper.zoom.enabled) return;
5960
+      swiper.zoom.onTouchEnd(e);
5961
+    },
5962
+    doubleTap(e) {
5963
+      const swiper = this;
5964
+      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
5965
+        swiper.zoom.toggle(e);
5966
+      }
5967
+    },
5968
+    transitionEnd() {
5969
+      const swiper = this;
5970
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
5971
+        swiper.zoom.onTransitionEnd();
5972
+      }
5973
+    },
5974
+    slideChange() {
5975
+      const swiper = this;
5976
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
5977
+        swiper.zoom.onTransitionEnd();
5978
+      }
5979
+    },
5980
+  },
5981
+};
5982
+
5983
+const Lazy = {
5984
+  loadInSlide(index, loadInDuplicate = true) {
5985
+    const swiper = this;
5986
+    const params = swiper.params.lazy;
5987
+    if (typeof index === 'undefined') return;
5988
+    if (swiper.slides.length === 0) return;
5989
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
5990
+
5991
+    const $slideEl = isVirtual
5992
+      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`)
5993
+      : swiper.slides.eq(index);
5994
+
5995
+    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);
5996
+    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
5997
+      $images = $images.add($slideEl[0]);
5998
+    }
5999
+    if ($images.length === 0) return;
6000
+
6001
+    $images.each((imageIndex, imageEl) => {
6002
+      const $imageEl = $(imageEl);
6003
+      $imageEl.addClass(params.loadingClass);
6004
+
6005
+      const background = $imageEl.attr('data-background');
6006
+      const src = $imageEl.attr('data-src');
6007
+      const srcset = $imageEl.attr('data-srcset');
6008
+      const sizes = $imageEl.attr('data-sizes');
6009
+      const $pictureEl = $imageEl.parent('picture');
6010
+
6011
+      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {
6012
+        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;
6013
+        if (background) {
6014
+          $imageEl.css('background-image', `url("${background}")`);
6015
+          $imageEl.removeAttr('data-background');
6016
+        } else {
6017
+          if (srcset) {
6018
+            $imageEl.attr('srcset', srcset);
6019
+            $imageEl.removeAttr('data-srcset');
6020
+          }
6021
+          if (sizes) {
6022
+            $imageEl.attr('sizes', sizes);
6023
+            $imageEl.removeAttr('data-sizes');
6024
+          }
6025
+          if ($pictureEl.length) {
6026
+            $pictureEl.children('source').each((sourceIndex, sourceEl) => {
6027
+              const $source = $(sourceEl);
6028
+
6029
+              if ($source.attr('data-srcset')) {
6030
+                $source.attr('srcset', $source.attr('data-srcset'));
6031
+                $source.removeAttr('data-srcset');
6032
+              }
6033
+            });
6034
+          }
6035
+          if (src) {
6036
+            $imageEl.attr('src', src);
6037
+            $imageEl.removeAttr('data-src');
6038
+          }
6039
+        }
6040
+
6041
+        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
6042
+        $slideEl.find(`.${params.preloaderClass}`).remove();
6043
+        if (swiper.params.loop && loadInDuplicate) {
6044
+          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
6045
+          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
6046
+            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`);
6047
+            swiper.lazy.loadInSlide(originalSlide.index(), false);
6048
+          } else {
6049
+            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`);
6050
+            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
6051
+          }
6052
+        }
6053
+        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
6054
+        if (swiper.params.autoHeight) {
6055
+          swiper.updateAutoHeight();
6056
+        }
6057
+      });
6058
+
6059
+      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
6060
+    });
6061
+  },
6062
+  load() {
6063
+    const swiper = this;
6064
+    const {
6065
+      $wrapperEl, params: swiperParams, slides, activeIndex,
6066
+    } = swiper;
6067
+    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;
6068
+    const params = swiperParams.lazy;
6069
+
6070
+    let slidesPerView = swiperParams.slidesPerView;
6071
+    if (slidesPerView === 'auto') {
6072
+      slidesPerView = 0;
6073
+    }
6074
+
6075
+    function slideExist(index) {
6076
+      if (isVirtual) {
6077
+        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) {
6078
+          return true;
6079
+        }
6080
+      } else if (slides[index]) return true;
6081
+      return false;
6082
+    }
6083
+
6084
+    function slideIndex(slideEl) {
6085
+      if (isVirtual) {
6086
+        return $(slideEl).attr('data-swiper-slide-index');
6087
+      }
6088
+      return $(slideEl).index();
6089
+    }
6090
+
6091
+    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
6092
+    if (swiper.params.watchSlidesVisibility) {
6093
+      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {
6094
+        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
6095
+        swiper.lazy.loadInSlide(index);
6096
+      });
6097
+    } else if (slidesPerView > 1) {
6098
+      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
6099
+        if (slideExist(i)) swiper.lazy.loadInSlide(i);
6100
+      }
6101
+    } else {
6102
+      swiper.lazy.loadInSlide(activeIndex);
6103
+    }
6104
+    if (params.loadPrevNext) {
6105
+      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
6106
+        const amount = params.loadPrevNextAmount;
6107
+        const spv = slidesPerView;
6108
+        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
6109
+        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
6110
+        // Next Slides
6111
+        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {
6112
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6113
+        }
6114
+        // Prev Slides
6115
+        for (let i = minIndex; i < activeIndex; i += 1) {
6116
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6117
+        }
6118
+      } else {
6119
+        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);
6120
+        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
6121
+
6122
+        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);
6123
+        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
6124
+      }
6125
+    }
6126
+  },
6127
+};
6128
+
6129
+var Lazy$1 = {
6130
+  name: 'lazy',
6131
+  params: {
6132
+    lazy: {
6133
+      enabled: false,
6134
+      loadPrevNext: false,
6135
+      loadPrevNextAmount: 1,
6136
+      loadOnTransitionStart: false,
6137
+
6138
+      elementClass: 'swiper-lazy',
6139
+      loadingClass: 'swiper-lazy-loading',
6140
+      loadedClass: 'swiper-lazy-loaded',
6141
+      preloaderClass: 'swiper-lazy-preloader',
6142
+    },
6143
+  },
6144
+  create() {
6145
+    const swiper = this;
6146
+    Utils.extend(swiper, {
6147
+      lazy: {
6148
+        initialImageLoaded: false,
6149
+        load: Lazy.load.bind(swiper),
6150
+        loadInSlide: Lazy.loadInSlide.bind(swiper),
6151
+      },
6152
+    });
6153
+  },
6154
+  on: {
6155
+    beforeInit() {
6156
+      const swiper = this;
6157
+      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
6158
+        swiper.params.preloadImages = false;
6159
+      }
6160
+    },
6161
+    init() {
6162
+      const swiper = this;
6163
+      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
6164
+        swiper.lazy.load();
6165
+      }
6166
+    },
6167
+    scroll() {
6168
+      const swiper = this;
6169
+      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
6170
+        swiper.lazy.load();
6171
+      }
6172
+    },
6173
+    resize() {
6174
+      const swiper = this;
6175
+      if (swiper.params.lazy.enabled) {
6176
+        swiper.lazy.load();
6177
+      }
6178
+    },
6179
+    scrollbarDragMove() {
6180
+      const swiper = this;
6181
+      if (swiper.params.lazy.enabled) {
6182
+        swiper.lazy.load();
6183
+      }
6184
+    },
6185
+    transitionStart() {
6186
+      const swiper = this;
6187
+      if (swiper.params.lazy.enabled) {
6188
+        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
6189
+          swiper.lazy.load();
6190
+        }
6191
+      }
6192
+    },
6193
+    transitionEnd() {
6194
+      const swiper = this;
6195
+      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
6196
+        swiper.lazy.load();
6197
+      }
6198
+    },
6199
+    slideChange() {
6200
+      const swiper = this;
6201
+      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
6202
+        swiper.lazy.load();
6203
+      }
6204
+    },
6205
+  },
6206
+};
6207
+
6208
+/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
6209
+
6210
+const Controller = {
6211
+  LinearSpline: function LinearSpline(x, y) {
6212
+    const binarySearch = (function search() {
6213
+      let maxIndex;
6214
+      let minIndex;
6215
+      let guess;
6216
+      return (array, val) => {
6217
+        minIndex = -1;
6218
+        maxIndex = array.length;
6219
+        while (maxIndex - minIndex > 1) {
6220
+          guess = maxIndex + minIndex >> 1;
6221
+          if (array[guess] <= val) {
6222
+            minIndex = guess;
6223
+          } else {
6224
+            maxIndex = guess;
6225
+          }
6226
+        }
6227
+        return maxIndex;
6228
+      };
6229
+    }());
6230
+    this.x = x;
6231
+    this.y = y;
6232
+    this.lastIndex = x.length - 1;
6233
+    // Given an x value (x2), return the expected y2 value:
6234
+    // (x1,y1) is the known point before given value,
6235
+    // (x3,y3) is the known point after given value.
6236
+    let i1;
6237
+    let i3;
6238
+
6239
+    this.interpolate = function interpolate(x2) {
6240
+      if (!x2) return 0;
6241
+
6242
+      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
6243
+      i3 = binarySearch(this.x, x2);
6244
+      i1 = i3 - 1;
6245
+
6246
+      // We have our indexes i1 & i3, so we can calculate already:
6247
+      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
6248
+      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
6249
+    };
6250
+    return this;
6251
+  },
6252
+  // xxx: for now i will just save one spline function to to
6253
+  getInterpolateFunction(c) {
6254
+    const swiper = this;
6255
+    if (!swiper.controller.spline) {
6256
+      swiper.controller.spline = swiper.params.loop
6257
+        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
6258
+        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
6259
+    }
6260
+  },
6261
+  setTranslate(setTranslate, byController) {
6262
+    const swiper = this;
6263
+    const controlled = swiper.controller.control;
6264
+    let multiplier;
6265
+    let controlledTranslate;
6266
+    function setControlledTranslate(c) {
6267
+      // this will create an Interpolate function based on the snapGrids
6268
+      // x is the Grid of the scrolled scroller and y will be the controlled scroller
6269
+      // it makes sense to create this only once and recall it for the interpolation
6270
+      // the function does a lot of value caching for performance
6271
+      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
6272
+      if (swiper.params.controller.by === 'slide') {
6273
+        swiper.controller.getInterpolateFunction(c);
6274
+        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
6275
+        // but it did not work out
6276
+        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
6277
+      }
6278
+
6279
+      if (!controlledTranslate || swiper.params.controller.by === 'container') {
6280
+        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
6281
+        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
6282
+      }
6283
+
6284
+      if (swiper.params.controller.inverse) {
6285
+        controlledTranslate = c.maxTranslate() - controlledTranslate;
6286
+      }
6287
+      c.updateProgress(controlledTranslate);
6288
+      c.setTranslate(controlledTranslate, swiper);
6289
+      c.updateActiveIndex();
6290
+      c.updateSlidesClasses();
6291
+    }
6292
+    if (Array.isArray(controlled)) {
6293
+      for (let i = 0; i < controlled.length; i += 1) {
6294
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
6295
+          setControlledTranslate(controlled[i]);
6296
+        }
6297
+      }
6298
+    } else if (controlled instanceof Swiper && byController !== controlled) {
6299
+      setControlledTranslate(controlled);
6300
+    }
6301
+  },
6302
+  setTransition(duration, byController) {
6303
+    const swiper = this;
6304
+    const controlled = swiper.controller.control;
6305
+    let i;
6306
+    function setControlledTransition(c) {
6307
+      c.setTransition(duration, swiper);
6308
+      if (duration !== 0) {
6309
+        c.transitionStart();
6310
+        if (c.params.autoHeight) {
6311
+          Utils.nextTick(() => {
6312
+            c.updateAutoHeight();
6313
+          });
6314
+        }
6315
+        c.$wrapperEl.transitionEnd(() => {
6316
+          if (!controlled) return;
6317
+          if (c.params.loop && swiper.params.controller.by === 'slide') {
6318
+            c.loopFix();
6319
+          }
6320
+          c.transitionEnd();
6321
+        });
6322
+      }
6323
+    }
6324
+    if (Array.isArray(controlled)) {
6325
+      for (i = 0; i < controlled.length; i += 1) {
6326
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
6327
+          setControlledTransition(controlled[i]);
6328
+        }
6329
+      }
6330
+    } else if (controlled instanceof Swiper && byController !== controlled) {
6331
+      setControlledTransition(controlled);
6332
+    }
6333
+  },
6334
+};
6335
+var Controller$1 = {
6336
+  name: 'controller',
6337
+  params: {
6338
+    controller: {
6339
+      control: undefined,
6340
+      inverse: false,
6341
+      by: 'slide', // or 'container'
6342
+    },
6343
+  },
6344
+  create() {
6345
+    const swiper = this;
6346
+    Utils.extend(swiper, {
6347
+      controller: {
6348
+        control: swiper.params.controller.control,
6349
+        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
6350
+        setTranslate: Controller.setTranslate.bind(swiper),
6351
+        setTransition: Controller.setTransition.bind(swiper),
6352
+      },
6353
+    });
6354
+  },
6355
+  on: {
6356
+    update() {
6357
+      const swiper = this;
6358
+      if (!swiper.controller.control) return;
6359
+      if (swiper.controller.spline) {
6360
+        swiper.controller.spline = undefined;
6361
+        delete swiper.controller.spline;
6362
+      }
6363
+    },
6364
+    resize() {
6365
+      const swiper = this;
6366
+      if (!swiper.controller.control) return;
6367
+      if (swiper.controller.spline) {
6368
+        swiper.controller.spline = undefined;
6369
+        delete swiper.controller.spline;
6370
+      }
6371
+    },
6372
+    observerUpdate() {
6373
+      const swiper = this;
6374
+      if (!swiper.controller.control) return;
6375
+      if (swiper.controller.spline) {
6376
+        swiper.controller.spline = undefined;
6377
+        delete swiper.controller.spline;
6378
+      }
6379
+    },
6380
+    setTranslate(translate, byController) {
6381
+      const swiper = this;
6382
+      if (!swiper.controller.control) return;
6383
+      swiper.controller.setTranslate(translate, byController);
6384
+    },
6385
+    setTransition(duration, byController) {
6386
+      const swiper = this;
6387
+      if (!swiper.controller.control) return;
6388
+      swiper.controller.setTransition(duration, byController);
6389
+    },
6390
+  },
6391
+};
6392
+
6393
+const a11y = {
6394
+  makeElFocusable($el) {
6395
+    $el.attr('tabIndex', '0');
6396
+    return $el;
6397
+  },
6398
+  makeElNotFocusable($el) {
6399
+    $el.attr('tabIndex', '-1');
6400
+    return $el;
6401
+  },
6402
+  addElRole($el, role) {
6403
+    $el.attr('role', role);
6404
+    return $el;
6405
+  },
6406
+  addElLabel($el, label) {
6407
+    $el.attr('aria-label', label);
6408
+    return $el;
6409
+  },
6410
+  disableEl($el) {
6411
+    $el.attr('aria-disabled', true);
6412
+    return $el;
6413
+  },
6414
+  enableEl($el) {
6415
+    $el.attr('aria-disabled', false);
6416
+    return $el;
6417
+  },
6418
+  onEnterKey(e) {
6419
+    const swiper = this;
6420
+    const params = swiper.params.a11y;
6421
+    if (e.keyCode !== 13) return;
6422
+    const $targetEl = $(e.target);
6423
+    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
6424
+      if (!(swiper.isEnd && !swiper.params.loop)) {
6425
+        swiper.slideNext();
6426
+      }
6427
+      if (swiper.isEnd) {
6428
+        swiper.a11y.notify(params.lastSlideMessage);
6429
+      } else {
6430
+        swiper.a11y.notify(params.nextSlideMessage);
6431
+      }
6432
+    }
6433
+    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
6434
+      if (!(swiper.isBeginning && !swiper.params.loop)) {
6435
+        swiper.slidePrev();
6436
+      }
6437
+      if (swiper.isBeginning) {
6438
+        swiper.a11y.notify(params.firstSlideMessage);
6439
+      } else {
6440
+        swiper.a11y.notify(params.prevSlideMessage);
6441
+      }
6442
+    }
6443
+    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {
6444
+      $targetEl[0].click();
6445
+    }
6446
+  },
6447
+  notify(message) {
6448
+    const swiper = this;
6449
+    const notification = swiper.a11y.liveRegion;
6450
+    if (notification.length === 0) return;
6451
+    notification.html('');
6452
+    notification.html(message);
6453
+  },
6454
+  updateNavigation() {
6455
+    const swiper = this;
6456
+
6457
+    if (swiper.params.loop || !swiper.navigation) return;
6458
+    const { $nextEl, $prevEl } = swiper.navigation;
6459
+
6460
+    if ($prevEl && $prevEl.length > 0) {
6461
+      if (swiper.isBeginning) {
6462
+        swiper.a11y.disableEl($prevEl);
6463
+        swiper.a11y.makeElNotFocusable($prevEl);
6464
+      } else {
6465
+        swiper.a11y.enableEl($prevEl);
6466
+        swiper.a11y.makeElFocusable($prevEl);
6467
+      }
6468
+    }
6469
+    if ($nextEl && $nextEl.length > 0) {
6470
+      if (swiper.isEnd) {
6471
+        swiper.a11y.disableEl($nextEl);
6472
+        swiper.a11y.makeElNotFocusable($nextEl);
6473
+      } else {
6474
+        swiper.a11y.enableEl($nextEl);
6475
+        swiper.a11y.makeElFocusable($nextEl);
6476
+      }
6477
+    }
6478
+  },
6479
+  updatePagination() {
6480
+    const swiper = this;
6481
+    const params = swiper.params.a11y;
6482
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6483
+      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {
6484
+        const $bulletEl = $(bulletEl);
6485
+        swiper.a11y.makeElFocusable($bulletEl);
6486
+        swiper.a11y.addElRole($bulletEl, 'button');
6487
+        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
6488
+      });
6489
+    }
6490
+  },
6491
+  init() {
6492
+    const swiper = this;
6493
+
6494
+    swiper.$el.append(swiper.a11y.liveRegion);
6495
+
6496
+    // Navigation
6497
+    const params = swiper.params.a11y;
6498
+    let $nextEl;
6499
+    let $prevEl;
6500
+    if (swiper.navigation && swiper.navigation.$nextEl) {
6501
+      $nextEl = swiper.navigation.$nextEl;
6502
+    }
6503
+    if (swiper.navigation && swiper.navigation.$prevEl) {
6504
+      $prevEl = swiper.navigation.$prevEl;
6505
+    }
6506
+    if ($nextEl) {
6507
+      swiper.a11y.makeElFocusable($nextEl);
6508
+      swiper.a11y.addElRole($nextEl, 'button');
6509
+      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
6510
+      $nextEl.on('keydown', swiper.a11y.onEnterKey);
6511
+    }
6512
+    if ($prevEl) {
6513
+      swiper.a11y.makeElFocusable($prevEl);
6514
+      swiper.a11y.addElRole($prevEl, 'button');
6515
+      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
6516
+      $prevEl.on('keydown', swiper.a11y.onEnterKey);
6517
+    }
6518
+
6519
+    // Pagination
6520
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6521
+      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
6522
+    }
6523
+  },
6524
+  destroy() {
6525
+    const swiper = this;
6526
+    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
6527
+
6528
+    let $nextEl;
6529
+    let $prevEl;
6530
+    if (swiper.navigation && swiper.navigation.$nextEl) {
6531
+      $nextEl = swiper.navigation.$nextEl;
6532
+    }
6533
+    if (swiper.navigation && swiper.navigation.$prevEl) {
6534
+      $prevEl = swiper.navigation.$prevEl;
6535
+    }
6536
+    if ($nextEl) {
6537
+      $nextEl.off('keydown', swiper.a11y.onEnterKey);
6538
+    }
6539
+    if ($prevEl) {
6540
+      $prevEl.off('keydown', swiper.a11y.onEnterKey);
6541
+    }
6542
+
6543
+    // Pagination
6544
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6545
+      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
6546
+    }
6547
+  },
6548
+};
6549
+var A11y = {
6550
+  name: 'a11y',
6551
+  params: {
6552
+    a11y: {
6553
+      enabled: true,
6554
+      notificationClass: 'swiper-notification',
6555
+      prevSlideMessage: 'Previous slide',
6556
+      nextSlideMessage: 'Next slide',
6557
+      firstSlideMessage: 'This is the first slide',
6558
+      lastSlideMessage: 'This is the last slide',
6559
+      paginationBulletMessage: 'Go to slide {{index}}',
6560
+    },
6561
+  },
6562
+  create() {
6563
+    const swiper = this;
6564
+    Utils.extend(swiper, {
6565
+      a11y: {
6566
+        liveRegion: $(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`),
6567
+      },
6568
+    });
6569
+    Object.keys(a11y).forEach((methodName) => {
6570
+      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
6571
+    });
6572
+  },
6573
+  on: {
6574
+    init() {
6575
+      const swiper = this;
6576
+      if (!swiper.params.a11y.enabled) return;
6577
+      swiper.a11y.init();
6578
+      swiper.a11y.updateNavigation();
6579
+    },
6580
+    toEdge() {
6581
+      const swiper = this;
6582
+      if (!swiper.params.a11y.enabled) return;
6583
+      swiper.a11y.updateNavigation();
6584
+    },
6585
+    fromEdge() {
6586
+      const swiper = this;
6587
+      if (!swiper.params.a11y.enabled) return;
6588
+      swiper.a11y.updateNavigation();
6589
+    },
6590
+    paginationUpdate() {
6591
+      const swiper = this;
6592
+      if (!swiper.params.a11y.enabled) return;
6593
+      swiper.a11y.updatePagination();
6594
+    },
6595
+    destroy() {
6596
+      const swiper = this;
6597
+      if (!swiper.params.a11y.enabled) return;
6598
+      swiper.a11y.destroy();
6599
+    },
6600
+  },
6601
+};
6602
+
6603
+const History = {
6604
+  init() {
6605
+    const swiper = this;
6606
+    if (!swiper.params.history) return;
6607
+    if (!window.history || !window.history.pushState) {
6608
+      swiper.params.history.enabled = false;
6609
+      swiper.params.hashNavigation.enabled = true;
6610
+      return;
6611
+    }
6612
+    const history = swiper.history;
6613
+    history.initialized = true;
6614
+    history.paths = History.getPathValues();
6615
+    if (!history.paths.key && !history.paths.value) return;
6616
+    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
6617
+    if (!swiper.params.history.replaceState) {
6618
+      window.addEventListener('popstate', swiper.history.setHistoryPopState);
6619
+    }
6620
+  },
6621
+  destroy() {
6622
+    const swiper = this;
6623
+    if (!swiper.params.history.replaceState) {
6624
+      window.removeEventListener('popstate', swiper.history.setHistoryPopState);
6625
+    }
6626
+  },
6627
+  setHistoryPopState() {
6628
+    const swiper = this;
6629
+    swiper.history.paths = History.getPathValues();
6630
+    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
6631
+  },
6632
+  getPathValues() {
6633
+    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');
6634
+    const total = pathArray.length;
6635
+    const key = pathArray[total - 2];
6636
+    const value = pathArray[total - 1];
6637
+    return { key, value };
6638
+  },
6639
+  setHistory(key, index) {
6640
+    const swiper = this;
6641
+    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
6642
+    const slide = swiper.slides.eq(index);
6643
+    let value = History.slugify(slide.attr('data-history'));
6644
+    if (!window.location.pathname.includes(key)) {
6645
+      value = `${key}/${value}`;
6646
+    }
6647
+    const currentState = window.history.state;
6648
+    if (currentState && currentState.value === value) {
6649
+      return;
6650
+    }
6651
+    if (swiper.params.history.replaceState) {
6652
+      window.history.replaceState({ value }, null, value);
6653
+    } else {
6654
+      window.history.pushState({ value }, null, value);
6655
+    }
6656
+  },
6657
+  slugify(text) {
6658
+    return text.toString()
6659
+      .replace(/\s+/g, '-')
6660
+      .replace(/[^\w-]+/g, '')
6661
+      .replace(/--+/g, '-')
6662
+      .replace(/^-+/, '')
6663
+      .replace(/-+$/, '');
6664
+  },
6665
+  scrollToSlide(speed, value, runCallbacks) {
6666
+    const swiper = this;
6667
+    if (value) {
6668
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
6669
+        const slide = swiper.slides.eq(i);
6670
+        const slideHistory = History.slugify(slide.attr('data-history'));
6671
+        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
6672
+          const index = slide.index();
6673
+          swiper.slideTo(index, speed, runCallbacks);
6674
+        }
6675
+      }
6676
+    } else {
6677
+      swiper.slideTo(0, speed, runCallbacks);
6678
+    }
6679
+  },
6680
+};
6681
+
6682
+var History$1 = {
6683
+  name: 'history',
6684
+  params: {
6685
+    history: {
6686
+      enabled: false,
6687
+      replaceState: false,
6688
+      key: 'slides',
6689
+    },
6690
+  },
6691
+  create() {
6692
+    const swiper = this;
6693
+    Utils.extend(swiper, {
6694
+      history: {
6695
+        init: History.init.bind(swiper),
6696
+        setHistory: History.setHistory.bind(swiper),
6697
+        setHistoryPopState: History.setHistoryPopState.bind(swiper),
6698
+        scrollToSlide: History.scrollToSlide.bind(swiper),
6699
+        destroy: History.destroy.bind(swiper),
6700
+      },
6701
+    });
6702
+  },
6703
+  on: {
6704
+    init() {
6705
+      const swiper = this;
6706
+      if (swiper.params.history.enabled) {
6707
+        swiper.history.init();
6708
+      }
6709
+    },
6710
+    destroy() {
6711
+      const swiper = this;
6712
+      if (swiper.params.history.enabled) {
6713
+        swiper.history.destroy();
6714
+      }
6715
+    },
6716
+    transitionEnd() {
6717
+      const swiper = this;
6718
+      if (swiper.history.initialized) {
6719
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
6720
+      }
6721
+    },
6722
+    slideChange() {
6723
+      const swiper = this;
6724
+      if (swiper.history.initialized && swiper.params.cssMode) {
6725
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
6726
+      }
6727
+    },
6728
+  },
6729
+};
6730
+
6731
+const HashNavigation = {
6732
+  onHashCange() {
6733
+    const swiper = this;
6734
+    swiper.emit('hashChange');
6735
+    const newHash = document$1.location.hash.replace('#', '');
6736
+    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
6737
+    if (newHash !== activeSlideHash) {
6738
+      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index();
6739
+      if (typeof newIndex === 'undefined') return;
6740
+      swiper.slideTo(newIndex);
6741
+    }
6742
+  },
6743
+  setHash() {
6744
+    const swiper = this;
6745
+    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
6746
+    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
6747
+      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));
6748
+      swiper.emit('hashSet');
6749
+    } else {
6750
+      const slide = swiper.slides.eq(swiper.activeIndex);
6751
+      const hash = slide.attr('data-hash') || slide.attr('data-history');
6752
+      document$1.location.hash = hash || '';
6753
+      swiper.emit('hashSet');
6754
+    }
6755
+  },
6756
+  init() {
6757
+    const swiper = this;
6758
+    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;
6759
+    swiper.hashNavigation.initialized = true;
6760
+    const hash = document$1.location.hash.replace('#', '');
6761
+    if (hash) {
6762
+      const speed = 0;
6763
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
6764
+        const slide = swiper.slides.eq(i);
6765
+        const slideHash = slide.attr('data-hash') || slide.attr('data-history');
6766
+        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
6767
+          const index = slide.index();
6768
+          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
6769
+        }
6770
+      }
6771
+    }
6772
+    if (swiper.params.hashNavigation.watchState) {
6773
+      $(window).on('hashchange', swiper.hashNavigation.onHashCange);
6774
+    }
6775
+  },
6776
+  destroy() {
6777
+    const swiper = this;
6778
+    if (swiper.params.hashNavigation.watchState) {
6779
+      $(window).off('hashchange', swiper.hashNavigation.onHashCange);
6780
+    }
6781
+  },
6782
+};
6783
+var HashNavigation$1 = {
6784
+  name: 'hash-navigation',
6785
+  params: {
6786
+    hashNavigation: {
6787
+      enabled: false,
6788
+      replaceState: false,
6789
+      watchState: false,
6790
+    },
6791
+  },
6792
+  create() {
6793
+    const swiper = this;
6794
+    Utils.extend(swiper, {
6795
+      hashNavigation: {
6796
+        initialized: false,
6797
+        init: HashNavigation.init.bind(swiper),
6798
+        destroy: HashNavigation.destroy.bind(swiper),
6799
+        setHash: HashNavigation.setHash.bind(swiper),
6800
+        onHashCange: HashNavigation.onHashCange.bind(swiper),
6801
+      },
6802
+    });
6803
+  },
6804
+  on: {
6805
+    init() {
6806
+      const swiper = this;
6807
+      if (swiper.params.hashNavigation.enabled) {
6808
+        swiper.hashNavigation.init();
6809
+      }
6810
+    },
6811
+    destroy() {
6812
+      const swiper = this;
6813
+      if (swiper.params.hashNavigation.enabled) {
6814
+        swiper.hashNavigation.destroy();
6815
+      }
6816
+    },
6817
+    transitionEnd() {
6818
+      const swiper = this;
6819
+      if (swiper.hashNavigation.initialized) {
6820
+        swiper.hashNavigation.setHash();
6821
+      }
6822
+    },
6823
+    slideChange() {
6824
+      const swiper = this;
6825
+      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
6826
+        swiper.hashNavigation.setHash();
6827
+      }
6828
+    },
6829
+  },
6830
+};
6831
+
6832
+/* eslint no-underscore-dangle: "off" */
6833
+
6834
+const Autoplay = {
6835
+  run() {
6836
+    const swiper = this;
6837
+    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
6838
+    let delay = swiper.params.autoplay.delay;
6839
+    if ($activeSlideEl.attr('data-swiper-autoplay')) {
6840
+      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
6841
+    }
6842
+    clearTimeout(swiper.autoplay.timeout);
6843
+    swiper.autoplay.timeout = Utils.nextTick(() => {
6844
+      if (swiper.params.autoplay.reverseDirection) {
6845
+        if (swiper.params.loop) {
6846
+          swiper.loopFix();
6847
+          swiper.slidePrev(swiper.params.speed, true, true);
6848
+          swiper.emit('autoplay');
6849
+        } else if (!swiper.isBeginning) {
6850
+          swiper.slidePrev(swiper.params.speed, true, true);
6851
+          swiper.emit('autoplay');
6852
+        } else if (!swiper.params.autoplay.stopOnLastSlide) {
6853
+          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
6854
+          swiper.emit('autoplay');
6855
+        } else {
6856
+          swiper.autoplay.stop();
6857
+        }
6858
+      } else if (swiper.params.loop) {
6859
+        swiper.loopFix();
6860
+        swiper.slideNext(swiper.params.speed, true, true);
6861
+        swiper.emit('autoplay');
6862
+      } else if (!swiper.isEnd) {
6863
+        swiper.slideNext(swiper.params.speed, true, true);
6864
+        swiper.emit('autoplay');
6865
+      } else if (!swiper.params.autoplay.stopOnLastSlide) {
6866
+        swiper.slideTo(0, swiper.params.speed, true, true);
6867
+        swiper.emit('autoplay');
6868
+      } else {
6869
+        swiper.autoplay.stop();
6870
+      }
6871
+      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
6872
+    }, delay);
6873
+  },
6874
+  start() {
6875
+    const swiper = this;
6876
+    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
6877
+    if (swiper.autoplay.running) return false;
6878
+    swiper.autoplay.running = true;
6879
+    swiper.emit('autoplayStart');
6880
+    swiper.autoplay.run();
6881
+    return true;
6882
+  },
6883
+  stop() {
6884
+    const swiper = this;
6885
+    if (!swiper.autoplay.running) return false;
6886
+    if (typeof swiper.autoplay.timeout === 'undefined') return false;
6887
+
6888
+    if (swiper.autoplay.timeout) {
6889
+      clearTimeout(swiper.autoplay.timeout);
6890
+      swiper.autoplay.timeout = undefined;
6891
+    }
6892
+    swiper.autoplay.running = false;
6893
+    swiper.emit('autoplayStop');
6894
+    return true;
6895
+  },
6896
+  pause(speed) {
6897
+    const swiper = this;
6898
+    if (!swiper.autoplay.running) return;
6899
+    if (swiper.autoplay.paused) return;
6900
+    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
6901
+    swiper.autoplay.paused = true;
6902
+    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
6903
+      swiper.autoplay.paused = false;
6904
+      swiper.autoplay.run();
6905
+    } else {
6906
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
6907
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
6908
+    }
6909
+  },
6910
+};
6911
+
6912
+var Autoplay$1 = {
6913
+  name: 'autoplay',
6914
+  params: {
6915
+    autoplay: {
6916
+      enabled: false,
6917
+      delay: 3000,
6918
+      waitForTransition: true,
6919
+      disableOnInteraction: true,
6920
+      stopOnLastSlide: false,
6921
+      reverseDirection: false,
6922
+    },
6923
+  },
6924
+  create() {
6925
+    const swiper = this;
6926
+    Utils.extend(swiper, {
6927
+      autoplay: {
6928
+        running: false,
6929
+        paused: false,
6930
+        run: Autoplay.run.bind(swiper),
6931
+        start: Autoplay.start.bind(swiper),
6932
+        stop: Autoplay.stop.bind(swiper),
6933
+        pause: Autoplay.pause.bind(swiper),
6934
+        onVisibilityChange() {
6935
+          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
6936
+            swiper.autoplay.pause();
6937
+          }
6938
+          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
6939
+            swiper.autoplay.run();
6940
+            swiper.autoplay.paused = false;
6941
+          }
6942
+        },
6943
+        onTransitionEnd(e) {
6944
+          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
6945
+          if (e.target !== this) return;
6946
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
6947
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
6948
+          swiper.autoplay.paused = false;
6949
+          if (!swiper.autoplay.running) {
6950
+            swiper.autoplay.stop();
6951
+          } else {
6952
+            swiper.autoplay.run();
6953
+          }
6954
+        },
6955
+      },
6956
+    });
6957
+  },
6958
+  on: {
6959
+    init() {
6960
+      const swiper = this;
6961
+      if (swiper.params.autoplay.enabled) {
6962
+        swiper.autoplay.start();
6963
+        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
6964
+      }
6965
+    },
6966
+    beforeTransitionStart(speed, internal) {
6967
+      const swiper = this;
6968
+      if (swiper.autoplay.running) {
6969
+        if (internal || !swiper.params.autoplay.disableOnInteraction) {
6970
+          swiper.autoplay.pause(speed);
6971
+        } else {
6972
+          swiper.autoplay.stop();
6973
+        }
6974
+      }
6975
+    },
6976
+    sliderFirstMove() {
6977
+      const swiper = this;
6978
+      if (swiper.autoplay.running) {
6979
+        if (swiper.params.autoplay.disableOnInteraction) {
6980
+          swiper.autoplay.stop();
6981
+        } else {
6982
+          swiper.autoplay.pause();
6983
+        }
6984
+      }
6985
+    },
6986
+    touchEnd() {
6987
+      const swiper = this;
6988
+      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
6989
+        swiper.autoplay.run();
6990
+      }
6991
+    },
6992
+    destroy() {
6993
+      const swiper = this;
6994
+      if (swiper.autoplay.running) {
6995
+        swiper.autoplay.stop();
6996
+      }
6997
+      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
6998
+    },
6999
+  },
7000
+};
7001
+
7002
+const Fade = {
7003
+  setTranslate() {
7004
+    const swiper = this;
7005
+    const { slides } = swiper;
7006
+    for (let i = 0; i < slides.length; i += 1) {
7007
+      const $slideEl = swiper.slides.eq(i);
7008
+      const offset = $slideEl[0].swiperSlideOffset;
7009
+      let tx = -offset;
7010
+      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
7011
+      let ty = 0;
7012
+      if (!swiper.isHorizontal()) {
7013
+        ty = tx;
7014
+        tx = 0;
7015
+      }
7016
+      const slideOpacity = swiper.params.fadeEffect.crossFade
7017
+        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
7018
+        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
7019
+      $slideEl
7020
+        .css({
7021
+          opacity: slideOpacity,
7022
+        })
7023
+        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);
7024
+    }
7025
+  },
7026
+  setTransition(duration) {
7027
+    const swiper = this;
7028
+    const { slides, $wrapperEl } = swiper;
7029
+    slides.transition(duration);
7030
+    if (swiper.params.virtualTranslate && duration !== 0) {
7031
+      let eventTriggered = false;
7032
+      slides.transitionEnd(() => {
7033
+        if (eventTriggered) return;
7034
+        if (!swiper || swiper.destroyed) return;
7035
+        eventTriggered = true;
7036
+        swiper.animating = false;
7037
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
7038
+        for (let i = 0; i < triggerEvents.length; i += 1) {
7039
+          $wrapperEl.trigger(triggerEvents[i]);
7040
+        }
7041
+      });
7042
+    }
7043
+  },
7044
+};
7045
+
7046
+var EffectFade = {
7047
+  name: 'effect-fade',
7048
+  params: {
7049
+    fadeEffect: {
7050
+      crossFade: false,
7051
+    },
7052
+  },
7053
+  create() {
7054
+    const swiper = this;
7055
+    Utils.extend(swiper, {
7056
+      fadeEffect: {
7057
+        setTranslate: Fade.setTranslate.bind(swiper),
7058
+        setTransition: Fade.setTransition.bind(swiper),
7059
+      },
7060
+    });
7061
+  },
7062
+  on: {
7063
+    beforeInit() {
7064
+      const swiper = this;
7065
+      if (swiper.params.effect !== 'fade') return;
7066
+      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);
7067
+      const overwriteParams = {
7068
+        slidesPerView: 1,
7069
+        slidesPerColumn: 1,
7070
+        slidesPerGroup: 1,
7071
+        watchSlidesProgress: true,
7072
+        spaceBetween: 0,
7073
+        virtualTranslate: true,
7074
+      };
7075
+      Utils.extend(swiper.params, overwriteParams);
7076
+      Utils.extend(swiper.originalParams, overwriteParams);
7077
+    },
7078
+    setTranslate() {
7079
+      const swiper = this;
7080
+      if (swiper.params.effect !== 'fade') return;
7081
+      swiper.fadeEffect.setTranslate();
7082
+    },
7083
+    setTransition(duration) {
7084
+      const swiper = this;
7085
+      if (swiper.params.effect !== 'fade') return;
7086
+      swiper.fadeEffect.setTransition(duration);
7087
+    },
7088
+  },
7089
+};
7090
+
7091
+const Cube = {
7092
+  setTranslate() {
7093
+    const swiper = this;
7094
+    const {
7095
+      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,
7096
+    } = swiper;
7097
+    const params = swiper.params.cubeEffect;
7098
+    const isHorizontal = swiper.isHorizontal();
7099
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
7100
+    let wrapperRotate = 0;
7101
+    let $cubeShadowEl;
7102
+    if (params.shadow) {
7103
+      if (isHorizontal) {
7104
+        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
7105
+        if ($cubeShadowEl.length === 0) {
7106
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7107
+          $wrapperEl.append($cubeShadowEl);
7108
+        }
7109
+        $cubeShadowEl.css({ height: `${swiperWidth}px` });
7110
+      } else {
7111
+        $cubeShadowEl = $el.find('.swiper-cube-shadow');
7112
+        if ($cubeShadowEl.length === 0) {
7113
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7114
+          $el.append($cubeShadowEl);
7115
+        }
7116
+      }
7117
+    }
7118
+    for (let i = 0; i < slides.length; i += 1) {
7119
+      const $slideEl = slides.eq(i);
7120
+      let slideIndex = i;
7121
+      if (isVirtual) {
7122
+        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
7123
+      }
7124
+      let slideAngle = slideIndex * 90;
7125
+      let round = Math.floor(slideAngle / 360);
7126
+      if (rtl) {
7127
+        slideAngle = -slideAngle;
7128
+        round = Math.floor(-slideAngle / 360);
7129
+      }
7130
+      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
7131
+      let tx = 0;
7132
+      let ty = 0;
7133
+      let tz = 0;
7134
+      if (slideIndex % 4 === 0) {
7135
+        tx = -round * 4 * swiperSize;
7136
+        tz = 0;
7137
+      } else if ((slideIndex - 1) % 4 === 0) {
7138
+        tx = 0;
7139
+        tz = -round * 4 * swiperSize;
7140
+      } else if ((slideIndex - 2) % 4 === 0) {
7141
+        tx = swiperSize + (round * 4 * swiperSize);
7142
+        tz = swiperSize;
7143
+      } else if ((slideIndex - 3) % 4 === 0) {
7144
+        tx = -swiperSize;
7145
+        tz = (3 * swiperSize) + (swiperSize * 4 * round);
7146
+      }
7147
+      if (rtl) {
7148
+        tx = -tx;
7149
+      }
7150
+
7151
+      if (!isHorizontal) {
7152
+        ty = tx;
7153
+        tx = 0;
7154
+      }
7155
+
7156
+      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
7157
+      if (progress <= 1 && progress > -1) {
7158
+        wrapperRotate = (slideIndex * 90) + (progress * 90);
7159
+        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);
7160
+      }
7161
+      $slideEl.transform(transform);
7162
+      if (params.slideShadows) {
7163
+        // Set shadows
7164
+        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7165
+        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7166
+        if (shadowBefore.length === 0) {
7167
+          shadowBefore = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
7168
+          $slideEl.append(shadowBefore);
7169
+        }
7170
+        if (shadowAfter.length === 0) {
7171
+          shadowAfter = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
7172
+          $slideEl.append(shadowAfter);
7173
+        }
7174
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
7175
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
7176
+      }
7177
+    }
7178
+    $wrapperEl.css({
7179
+      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,
7180
+      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,
7181
+      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,
7182
+      'transform-origin': `50% 50% -${swiperSize / 2}px`,
7183
+    });
7184
+
7185
+    if (params.shadow) {
7186
+      if (isHorizontal) {
7187
+        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);
7188
+      } else {
7189
+        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
7190
+        const multiplier = 1.5 - (
7191
+          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
7192
+          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
7193
+        );
7194
+        const scale1 = params.shadowScale;
7195
+        const scale2 = params.shadowScale / multiplier;
7196
+        const offset = params.shadowOffset;
7197
+        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);
7198
+      }
7199
+    }
7200
+    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
7201
+    $wrapperEl
7202
+      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);
7203
+  },
7204
+  setTransition(duration) {
7205
+    const swiper = this;
7206
+    const { $el, slides } = swiper;
7207
+    slides
7208
+      .transition(duration)
7209
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7210
+      .transition(duration);
7211
+    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
7212
+      $el.find('.swiper-cube-shadow').transition(duration);
7213
+    }
7214
+  },
7215
+};
7216
+
7217
+var EffectCube = {
7218
+  name: 'effect-cube',
7219
+  params: {
7220
+    cubeEffect: {
7221
+      slideShadows: true,
7222
+      shadow: true,
7223
+      shadowOffset: 20,
7224
+      shadowScale: 0.94,
7225
+    },
7226
+  },
7227
+  create() {
7228
+    const swiper = this;
7229
+    Utils.extend(swiper, {
7230
+      cubeEffect: {
7231
+        setTranslate: Cube.setTranslate.bind(swiper),
7232
+        setTransition: Cube.setTransition.bind(swiper),
7233
+      },
7234
+    });
7235
+  },
7236
+  on: {
7237
+    beforeInit() {
7238
+      const swiper = this;
7239
+      if (swiper.params.effect !== 'cube') return;
7240
+      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);
7241
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7242
+      const overwriteParams = {
7243
+        slidesPerView: 1,
7244
+        slidesPerColumn: 1,
7245
+        slidesPerGroup: 1,
7246
+        watchSlidesProgress: true,
7247
+        resistanceRatio: 0,
7248
+        spaceBetween: 0,
7249
+        centeredSlides: false,
7250
+        virtualTranslate: true,
7251
+      };
7252
+      Utils.extend(swiper.params, overwriteParams);
7253
+      Utils.extend(swiper.originalParams, overwriteParams);
7254
+    },
7255
+    setTranslate() {
7256
+      const swiper = this;
7257
+      if (swiper.params.effect !== 'cube') return;
7258
+      swiper.cubeEffect.setTranslate();
7259
+    },
7260
+    setTransition(duration) {
7261
+      const swiper = this;
7262
+      if (swiper.params.effect !== 'cube') return;
7263
+      swiper.cubeEffect.setTransition(duration);
7264
+    },
7265
+  },
7266
+};
7267
+
7268
+const Flip = {
7269
+  setTranslate() {
7270
+    const swiper = this;
7271
+    const { slides, rtlTranslate: rtl } = swiper;
7272
+    for (let i = 0; i < slides.length; i += 1) {
7273
+      const $slideEl = slides.eq(i);
7274
+      let progress = $slideEl[0].progress;
7275
+      if (swiper.params.flipEffect.limitRotation) {
7276
+        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
7277
+      }
7278
+      const offset = $slideEl[0].swiperSlideOffset;
7279
+      const rotate = -180 * progress;
7280
+      let rotateY = rotate;
7281
+      let rotateX = 0;
7282
+      let tx = -offset;
7283
+      let ty = 0;
7284
+      if (!swiper.isHorizontal()) {
7285
+        ty = tx;
7286
+        tx = 0;
7287
+        rotateX = -rotateY;
7288
+        rotateY = 0;
7289
+      } else if (rtl) {
7290
+        rotateY = -rotateY;
7291
+      }
7292
+
7293
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
7294
+
7295
+      if (swiper.params.flipEffect.slideShadows) {
7296
+        // Set shadows
7297
+        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7298
+        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7299
+        if (shadowBefore.length === 0) {
7300
+          shadowBefore = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`);
7301
+          $slideEl.append(shadowBefore);
7302
+        }
7303
+        if (shadowAfter.length === 0) {
7304
+          shadowAfter = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`);
7305
+          $slideEl.append(shadowAfter);
7306
+        }
7307
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
7308
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
7309
+      }
7310
+      $slideEl
7311
+        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);
7312
+    }
7313
+  },
7314
+  setTransition(duration) {
7315
+    const swiper = this;
7316
+    const { slides, activeIndex, $wrapperEl } = swiper;
7317
+    slides
7318
+      .transition(duration)
7319
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7320
+      .transition(duration);
7321
+    if (swiper.params.virtualTranslate && duration !== 0) {
7322
+      let eventTriggered = false;
7323
+      // eslint-disable-next-line
7324
+      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
7325
+        if (eventTriggered) return;
7326
+        if (!swiper || swiper.destroyed) return;
7327
+        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
7328
+        eventTriggered = true;
7329
+        swiper.animating = false;
7330
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
7331
+        for (let i = 0; i < triggerEvents.length; i += 1) {
7332
+          $wrapperEl.trigger(triggerEvents[i]);
7333
+        }
7334
+      });
7335
+    }
7336
+  },
7337
+};
7338
+
7339
+var EffectFlip = {
7340
+  name: 'effect-flip',
7341
+  params: {
7342
+    flipEffect: {
7343
+      slideShadows: true,
7344
+      limitRotation: true,
7345
+    },
7346
+  },
7347
+  create() {
7348
+    const swiper = this;
7349
+    Utils.extend(swiper, {
7350
+      flipEffect: {
7351
+        setTranslate: Flip.setTranslate.bind(swiper),
7352
+        setTransition: Flip.setTransition.bind(swiper),
7353
+      },
7354
+    });
7355
+  },
7356
+  on: {
7357
+    beforeInit() {
7358
+      const swiper = this;
7359
+      if (swiper.params.effect !== 'flip') return;
7360
+      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);
7361
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7362
+      const overwriteParams = {
7363
+        slidesPerView: 1,
7364
+        slidesPerColumn: 1,
7365
+        slidesPerGroup: 1,
7366
+        watchSlidesProgress: true,
7367
+        spaceBetween: 0,
7368
+        virtualTranslate: true,
7369
+      };
7370
+      Utils.extend(swiper.params, overwriteParams);
7371
+      Utils.extend(swiper.originalParams, overwriteParams);
7372
+    },
7373
+    setTranslate() {
7374
+      const swiper = this;
7375
+      if (swiper.params.effect !== 'flip') return;
7376
+      swiper.flipEffect.setTranslate();
7377
+    },
7378
+    setTransition(duration) {
7379
+      const swiper = this;
7380
+      if (swiper.params.effect !== 'flip') return;
7381
+      swiper.flipEffect.setTransition(duration);
7382
+    },
7383
+  },
7384
+};
7385
+
7386
+const Coverflow = {
7387
+  setTranslate() {
7388
+    const swiper = this;
7389
+    const {
7390
+      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,
7391
+    } = swiper;
7392
+    const params = swiper.params.coverflowEffect;
7393
+    const isHorizontal = swiper.isHorizontal();
7394
+    const transform = swiper.translate;
7395
+    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
7396
+    const rotate = isHorizontal ? params.rotate : -params.rotate;
7397
+    const translate = params.depth;
7398
+    // Each slide offset from center
7399
+    for (let i = 0, length = slides.length; i < length; i += 1) {
7400
+      const $slideEl = slides.eq(i);
7401
+      const slideSize = slidesSizesGrid[i];
7402
+      const slideOffset = $slideEl[0].swiperSlideOffset;
7403
+      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
7404
+
7405
+      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
7406
+      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
7407
+      // var rotateZ = 0
7408
+      let translateZ = -translate * Math.abs(offsetMultiplier);
7409
+
7410
+      let stretch = params.stretch;
7411
+      // Allow percentage to make a relative stretch for responsive sliders
7412
+      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
7413
+        stretch = ((parseFloat(params.stretch) / 100) * slideSize);
7414
+      }
7415
+      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
7416
+      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;
7417
+
7418
+      // Fix for ultra small values
7419
+      if (Math.abs(translateX) < 0.001) translateX = 0;
7420
+      if (Math.abs(translateY) < 0.001) translateY = 0;
7421
+      if (Math.abs(translateZ) < 0.001) translateZ = 0;
7422
+      if (Math.abs(rotateY) < 0.001) rotateY = 0;
7423
+      if (Math.abs(rotateX) < 0.001) rotateX = 0;
7424
+
7425
+      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
7426
+
7427
+      $slideEl.transform(slideTransform);
7428
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
7429
+      if (params.slideShadows) {
7430
+        // Set shadows
7431
+        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7432
+        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7433
+        if ($shadowBeforeEl.length === 0) {
7434
+          $shadowBeforeEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
7435
+          $slideEl.append($shadowBeforeEl);
7436
+        }
7437
+        if ($shadowAfterEl.length === 0) {
7438
+          $shadowAfterEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
7439
+          $slideEl.append($shadowAfterEl);
7440
+        }
7441
+        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
7442
+        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
7443
+      }
7444
+    }
7445
+
7446
+    // Set correct perspective for IE10
7447
+    if (Support.pointerEvents || Support.prefixedPointerEvents) {
7448
+      const ws = $wrapperEl[0].style;
7449
+      ws.perspectiveOrigin = `${center}px 50%`;
7450
+    }
7451
+  },
7452
+  setTransition(duration) {
7453
+    const swiper = this;
7454
+    swiper.slides
7455
+      .transition(duration)
7456
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7457
+      .transition(duration);
7458
+  },
7459
+};
7460
+
7461
+var EffectCoverflow = {
7462
+  name: 'effect-coverflow',
7463
+  params: {
7464
+    coverflowEffect: {
7465
+      rotate: 50,
7466
+      stretch: 0,
7467
+      depth: 100,
7468
+      modifier: 1,
7469
+      slideShadows: true,
7470
+    },
7471
+  },
7472
+  create() {
7473
+    const swiper = this;
7474
+    Utils.extend(swiper, {
7475
+      coverflowEffect: {
7476
+        setTranslate: Coverflow.setTranslate.bind(swiper),
7477
+        setTransition: Coverflow.setTransition.bind(swiper),
7478
+      },
7479
+    });
7480
+  },
7481
+  on: {
7482
+    beforeInit() {
7483
+      const swiper = this;
7484
+      if (swiper.params.effect !== 'coverflow') return;
7485
+
7486
+      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);
7487
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7488
+
7489
+      swiper.params.watchSlidesProgress = true;
7490
+      swiper.originalParams.watchSlidesProgress = true;
7491
+    },
7492
+    setTranslate() {
7493
+      const swiper = this;
7494
+      if (swiper.params.effect !== 'coverflow') return;
7495
+      swiper.coverflowEffect.setTranslate();
7496
+    },
7497
+    setTransition(duration) {
7498
+      const swiper = this;
7499
+      if (swiper.params.effect !== 'coverflow') return;
7500
+      swiper.coverflowEffect.setTransition(duration);
7501
+    },
7502
+  },
7503
+};
7504
+
7505
+const Thumbs = {
7506
+  init() {
7507
+    const swiper = this;
7508
+    const { thumbs: thumbsParams } = swiper.params;
7509
+    const SwiperClass = swiper.constructor;
7510
+    if (thumbsParams.swiper instanceof SwiperClass) {
7511
+      swiper.thumbs.swiper = thumbsParams.swiper;
7512
+      Utils.extend(swiper.thumbs.swiper.originalParams, {
7513
+        watchSlidesProgress: true,
7514
+        slideToClickedSlide: false,
7515
+      });
7516
+      Utils.extend(swiper.thumbs.swiper.params, {
7517
+        watchSlidesProgress: true,
7518
+        slideToClickedSlide: false,
7519
+      });
7520
+    } else if (Utils.isObject(thumbsParams.swiper)) {
7521
+      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
7522
+        watchSlidesVisibility: true,
7523
+        watchSlidesProgress: true,
7524
+        slideToClickedSlide: false,
7525
+      }));
7526
+      swiper.thumbs.swiperCreated = true;
7527
+    }
7528
+    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
7529
+    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
7530
+  },
7531
+  onThumbClick() {
7532
+    const swiper = this;
7533
+    const thumbsSwiper = swiper.thumbs.swiper;
7534
+    if (!thumbsSwiper) return;
7535
+    const clickedIndex = thumbsSwiper.clickedIndex;
7536
+    const clickedSlide = thumbsSwiper.clickedSlide;
7537
+    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
7538
+    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
7539
+    let slideToIndex;
7540
+    if (thumbsSwiper.params.loop) {
7541
+      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
7542
+    } else {
7543
+      slideToIndex = clickedIndex;
7544
+    }
7545
+    if (swiper.params.loop) {
7546
+      let currentIndex = swiper.activeIndex;
7547
+      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
7548
+        swiper.loopFix();
7549
+        // eslint-disable-next-line
7550
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
7551
+        currentIndex = swiper.activeIndex;
7552
+      }
7553
+      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
7554
+      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
7555
+      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;
7556
+      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;
7557
+      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;
7558
+      else slideToIndex = prevIndex;
7559
+    }
7560
+    swiper.slideTo(slideToIndex);
7561
+  },
7562
+  update(initial) {
7563
+    const swiper = this;
7564
+    const thumbsSwiper = swiper.thumbs.swiper;
7565
+    if (!thumbsSwiper) return;
7566
+
7567
+    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
7568
+      ? thumbsSwiper.slidesPerViewDynamic()
7569
+      : thumbsSwiper.params.slidesPerView;
7570
+
7571
+    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
7572
+    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
7573
+    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
7574
+      let currentThumbsIndex = thumbsSwiper.activeIndex;
7575
+      let newThumbsIndex;
7576
+      let direction;
7577
+      if (thumbsSwiper.params.loop) {
7578
+        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
7579
+          thumbsSwiper.loopFix();
7580
+          // eslint-disable-next-line
7581
+          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
7582
+          currentThumbsIndex = thumbsSwiper.activeIndex;
7583
+        }
7584
+        // Find actual thumbs index to slide to
7585
+        const prevThumbsIndex = thumbsSwiper.slides
7586
+          .eq(currentThumbsIndex)
7587
+          .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
7588
+          .index();
7589
+        const nextThumbsIndex = thumbsSwiper.slides
7590
+          .eq(currentThumbsIndex)
7591
+          .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
7592
+          .index();
7593
+        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;
7594
+        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;
7595
+        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;
7596
+        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;
7597
+        else newThumbsIndex = prevThumbsIndex;
7598
+        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
7599
+      } else {
7600
+        newThumbsIndex = swiper.realIndex;
7601
+        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
7602
+      }
7603
+      if (useOffset) {
7604
+        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
7605
+      }
7606
+
7607
+      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
7608
+        if (thumbsSwiper.params.centeredSlides) {
7609
+          if (newThumbsIndex > currentThumbsIndex) {
7610
+            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
7611
+          } else {
7612
+            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
7613
+          }
7614
+        } else if (newThumbsIndex > currentThumbsIndex) {
7615
+          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
7616
+        }
7617
+        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
7618
+      }
7619
+    }
7620
+
7621
+    // Activate thumbs
7622
+    let thumbsToActivate = 1;
7623
+    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
7624
+
7625
+    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
7626
+      thumbsToActivate = swiper.params.slidesPerView;
7627
+    }
7628
+
7629
+    if (!swiper.params.thumbs.multipleActiveThumbs) {
7630
+      thumbsToActivate = 1;
7631
+    }
7632
+
7633
+    thumbsToActivate = Math.floor(thumbsToActivate);
7634
+
7635
+    thumbsSwiper.slides.removeClass(thumbActiveClass);
7636
+    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
7637
+      for (let i = 0; i < thumbsToActivate; i += 1) {
7638
+        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass);
7639
+      }
7640
+    } else {
7641
+      for (let i = 0; i < thumbsToActivate; i += 1) {
7642
+        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);
7643
+      }
7644
+    }
7645
+  },
7646
+};
7647
+var Thumbs$1 = {
7648
+  name: 'thumbs',
7649
+  params: {
7650
+    thumbs: {
7651
+      swiper: null,
7652
+      multipleActiveThumbs: true,
7653
+      autoScrollOffset: 0,
7654
+      slideThumbActiveClass: 'swiper-slide-thumb-active',
7655
+      thumbsContainerClass: 'swiper-container-thumbs',
7656
+    },
7657
+  },
7658
+  create() {
7659
+    const swiper = this;
7660
+    Utils.extend(swiper, {
7661
+      thumbs: {
7662
+        swiper: null,
7663
+        init: Thumbs.init.bind(swiper),
7664
+        update: Thumbs.update.bind(swiper),
7665
+        onThumbClick: Thumbs.onThumbClick.bind(swiper),
7666
+      },
7667
+    });
7668
+  },
7669
+  on: {
7670
+    beforeInit() {
7671
+      const swiper = this;
7672
+      const { thumbs } = swiper.params;
7673
+      if (!thumbs || !thumbs.swiper) return;
7674
+      swiper.thumbs.init();
7675
+      swiper.thumbs.update(true);
7676
+    },
7677
+    slideChange() {
7678
+      const swiper = this;
7679
+      if (!swiper.thumbs.swiper) return;
7680
+      swiper.thumbs.update();
7681
+    },
7682
+    update() {
7683
+      const swiper = this;
7684
+      if (!swiper.thumbs.swiper) return;
7685
+      swiper.thumbs.update();
7686
+    },
7687
+    resize() {
7688
+      const swiper = this;
7689
+      if (!swiper.thumbs.swiper) return;
7690
+      swiper.thumbs.update();
7691
+    },
7692
+    observerUpdate() {
7693
+      const swiper = this;
7694
+      if (!swiper.thumbs.swiper) return;
7695
+      swiper.thumbs.update();
7696
+    },
7697
+    setTransition(duration) {
7698
+      const swiper = this;
7699
+      const thumbsSwiper = swiper.thumbs.swiper;
7700
+      if (!thumbsSwiper) return;
7701
+      thumbsSwiper.setTransition(duration);
7702
+    },
7703
+    beforeDestroy() {
7704
+      const swiper = this;
7705
+      const thumbsSwiper = swiper.thumbs.swiper;
7706
+      if (!thumbsSwiper) return;
7707
+      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
7708
+        thumbsSwiper.destroy();
7709
+      }
7710
+    },
7711
+  },
7712
+};
7713
+
7714
+// Swiper Class
7715
+
7716
+const components = [
7717
+  Device$1,
7718
+  Support$1,
7719
+  Browser$1,
7720
+  Resize,
7721
+  Observer$1,
7722
+  Virtual$1,
7723
+  Keyboard$1,
7724
+  Mousewheel$1,
7725
+  Navigation$1,
7726
+  Pagination$1,
7727
+  Scrollbar$1,
7728
+  Parallax$1,
7729
+  Zoom$1,
7730
+  Lazy$1,
7731
+  Controller$1,
7732
+  A11y,
7733
+  History$1,
7734
+  HashNavigation$1,
7735
+  Autoplay$1,
7736
+  EffectFade,
7737
+  EffectCube,
7738
+  EffectFlip,
7739
+  EffectCoverflow,
7740
+  Thumbs$1
7741
+];
7742
+
7743
+if (typeof Swiper.use === 'undefined') {
7744
+  Swiper.use = Swiper.Class.use;
7745
+  Swiper.installModule = Swiper.Class.installModule;
7746
+}
7747
+
7748
+Swiper.use(components);
7749
+
7750
+export default Swiper;
7751
+//# sourceMappingURL=swiper.esm.bundle.js.map
0 7752
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"file":"swiper.esm.bundle.js.map","sources":["../src/utils/dom.js","../src/utils/utils.js","../src/utils/support.js","../src/utils/class.js","../src/components/core/update/updateSize.js","../src/components/core/update/updateSlides.js","../src/components/core/update/updateAutoHeight.js","../src/components/core/update/updateSlidesOffset.js","../src/components/core/update/updateSlidesProgress.js","../src/components/core/update/updateProgress.js","../src/components/core/update/updateSlidesClasses.js","../src/components/core/update/updateActiveIndex.js","../src/components/core/update/updateClickedSlide.js","../src/components/core/update/index.js","../src/components/core/translate/getTranslate.js","../src/components/core/translate/setTranslate.js","../src/components/core/translate/minTranslate.js","../src/components/core/translate/maxTranslate.js","../src/components/core/translate/translateTo.js","../src/components/core/translate/index.js","../src/components/core/transition/setTransition.js","../src/components/core/transition/transitionStart.js","../src/components/core/transition/transitionEnd.js","../src/components/core/transition/index.js","../src/components/core/slide/slideTo.js","../src/components/core/slide/slideToLoop.js","../src/components/core/slide/slideNext.js","../src/components/core/slide/slidePrev.js","../src/components/core/slide/slideReset.js","../src/components/core/slide/slideToClosest.js","../src/components/core/slide/slideToClickedSlide.js","../src/components/core/slide/index.js","../src/components/core/loop/loopCreate.js","../src/components/core/loop/loopFix.js","../src/components/core/loop/loopDestroy.js","../src/components/core/loop/index.js","../src/components/core/grab-cursor/setGrabCursor.js","../src/components/core/grab-cursor/unsetGrabCursor.js","../src/components/core/grab-cursor/index.js","../src/components/core/manipulation/appendSlide.js","../src/components/core/manipulation/prependSlide.js","../src/components/core/manipulation/addSlide.js","../src/components/core/manipulation/removeSlide.js","../src/components/core/manipulation/removeAllSlides.js","../src/components/core/manipulation/index.js","../src/utils/device.js","../src/components/core/events/onTouchStart.js","../src/components/core/events/onTouchMove.js","../src/components/core/events/onTouchEnd.js","../src/components/core/events/onResize.js","../src/components/core/events/onClick.js","../src/components/core/events/onScroll.js","../src/components/core/events/index.js","../src/components/core/breakpoints/setBreakpoint.js","../src/components/core/breakpoints/getBreakpoint.js","../src/components/core/breakpoints/index.js","../src/components/core/classes/addClasses.js","../src/components/core/classes/removeClasses.js","../src/components/core/classes/index.js","../src/components/core/images/loadImage.js","../src/components/core/images/preloadImages.js","../src/components/core/images/index.js","../src/components/core/check-overflow/index.js","../src/components/core/defaults.js","../src/components/core/core-class.js","../src/modules/device/device.js","../src/modules/support/support.js","../src/utils/browser.js","../src/modules/browser/browser.js","../src/modules/resize/resize.js","../src/modules/observer/observer.js","../src/components/virtual/virtual.js","../src/components/keyboard/keyboard.js","../src/components/mousewheel/mousewheel.js","../src/components/navigation/navigation.js","../src/components/pagination/pagination.js","../src/components/scrollbar/scrollbar.js","../src/components/parallax/parallax.js","../src/components/zoom/zoom.js","../src/components/lazy/lazy.js","../src/components/controller/controller.js","../src/components/a11y/a11y.js","../src/components/history/history.js","../src/components/hash-navigation/hash-navigation.js","../src/components/autoplay/autoplay.js","../src/components/effect-fade/effect-fade.js","../src/components/effect-cube/effect-cube.js","../src/components/effect-flip/effect-flip.js","../src/components/effect-coverflow/effect-coverflow.js","../src/components/thumbs/thumbs.js","../src/swiper.js"],"sourcesContent":["import {\n  $,\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n} from 'dom7/dist/dom7.modular';\n\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n  $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nexport default $;\n","import { window } from 'ssr-window';\n\nconst Utils = {\n  deleteProps(obj) {\n    const object = obj;\n    Object.keys(object).forEach((key) => {\n      try {\n        object[key] = null;\n      } catch (e) {\n        // no getter for object\n      }\n      try {\n        delete object[key];\n      } catch (e) {\n        // something got wrong\n      }\n    });\n  },\n  nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n  },\n  now() {\n    return Date.now();\n  },\n  getTranslate(el, axis = 'x') {\n    let matrix;\n    let curTransform;\n    let transformMatrix;\n\n    const curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n      }\n      // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n      matrix = transformMatrix.toString().split(',');\n    }\n\n    if (axis === 'x') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n    }\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n    }\n    return curTransform || 0;\n  },\n  parseUrlQuery(url) {\n    const query = {};\n    let urlToParse = url || window.location.href;\n    let i;\n    let params;\n    let param;\n    let length;\n    if (typeof urlToParse === 'string' && urlToParse.length) {\n      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n      length = params.length;\n\n      for (i = 0; i < length; i += 1) {\n        param = params[i].replace(/#\\S+/g, '').split('=');\n        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n      }\n    }\n    return query;\n  },\n  isObject(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  },\n  extend(...args) {\n    const to = Object(args[0]);\n    for (let i = 1; i < args.length; i += 1) {\n      const nextSource = args[i];\n      if (nextSource !== undefined && nextSource !== null) {\n        const keysArray = Object.keys(Object(nextSource));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          const nextKey = keysArray[nextIndex];\n          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== undefined && desc.enumerable) {\n            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              to[nextKey] = {};\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n    return to;\n  },\n};\nexport default Utils;\n","import { window, document } from 'ssr-window';\n\nconst Support = (function Support() {\n  return {\n    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n\n    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n    observer: (function checkObserver() {\n      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n    }()),\n\n    passiveListener: (function checkPassiveListener() {\n      let supportsPassive = false;\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          },\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {\n        // No support\n      }\n      return supportsPassive;\n    }()),\n\n    gestures: (function checkGestures() {\n      return 'ongesturestart' in window;\n    }()),\n  };\n}());\n\nexport default Support;\n","import Utils from './utils';\n\nclass SwiperClass {\n  constructor(params = {}) {\n    const self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach((eventName) => {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  }\n\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach((event) => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  }\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  }\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach((event) => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  }\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach((event) => {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        const handlers = [];\n        self.eventsListeners[event].forEach((eventHandler) => {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach((eventHandler) => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n  useModulesParams(instanceParams) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  }\n\n  useModules(modulesParams = {}) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      const moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach((modulePropName) => {\n          const moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach((moduleEventName) => {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n\n  static set components(components) {\n    const Class = this;\n    if (!Class.use) return;\n    Class.use(components);\n  }\n\n  static installModule(module, ...params) {\n    const Class = this;\n    if (!Class.prototype.modules) Class.prototype.modules = {};\n    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach((key) => {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach((key) => {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  }\n\n  static use(module, ...params) {\n    const Class = this;\n    if (Array.isArray(module)) {\n      module.forEach((m) => Class.installModule(m));\n      return Class;\n    }\n    return Class.installModule(module, ...params);\n  }\n}\n\nexport default SwiperClass;\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n  if (typeof swiper.params.width !== 'undefined') {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined') {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n  Utils.extend(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height,\n  });\n}\n","import { window } from 'ssr-window';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const params = swiper.params;\n\n  const {\n    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n\n  function slidesForMargin(slideIndex) {\n    if (!params.cssMode) return true;\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n    return true;\n  }\n\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.snapGrid.length;\n\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n  else slides.css({ marginRight: '', marginBottom: '' });\n\n  let slidesNumberEvenToRows;\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  }\n\n  // Calc slides\n  let slideSize;\n  const slidesPerColumn = params.slidesPerColumn;\n  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      let newSlideOrderIndex;\n      let column;\n      let row;\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        const columnsInGroup = groupIndex === 0\n          ? params.slidesPerGroup\n          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n        slide\n          .css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex,\n          });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - (column * slidesPerColumn);\n        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n          row += 1;\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - (row * slidesPerRow);\n      }\n      slide.css(\n        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n      );\n    }\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      const slideStyles = window.getComputedStyle(slide[0], null);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal()\n          ? slide.outerWidth(true)\n          : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        if (swiper.isHorizontal()) {\n          const width = parseFloat(slideStyles.getPropertyValue('width'));\n          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          const height = parseFloat(slideStyles.getPropertyValue('height'));\n          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\n        }\n      }\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        if (swiper.isHorizontal()) {\n          slides[i].style.width = `${slideSize}px`;\n        } else {\n          slides[i].style.height = `${slideSize}px`;\n        }\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n\n    prevSlideSize = slideSize;\n\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  let newSlidesGrid;\n\n  if (\n    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n  if (params.setWrapperSize) {\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid = newSlidesGrid;\n    }\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map((snap) => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Utils.extend(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid,\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n","export default function (speed) {\n  const swiper = this;\n  const activeSlides = [];\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each((index, slide) => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function () {\n  const swiper = this;\n  const slides = swiper.slides;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (translate = (this && this.translate) || 0) {\n  const swiper = this;\n  const params = swiper.params;\n\n  const { slides, rtlTranslate: rtl } = swiper;\n\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.removeClass(params.slideVisibleClass);\n\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    const slideProgress = (\n      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n    ) / (slide.swiperSlideSize + params.spaceBetween);\n    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                || (slideAfter > 1 && slideAfter <= swiper.size)\n                || (slideBefore <= 0 && slideAfter >= swiper.size);\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let { progress, isBeginning, isEnd } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / (translatesDiff);\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n  Utils.extend(swiper, {\n    progress,\n    isBeginning,\n    isEnd,\n  });\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}\n","export default function () {\n  const swiper = this;\n\n  const {\n    slides, params, $wrapperEl, activeIndex, realIndex,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n  let activeSlide;\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  }\n\n  // Active classes\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    }\n  }\n  // Next Slide\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  }\n  // Prev Slide\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    }\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    }\n  }\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    }\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n\n  // Get real index\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n  Utils.extend(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex,\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\n\nexport default {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function (axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n\n  const {\n    params, rtlTranslate: rtl, translate, $wrapperEl,\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n\n  return currentTranslate || 0;\n}\n","export default function (translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function () {\n  return (-this.snapGrid[0]);\n}\n","export default function () {\n  return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n","export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n\n  const {\n    params,\n    wrapperEl,\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n  else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: -newTranslate,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\n\nexport default {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo,\n};\n","export default function (duration, byController) {\n  const swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, params, previousIndex } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n    swiper.emit('slideChangeTransitionStart');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, previousIndex, params } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n    swiper.emit('slideChangeTransitionEnd');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\n\nexport default {\n  setTransition,\n  transitionStart,\n  transitionEnd,\n};\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n\n  const {\n    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex];\n\n  // Update progress\n  swiper.updateProgress(translate);\n\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';\n  else if (slideIndex < activeIndex) direction = 'prev';\n  else direction = 'reset';\n\n\n  // Update Index\n  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    let t = -translate;\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: t,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const { params, animating } = swiper;\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params, animating, snapGrid, slidesGrid, rtlTranslate,\n  } = swiper;\n\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach((snap) => {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n  let prevIndex;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (\n        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n      ) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n          .eq(0)\n          .index();\n\n        Utils.nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl\n        .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n        .eq(0)\n        .index();\n\n      Utils.nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\n\nexport default {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide,\n};\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n  // Remove duplicated slides\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n  let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $wrapperEl.append(blankNode);\n      }\n      slides = $wrapperEl.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((index, el) => {\n    const slide = $(el);\n    if (index < swiper.loopedSlides) appendSlides.push(el);\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n    slide.attr('data-swiper-slide-index', index);\n  });\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  swiper.emit('beforeLoopFix');\n\n  const {\n    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate();\n\n  // Fix For Negative Oversliding\n  if (activeIndex < loopedSlides) {\n    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  swiper.emit('loopFix');\n}\n","export default function () {\n  const swiper = this;\n  const { $wrapperEl, params, slides } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\n\nexport default {\n  loopCreate,\n  loopFix,\n  loopDestroy,\n};\n","import Support from '../../../utils/support';\n\nexport default function (moving) {\n  const swiper = this;\n  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  const el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","import Support from '../../../utils/support';\n\nexport default function () {\n  const swiper = this;\n  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  swiper.el.style.cursor = '';\n}\n","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\n\nexport default {\n  setGrabCursor,\n  unsetGrabCursor,\n};\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { $wrapperEl, params } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n","import Support from '../../../utils/support';\n\nexport default function (index, slides) {\n  const swiper = this;\n  const { $wrapperEl, params, activeIndex } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    $wrapperEl.append(slidesBuffer[i]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slidesIndexes) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\n\nexport default {\n  appendSlide,\n  prependSlide,\n  addSlide,\n  removeSlide,\n  removeAllSlides,\n};\n","import { window } from 'ssr-window';\nimport Support from './support';\n\nconst Device = (function Device() {\n  const platform = window.navigator.platform;\n  const ua = window.navigator.userAgent;\n\n  const device = {\n    ios: false,\n    android: false,\n    androidChrome: false,\n    desktop: false,\n    iphone: false,\n    ipod: false,\n    ipad: false,\n    edge: false,\n    ie: false,\n    firefox: false,\n    macos: false,\n    windows: false,\n    cordova: !!(window.cordova || window.phonegap),\n    phonegap: !!(window.cordova || window.phonegap),\n    electron: false,\n  };\n\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n  const edge = ua.indexOf('Edge/') >= 0;\n  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n  const windows = platform === 'Win32';\n  const electron = ua.toLowerCase().indexOf('electron') >= 0;\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  if (!ipad\n    && macos\n    && Support.touch\n    && (\n      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n      || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n      || (screenWidth === 768 && screenHeight === 1024) // other\n    )\n  ) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    macos = false;\n  }\n\n  device.ie = ie;\n  device.edge = edge;\n  device.firefox = firefox;\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.osVersion = android[2];\n    device.android = true;\n    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n  // iOS\n  if (iphone && !ipod) {\n    device.osVersion = iphone[2].replace(/_/g, '.');\n    device.iphone = true;\n  }\n  if (ipad) {\n    device.osVersion = ipad[2].replace(/_/g, '.');\n    device.ipad = true;\n  }\n  if (ipod) {\n    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    device.ipod = true;\n  }\n  // iOS 8+ changed UA\n  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n    if (device.osVersion.split('.')[0] === '10') {\n      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n    }\n  }\n\n  // Webview\n  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n  device.webview = device.webView;\n  device.standalone = device.webView;\n\n  // Desktop\n  device.desktop = !(device.ios || device.android) || electron;\n  if (device.desktop) {\n    device.electron = electron;\n    device.macos = macos;\n    device.windows = windows;\n    if (device.macos) {\n      device.os = 'macos';\n    }\n    if (device.windows) {\n      device.os = 'windows';\n    }\n  }\n\n  // Pixel Ratio\n  device.pixelRatio = window.devicePixelRatio || 1;\n\n  // Export object\n  return device;\n}());\n\nexport default Device;\n","import { window, document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n  if (\n    edgeSwipeDetection\n    && ((startX <= edgeSwipeThreshold)\n    || (startX >= window.screen.width - edgeSwipeThreshold))\n  ) {\n    return;\n  }\n\n  Utils.extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined,\n  });\n\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = Utils.now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n    if (\n      document.activeElement\n      && $(document.activeElement).is(data.formElements)\n      && document.activeElement !== $targetEl[0]\n    ) {\n      document.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n  swiper.emit('touchStart', e);\n}\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches, rtlTranslate: rtl } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n    if (data.isTouched) {\n      Utils.extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY,\n      });\n      data.touchStartTime = Utils.now();\n    }\n    return;\n  }\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (\n        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n      ) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (\n      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n    ) {\n      return;\n    }\n  }\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if ((diffX * diffX) + (diffY * diffY) >= 25) {\n        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime,\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: Utils.now(),\n    });\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n\n  const {\n    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n  } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = Utils.now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = Utils.now();\n  Utils.nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeModeMomentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(() => {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(() => {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(() => {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(() => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const { params, el } = swiper;\n\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n\n  swiper.updateSize();\n  swiper.updateSlides();\n\n  swiper.updateSlidesClasses();\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n","export default function (e) {\n  const swiper = this;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n  const { wrapperEl, rtlTranslate } = swiper;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === -0) swiper.translate = 0;\n\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { document } from 'ssr-window';\nimport Device from '../../../utils/device';\nimport Support from '../../../utils/support';\n\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  const swiper = this;\n\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nexport default {\n  attachEvents,\n  detachEvents,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const {\n    activeIndex, initialized, loopedSlides = 0, params, $el,\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n        const paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    const wasMultiRow = params.slidesPerColumn > 1;\n    const isMultiRow = breakpointParams.slidesPerColumn > 1;\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(`${params.containerModifierClass}multirow`);\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(`${params.containerModifierClass}multirow-column`);\n      }\n    }\n\n    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n    if (directionChanged && initialized) {\n      swiper.changeDirection();\n    }\n\n    Utils.extend(swiper.params, breakpointParams);\n\n    Utils.extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n    });\n\n    swiper.currentBreakpoint = breakpoint;\n\n    if (needsReLoop && initialized) {\n      swiper.loopDestroy();\n      swiper.loopCreate();\n      swiper.updateSlides();\n      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n    }\n\n    swiper.emit('breakpoint', breakpointParams);\n  }\n}\n","import { window } from 'ssr-window';\n\nexport default function (breakpoints) {\n  // Get breakpoint for window width\n  if (!breakpoints) return undefined;\n  let breakpoint = false;\n\n  const points = Object.keys(breakpoints).map((point) => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = window.innerHeight * minRatio;\n      return { value, point };\n    }\n    return { value: point, point };\n  });\n\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const { point, value } = points[i];\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\n\nexport default { setBreakpoint, getBreakpoint };\n","import Device from '../../../utils/device';\n\nexport default function () {\n  const swiper = this;\n  const {\n    classNames, params, rtl, $el,\n  } = swiper;\n  const suffixes = [];\n\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n  if (Device.android) {\n    suffixes.push('android');\n  }\n  if (Device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach((suffix) => {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n\n  $el.addClass(classNames.join(' '));\n}\n","export default function () {\n  const swiper = this;\n  const { $el, classNames } = swiper;\n\n  $el.removeClass(classNames.join(' '));\n}\n","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\n\nexport default { addClasses, removeClasses };\n","import { window } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function (imageEl, src, srcset, sizes, checkForComplete, callback) {\n  let image;\n  function onReady() {\n    if (callback) callback();\n  }\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n      if (sizes) {\n        image.sizes = sizes;\n      }\n      if (srcset) {\n        image.srcset = srcset;\n      }\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}\n","export default function () {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(\n      imageEl,\n      imageEl.currentSrc || imageEl.getAttribute('src'),\n      imageEl.srcset || imageEl.getAttribute('srcset'),\n      imageEl.sizes || imageEl.getAttribute('sizes'),\n      true,\n      onReady\n    );\n  }\n}\n","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\n\nexport default {\n  loadImage,\n  preloadImages,\n};\n","\nfunction checkOverflow() {\n  const swiper = this;\n  const params = swiper.params;\n  const wasLocked = swiper.isLocked;\n  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked;\n\n  // events\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    swiper.navigation.update();\n  }\n}\n\nexport default { checkOverflow };\n","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  //\n  preventInteractionOnTransition: false,\n\n  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n\n  // Autoheight\n  autoHeight: false,\n\n  // Set wrapper width\n  setWrapperSize: false,\n\n  // Virtual Translate\n  virtualTranslate: false,\n\n  // Effects\n  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0, // in px\n  slidesOffsetAfter: 0, // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n\n  // Round length\n  roundLengths: false,\n\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n\n  // Cursor\n  grabCursor: false,\n\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null, // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n\n  // Passive Listeners\n  passiveListeners: true,\n\n  // NS\n  containerModifierClass: 'swiper-container-', // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n\n  // Callbacks\n  runCallbacksOnInit: true,\n};\n","/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nimport SwiperClass from '../../utils/class';\n\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\n\nimport defaults from './defaults';\n\nconst prototypes = {\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  manipulation,\n  events,\n  breakpoints,\n  checkOverflow,\n  classes,\n  images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n\n    params = Utils.extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    super(params);\n\n    Object.keys(prototypes).forEach((prototypeGroup) => {\n      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    // Swiper Instance\n    const swiper = this;\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n    Object.keys(swiper.modules).forEach((moduleName) => {\n      const module = swiper.modules[moduleName];\n      if (module.params) {\n        const moduleParamName = Object.keys(module.params)[0];\n        const moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = { enabled: true };\n        }\n        if (\n          typeof params[moduleParamName] === 'object'\n          && !('enabled' in params[moduleParamName])\n        ) {\n          params[moduleParamName].enabled = true;\n        }\n        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n      }\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = Utils.extend({}, defaults);\n    swiper.useModulesParams(swiperParams);\n\n    // Extend defaults with passed params\n    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = Utils.extend({}, swiper.params);\n    swiper.passedParams = Utils.extend({}, params);\n\n    // Save Dom lib\n    swiper.$ = $;\n\n    // Find el\n    const $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      const swipers = [];\n      $el.each((index, containerEl) => {\n        const newParams = Utils.extend({}, params, { el: containerEl });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper;\n    $el.data('swiper', swiper);\n\n    // Find Wrapper\n    let $wrapperEl;\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n      // Children needs to return slot items\n      $wrapperEl.children = (options) => $el.children(options);\n    } else {\n      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n    }\n    // Extend Swiper\n    Utils.extend(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n\n      // Classes\n      classNames: [],\n\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // RTL\n      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n\n      //\n      isBeginning: true,\n      isEnd: false,\n\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n\n      // Touch Events\n      touchEvents: (function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        let desktop = ['mousedown', 'mousemove', 'mouseup'];\n        if (Support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3],\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2],\n        };\n        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }()),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        formElements: 'input, select, option, textarea, button, video, label',\n        // Last click time\n        lastClickTime: Utils.now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined,\n      },\n\n      // Clicks\n      allowClick: true,\n\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0,\n      },\n\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0,\n\n    });\n\n    // Install Modules\n    swiper.useModules();\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    return swiper;\n  }\n\n  slidesPerViewDynamic() {\n    const swiper = this;\n    const {\n      params, slides, slidesGrid, size: swiperSize, activeIndex,\n    } = swiper;\n    let spv = 1;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const { snapGrid, params } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (swiper.params.freeMode) {\n      setTranslate();\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n      return swiper;\n    }\n\n    swiper.$el\n      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n    swiper.params.direction = newDirection;\n\n    swiper.slides.each((slideIndex, slideEl) => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n\n    return swiper;\n  }\n\n  init() {\n    const swiper = this;\n    if (swiper.initialized) return;\n\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n\n    // Init Flag\n    swiper.initialized = true;\n\n    // Emit\n    swiper.emit('init');\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params, $el, $wrapperEl, slides,\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n      if (slides && slides.length) {\n        slides\n          .removeClass([\n            params.slideVisibleClass,\n            params.slideActiveClass,\n            params.slideNextClass,\n            params.slidePrevClass,\n          ].join(' '))\n          .removeAttr('style')\n          .removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach((eventName) => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      swiper.$el.data('swiper', null);\n      Utils.deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    Utils.extend(extendedDefaults, newDefaults);\n  }\n\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n\n  static get defaults() {\n    return defaults;\n  }\n\n  static get Class() {\n    return SwiperClass;\n  }\n\n  static get $() {\n    return $;\n  }\n}\n\nexport default Swiper;\n","import Device from '../../utils/device';\n\nexport default {\n  name: 'device',\n  proto: {\n    device: Device,\n  },\n  static: {\n    device: Device,\n  },\n};\n","import Support from '../../utils/support';\n\nexport default {\n  name: 'support',\n  proto: {\n    support: Support,\n  },\n  static: {\n    support: Support,\n  },\n};\n","import { window } from 'ssr-window';\n\nconst Browser = (function Browser() {\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n  }\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n  };\n}());\n\nexport default Browser;\n","import Browser from '../../utils/browser';\n\nexport default {\n  name: 'browser',\n  proto: {\n    browser: Browser,\n  },\n  static: {\n    browser: Browser,\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nexport default {\n  name: 'resize',\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      resize: {\n        resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      // Emit resize\n      window.addEventListener('resize', swiper.resize.resizeHandler);\n\n      // Emit orientationchange\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy() {\n      const swiper = this;\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Observer = {\n  func: window.MutationObserver || window.WebkitMutationObserver,\n  attach(target, options = {}) {\n    const swiper = this;\n\n    const ObserverFunc = Observer.func;\n    const observer = new ObserverFunc((mutations) => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n    });\n\n    swiper.observer.observers.push(observer);\n  },\n  init() {\n    const swiper = this;\n    if (!Support.observer || !swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n      for (let i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n    // Observe wrapper\n    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n  },\n  destroy() {\n    const swiper = this;\n    swiper.observer.observers.forEach((observer) => {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  },\n};\n\nexport default {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false,\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      observer: {\n        init: Observer.init.bind(swiper),\n        attach: Observer.attach.bind(swiper),\n        destroy: Observer.destroy.bind(swiper),\n        observers: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.observer.init();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.observer.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Virtual = {\n  update(force) {\n    const swiper = this;\n    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      renderSlide,\n      offset: previousOffset,\n    } = swiper.virtual;\n    swiper.updateActiveIndex();\n    const activeIndex = swiper.activeIndex || 0;\n\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';\n    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n      slidesBefore = slidesPerGroup + addSlidesAfter;\n    }\n    const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n    Utils.extend(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, `${offset}px`);\n      }\n      swiper.updateProgress();\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: (function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()),\n      });\n      onRendered();\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    if (force) {\n      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      if (i >= from && i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(i);\n        } else {\n          if (i > previousTo) appendIndexes.push(i);\n          if (i < previousFrom) prependIndexes.push(i);\n        }\n      }\n    }\n    appendIndexes.forEach((index) => {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort((a, b) => b - a).forEach((index) => {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n    onRendered();\n  },\n  renderSlide(slide, index) {\n    const swiper = this;\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    const $slideEl = params.renderSlide\n      ? $(params.renderSlide.call(swiper, slide, index))\n      : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n    if (params.cache) swiper.virtual.cache[index] = $slideEl;\n    return $slideEl;\n  },\n  appendSlide(slides) {\n    const swiper = this;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n    swiper.virtual.update(true);\n  },\n  prependSlide(slides) {\n    const swiper = this;\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach((cachedIndex) => {\n        const $cachedEl = cache[cachedIndex];\n        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide(slidesIndexes) {\n    const swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides() {\n    const swiper = this;\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  },\n};\n\nexport default {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      virtual: {\n        update: Virtual.update.bind(swiper),\n        appendSlide: Virtual.appendSlide.bind(swiper),\n        prependSlide: Virtual.prependSlide.bind(swiper),\n        removeSlide: Virtual.removeSlide.bind(swiper),\n        removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n        renderSlide: Virtual.renderSlide.bind(swiper),\n        slides: swiper.params.virtual.slides,\n        cache: {},\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n      const overwriteParams = {\n        watchSlidesProgress: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Keyboard = {\n  handle(event) {\n    const swiper = this;\n    const { rtlTranslate: rtl } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    // Directions locks\n    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      const swiperCoord = [\n        [swiperOffset.left, swiperOffset.top],\n        [swiperOffset.left + swiper.width, swiperOffset.top],\n        [swiperOffset.left, swiperOffset.top + swiper.height],\n        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n      ];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (\n          point[0] >= 0 && point[0] <= windowWidth\n          && point[1] >= 0 && point[1] <= windowHeight\n        ) {\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();\n      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();\n    } else {\n      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (kc === 34 || kc === 40) swiper.slideNext();\n      if (kc === 33 || kc === 38) swiper.slidePrev();\n    }\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable() {\n    const swiper = this;\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable() {\n    const swiper = this;\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  },\n};\n\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      keyboard: {\n        enabled: false,\n        enable: Keyboard.enable.bind(swiper),\n        disable: Keyboard.disable.bind(swiper),\n        handle: Keyboard.handle.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nfunction isEventSupported() {\n  const eventName = 'onwheel';\n  let isSupported = eventName in document;\n\n  if (!isSupported) {\n    const element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported\n    && document.implementation\n    && document.implementation.hasFeature\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    && document.implementation.hasFeature('', '') !== true\n  ) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\nconst Mousewheel = {\n  lastScrollTime: Utils.now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event() {\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) { // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else { // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = (pX < 1) ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = (pY < 1) ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY,\n    };\n  },\n  handleMouseEnter() {\n    const swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave() {\n    const swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle(event) {\n    let e = event;\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n    const data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n        else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n      else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n\n    if (params.invert) delta = -delta;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: Utils.now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event,\n      };\n\n      // Keep the most recent events\n      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n      const { lastEventBeforeSnap } = swiper.mousewheel;\n      const ignoreWheelEvents = lastEventBeforeSnap\n        && newEvent.time < lastEventBeforeSnap.time + 500\n        && newEvent.delta <= lastEventBeforeSnap.delta\n        && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        let position = swiper.getTranslate() + (delta * params.sensitivity);\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            recentWheelEvents.splice(0);\n          } else if (recentWheelEvents.length >= 15\n              && newEvent.time - firstEvent.time < 500\n              && firstEvent.delta - newEvent.delta >= 1\n              && newEvent.delta <= 6\n          ) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              const snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    return false;\n  },\n  animateSlider(newEvent) {\n    const swiper = this;\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n    // Return false as a default\n    return false;\n  },\n  releaseScroll(newEvent) {\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  },\n  enable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  },\n};\n\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarged: 'container',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      mousewheel: {\n        enabled: false,\n        enable: Mousewheel.enable.bind(swiper),\n        disable: Mousewheel.disable.bind(swiper),\n        handle: Mousewheel.handle.bind(swiper),\n        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n        animateSlider: Mousewheel.animateSlider.bind(swiper),\n        releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n        lastScrollTime: Utils.now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Navigation = {\n  update() {\n    // Update Navigation Buttons\n    const swiper = this;\n    const params = swiper.params.navigation;\n\n    if (swiper.params.loop) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n\n    let $nextEl;\n    let $prevEl;\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.nextEl === 'string'\n        && $nextEl.length > 1\n        && swiper.$el.find(params.nextEl).length === 1\n      ) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.prevEl === 'string'\n        && $prevEl.length > 1\n        && swiper.$el.find(params.prevEl).length === 1\n      ) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    Utils.extend(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const { $nextEl, $prevEl } = swiper.navigation;\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  },\n};\n\nexport default {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      navigation: {\n        init: Navigation.init.bind(swiper),\n        update: Navigation.update.bind(swiper),\n        destroy: Navigation.destroy.bind(swiper),\n        onNextClick: Navigation.onNextClick.bind(swiper),\n        onPrevClick: Navigation.onPrevClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    fromEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.navigation.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      const { $nextEl, $prevEl } = swiper.navigation;\n      if (\n        swiper.params.navigation.hideOnClick\n        && !$(e.target).is($prevEl)\n        && !$(e.target).is($nextEl)\n      ) {\n        let isHidden;\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n        if (isHidden === true) {\n          swiper.emit('navigationShow', swiper);\n        } else {\n          swiper.emit('navigationHide', swiper);\n        }\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Pagination = {\n  update() {\n    // Render || Update Pagination bullets/items\n    const swiper = this;\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    // Current/Total\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n        current -= (slidesLength - (swiper.loopedSlides * 2));\n      }\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n      if ($el.length > 1) {\n        bullets.each((index, bullet) => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n            if (bulletIndex === firstIndex) {\n              $bullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n            }\n            if (bulletIndex === lastIndex) {\n              $bullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n              $lastDisplayedBullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          } else {\n            $firstDisplayedBullet\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev`)\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev-prev`);\n            $lastDisplayedBullet\n              .next()\n              .addClass(`${params.bulletActiveClass}-next`)\n              .next()\n              .addClass(`${params.bulletActiveClass}-next-next`);\n          }\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n    if (params.type === 'fraction') {\n      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n    }\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', swiper, $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', swiper, $el[0]);\n    }\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render() {\n    // Render Container\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>`\n        + ' / '\n        + `<span class=\"${params.totalClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (\n      swiper.params.uniqueNavElements\n      && typeof params.el === 'string'\n      && $el.length > 1\n      && swiper.$el.find(params.el).length === 1\n    ) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      swiper.pagination.dynamicBulletIndex = 0;\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n        e.preventDefault();\n        let index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    Utils.extend(swiper.pagination, {\n      $el,\n      el: $el[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const $el = swiper.pagination.$el;\n\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n    if (params.clickable) {\n      $el.off('click', `.${params.bulletClass}`);\n    }\n  },\n};\n\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: (number) => number,\n      formatFractionTotal: (number) => number,\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-', // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable', // NEW\n      lockClass: 'swiper-pagination-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      pagination: {\n        init: Pagination.init.bind(swiper),\n        render: Pagination.render.bind(swiper),\n        update: Pagination.update.bind(swiper),\n        destroy: Pagination.destroy.bind(swiper),\n        dynamicBulletIndex: 0,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.pagination.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      if (\n        swiper.params.pagination.el\n        && swiper.params.pagination.hideOnClick\n        && swiper.pagination.$el.length > 0\n        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n      ) {\n        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n        if (isHidden === true) {\n          swiper.emit('paginationShow', swiper);\n        } else {\n          swiper.emit('paginationHide', swiper);\n        }\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    },\n  },\n};\n","import { document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Scrollbar = {\n  setTranslate() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n    const {\n      dragSize, trackSize, $dragEl, $el,\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n      $dragEl[0].style.width = `${newSize}px`;\n    } else {\n      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n      $dragEl[0].style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(() => {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n    const { scrollbar } = swiper;\n    const { $dragEl, $el } = scrollbar;\n\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n    const divider = swiper.size / swiper.virtualSize;\n    const moveDivider = divider * (trackSize / swiper.size);\n    let dragSize;\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = `${dragSize}px`;\n    } else {\n      $dragEl[0].style.height = `${dragSize}px`;\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n    Utils.extend(scrollbar, {\n      trackSize,\n      divider,\n      moveDivider,\n      dragSize,\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition(e) {\n    const swiper = this;\n    if (swiper.isHorizontal()) {\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n    }\n    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n  },\n  setDragPosition(e) {\n    const swiper = this;\n    const { scrollbar, rtlTranslate: rtl } = swiper;\n    const {\n      $el,\n      dragSize,\n      trackSize,\n      dragStartPos,\n    } = scrollbar;\n\n    let positionRatio;\n    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart(e) {\n    const swiper = this;\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n\n    clearTimeout(swiper.scrollbar.dragTimeout);\n\n    $el.transition(0);\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove(e) {\n    const swiper = this;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd(e) {\n    const swiper = this;\n\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n    swiper.emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const { scrollbar, $el: $swiperEl } = swiper;\n    const params = swiper.params.scrollbar;\n\n    let $el = $(params.el);\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n      $el = $swiperEl.find(params.el);\n    }\n\n    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n    if ($dragEl.length === 0) {\n      $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n      $el.append($dragEl);\n    }\n\n    Utils.extend(scrollbar, {\n      $el,\n      el: $el[0],\n      $dragEl,\n      dragEl: $dragEl[0],\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy() {\n    const swiper = this;\n    swiper.scrollbar.disableDraggable();\n  },\n};\n\nexport default {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      scrollbar: {\n        init: Scrollbar.init.bind(swiper),\n        destroy: Scrollbar.destroy.bind(swiper),\n        updateSize: Scrollbar.updateSize.bind(swiper),\n        setTranslate: Scrollbar.setTranslate.bind(swiper),\n        setTransition: Scrollbar.setTransition.bind(swiper),\n        enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n        disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n        setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n        onDragStart: Scrollbar.onDragStart.bind(swiper),\n        onDragMove: Scrollbar.onDragMove.bind(swiper),\n        onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    resize() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate() {\n      const swiper = this;\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy() {\n      const swiper = this;\n      swiper.scrollbar.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Parallax = {\n  setTransform(el, progress) {\n    const swiper = this;\n    const { rtl } = swiper;\n\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if ((x).indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if ((y).indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n      $el[0].style.opacity = currentOpacity;\n    }\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  },\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, slides, progress, snapGrid,\n    } = swiper;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, el) => {\n        swiper.parallax.setTransform(el, progress);\n      });\n    slides.each((slideIndex, slideEl) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each((index, el) => {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n    });\n  },\n  setTransition(duration = this.params.speed) {\n    const swiper = this;\n    const { $el } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, parallaxEl) => {\n        const $parallaxEl = $(parallaxEl);\n        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n        if (duration === 0) parallaxDuration = 0;\n        $parallaxEl.transition(parallaxDuration);\n      });\n  },\n};\n\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      parallax: {\n        setTransform: Parallax.setTransform.bind(swiper),\n        setTranslate: Parallax.setTranslate.bind(swiper),\n        setTransition: Parallax.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Device from '../../utils/device';\nimport Support from '../../utils/support';\n\nconst Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    const x1 = e.targetTouches[0].pageX;\n    const y1 = e.targetTouches[0].pageY;\n    const x2 = e.targetTouches[1].pageX;\n    const y2 = e.targetTouches[1].pageY;\n    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n    return distance;\n  },\n  // Events\n  onGestureStart(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n    if (!Support.gestures) {\n      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (Support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n    }\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n    }\n    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  onGestureEnd(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n        return;\n      }\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (image.isTouched) return;\n    if (Device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  },\n  onTouchMove(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    swiper.allowClick = false;\n    if (!image.isTouched || !gesture.$slideEl) return;\n\n    if (!image.isMoved) {\n      image.width = gesture.$imageEl[0].offsetWidth;\n      image.height = gesture.$imageEl[0].offsetHeight;\n      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n      gesture.$imageWrapEl.transition(0);\n      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (\n        swiper.isHorizontal()\n        && (\n          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      } if (\n        !swiper.isHorizontal()\n        && (\n          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n\n    image.isMoved = true;\n    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n\n    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTouchEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTransitionEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in(e) {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture, image } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left;\n      offsetY = gesture.$slideEl.offset().top;\n      diffX = (offsetX + (slideWidth / 2)) - touchX;\n      diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n\n      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  out() {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n    gesture.$slideEl = undefined;\n  },\n  // Attach/Detach Events\n  enable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n\n    swiper.zoom.enabled = false;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n};\n\nexport default {\n  name: 'zoom',\n  params: {\n    zoom: {\n      enabled: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed',\n    },\n  },\n  create() {\n    const swiper = this;\n    const zoom = {\n      enabled: false,\n      scale: 1,\n      currentScale: 1,\n      isScaling: false,\n      gesture: {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3,\n      },\n      image: {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {},\n      },\n      velocity: {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n      },\n    };\n\n    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n      zoom[methodName] = Zoom[methodName].bind(swiper);\n    });\n    Utils.extend(swiper, {\n      zoom,\n    });\n\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get() {\n        return scale;\n      },\n      set(value) {\n        if (scale !== value) {\n          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n        scale = value;\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.zoom.disable();\n    },\n    touchStart(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap(e) {\n      const swiper = this;\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Lazy = {\n  loadInSlide(index, loadInDuplicate = true) {\n    const swiper = this;\n    const params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n    const $slideEl = isVirtual\n      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n      : swiper.slides.eq(index);\n\n    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images = $images.add($slideEl[0]);\n    }\n    if ($images.length === 0) return;\n\n    $images.each((imageIndex, imageEl) => {\n      const $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n\n      const background = $imageEl.attr('data-background');\n      const src = $imageEl.attr('data-src');\n      const srcset = $imageEl.attr('data-srcset');\n      const sizes = $imageEl.attr('data-sizes');\n      const $pictureEl = $imageEl.parent('picture');\n\n      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n        if (background) {\n          $imageEl.css('background-image', `url(\"${background}\")`);\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n              const $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(`.${params.preloaderClass}`).remove();\n        if (swiper.params.loop && loadInDuplicate) {\n          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load() {\n    const swiper = this;\n    const {\n      $wrapperEl, params: swiperParams, slides, activeIndex,\n    } = swiper;\n    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    const params = swiperParams.lazy;\n\n    let slidesPerView = swiperParams.slidesPerView;\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n        const amount = params.loadPrevNextAmount;\n        const spv = slidesPerView;\n        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n        // Next Slides\n        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n        // Prev Slides\n        for (let i = minIndex; i < activeIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n};\n\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      lazy: {\n        initialImageLoaded: false,\n        load: Lazy.load.bind(swiper),\n        loadInSlide: Lazy.loadInSlide.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll() {\n      const swiper = this;\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    },\n  },\n};\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport Swiper from '../core/core-class';\nimport Utils from '../../utils/utils';\n\nconst Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    const binarySearch = (function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }());\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n    };\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction(c) {\n    const swiper = this;\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop\n        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate(setTranslate, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition(duration, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          Utils.nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        c.$wrapperEl.transitionEnd(() => {\n          if (!controlled) return;\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  },\n};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide', // or 'container'\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      controller: {\n        control: swiper.params.controller.control,\n        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n        setTranslate: Controller.setTranslate.bind(swiper),\n        setTransition: Controller.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    update() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate(translate, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition(duration, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst a11y = {\n  makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey(e) {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    const $targetEl = $(e.target);\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n      $targetEl[0].click();\n    }\n  },\n  notify(message) {\n    const swiper = this;\n    const notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation() {\n    const swiper = this;\n\n    if (swiper.params.loop || !swiper.navigation) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination() {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n        const $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init() {\n    const swiper = this;\n\n    swiper.$el.append(swiper.a11y.liveRegion);\n\n    // Navigation\n    const params = swiper.params.a11y;\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      a11y: {\n        liveRegion: $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`),\n      },\n    });\n    Object.keys(a11y).forEach((methodName) => {\n      swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nconst History = {\n  init() {\n    const swiper = this;\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    const history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues();\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState() {\n    const swiper = this;\n    swiper.history.paths = History.getPathValues();\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues() {\n    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');\n    const total = pathArray.length;\n    const key = pathArray[total - 2];\n    const value = pathArray[total - 1];\n    return { key, value };\n  },\n  setHistory(key, index) {\n    const swiper = this;\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    const slide = swiper.slides.eq(index);\n    let value = History.slugify(slide.attr('data-history'));\n    if (!window.location.pathname.includes(key)) {\n      value = `${key}/${value}`;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({ value }, null, value);\n    } else {\n      window.history.pushState({ value }, null, value);\n    }\n  },\n  slugify(text) {\n    return text.toString()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w-]+/g, '')\n      .replace(/--+/g, '-')\n      .replace(/^-+/, '')\n      .replace(/-+$/, '');\n  },\n  scrollToSlide(speed, value, runCallbacks) {\n    const swiper = this;\n    if (value) {\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHistory = History.slugify(slide.attr('data-history'));\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  },\n};\n\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      history: {\n        init: History.init.bind(swiper),\n        setHistory: History.setHistory.bind(swiper),\n        setHistoryPopState: History.setHistoryPopState.bind(swiper),\n        scrollToSlide: History.scrollToSlide.bind(swiper),\n        destroy: History.destroy.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst HashNavigation = {\n  onHashCange() {\n    const swiper = this;\n    swiper.emit('hashChange');\n    const newHash = document.location.hash.replace('#', '');\n    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n    if (newHash !== activeSlideHash) {\n      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash() {\n    const swiper = this;\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n      swiper.emit('hashSet');\n    } else {\n      const slide = swiper.slides.eq(swiper.activeIndex);\n      const hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n    swiper.hashNavigation.initialized = true;\n    const hash = document.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      hashNavigation: {\n        initialized: false,\n        init: HashNavigation.init.bind(swiper),\n        destroy: HashNavigation.destroy.bind(swiper),\n        setHash: HashNavigation.setHash.bind(swiper),\n        onHashCange: HashNavigation.onHashCange.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n  },\n};\n","/* eslint no-underscore-dangle: \"off\" */\nimport Utils from '../../utils/utils';\n\nconst Autoplay = {\n  run() {\n    const swiper = this;\n    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    let delay = swiper.params.autoplay.delay;\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = Utils.nextTick(() => {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start() {\n    const swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop() {\n    const swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause(speed) {\n    const swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n};\n\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      autoplay: {\n        running: false,\n        paused: false,\n        run: Autoplay.run.bind(swiper),\n        start: Autoplay.start.bind(swiper),\n        stop: Autoplay.stop.bind(swiper),\n        pause: Autoplay.pause.bind(swiper),\n        onVisibilityChange() {\n          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n            swiper.autoplay.pause();\n          }\n          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n            swiper.autoplay.run();\n            swiper.autoplay.paused = false;\n          }\n        },\n        onTransitionEnd(e) {\n          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n          swiper.autoplay.paused = false;\n          if (!swiper.autoplay.running) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.run();\n          }\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart(speed, internal) {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd() {\n      const swiper = this;\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\n\nconst Fade = {\n  setTranslate() {\n    const swiper = this;\n    const { slides } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade\n        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl\n        .css({\n          opacity: slideOpacity,\n        })\n        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, $wrapperEl } = swiper;\n    slides.transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      slides.transitionEnd(() => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      fadeEffect: {\n        setTranslate: Fade.setTranslate.bind(swiper),\n        setTransition: Fade.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Browser from '../../utils/browser';\n\nconst Cube = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n    } = swiper;\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let $cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n        $cubeShadowEl.css({ height: `${swiperWidth}px` });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + (round * 4 * swiperSize);\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = (3 * swiperSize) + (swiperSize * 4 * round);\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = (slideIndex * 90) + (progress * 90);\n        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n      }\n      $slideEl.transform(transform);\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n    $wrapperEl.css({\n      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      'transform-origin': `50% 50% -${swiperSize / 2}px`,\n    });\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n      } else {\n        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n        const multiplier = 1.5 - (\n          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n        );\n        const scale1 = params.shadowScale;\n        const scale2 = params.shadowScale / multiplier;\n        const offset = params.shadowOffset;\n        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n      }\n    }\n    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n    $wrapperEl\n      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { $el, slides } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  },\n};\n\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      cubeEffect: {\n        setTranslate: Cube.setTranslate.bind(swiper),\n        setTransition: Cube.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Flip = {\n  setTranslate() {\n    const swiper = this;\n    const { slides, rtlTranslate: rtl } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let progress = $slideEl[0].progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n      const offset = $slideEl[0].swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n      $slideEl\n        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, activeIndex, $wrapperEl } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      // eslint-disable-next-line\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      flipEffect: {\n        setTranslate: Flip.setTranslate.bind(swiper),\n        setTransition: Flip.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Support from '../../utils/support';\nimport Utils from '../../utils/utils';\n\nconst Coverflow = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n    } = swiper;\n    const params = swiper.params.coverflowEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const transform = swiper.translate;\n    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\n    const translate = params.depth;\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const $slideEl = slides.eq(i);\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = $slideEl[0].swiperSlideOffset;\n      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n      }\n      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n      if (params.slideShadows) {\n        // Set shadows\n        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append($shadowBeforeEl);\n        }\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append($shadowAfterEl);\n        }\n        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n      }\n    }\n\n    // Set correct perspective for IE10\n    if (Support.pointerEvents || Support.prefixedPointerEvents) {\n      const ws = $wrapperEl[0].style;\n      ws.perspectiveOrigin = `${center}px 50%`;\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    swiper.slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n  },\n};\n\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      modifier: 1,\n      slideShadows: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      coverflowEffect: {\n        setTranslate: Coverflow.setTranslate.bind(swiper),\n        setTransition: Coverflow.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n\n      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\nimport $ from '../../utils/dom';\n\nconst Thumbs = {\n  init() {\n    const swiper = this;\n    const { thumbs: thumbsParams } = swiper.params;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Utils.extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n      Utils.extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n    } else if (Utils.isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n  },\n  onThumbClick() {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      let currentIndex = swiper.activeIndex;\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix();\n        // eslint-disable-next-line\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n      else slideToIndex = prevIndex;\n    }\n    swiper.slideTo(slideToIndex);\n  },\n  update(initial) {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n      ? thumbsSwiper.slidesPerViewDynamic()\n      : thumbsSwiper.params.slidesPerView;\n\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      let currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix();\n          // eslint-disable-next-line\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        }\n        // Find actual thumbs index to slide to\n        const prevThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        const nextThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n        else newThumbsIndex = prevThumbsIndex;\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n      }\n    }\n  },\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      thumbs: {\n        swiper: null,\n        init: Thumbs.init.bind(swiper),\n        update: Thumbs.update.bind(swiper),\n        onThumbClick: Thumbs.onThumbClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      const { thumbs } = swiper.params;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy() {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    },\n  },\n};\n","// Swiper Class\nimport Swiper from './components/core/core-class';\n\n// Core Modules\nimport Device from './modules/device/device';\nimport Support from './modules/support/support';\nimport Browser from './modules/browser/browser';\nimport Resize from './modules/resize/resize';\nimport Observer from './modules/observer/observer';\n\n//IMPORT_COMPONENTS\n\nconst components = [\n  Device,\n  Support,\n  Browser,\n  Resize,\n  Observer,\n  //INSTALL_COMPONENTS\n];\n\nif (typeof Swiper.use === 'undefined') {\n  Swiper.use = Swiper.Class.use;\n  Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\n//EXPORT\n"],"names":["transition","transitionEnd","document","checkOverflow","Device","Support","Browser","Observer","Virtual"],"mappings":"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"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,7733 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, data, transform, transition as transition$1, on, off, trigger, transitionEnd as transitionEnd$1, outerWidth, outerHeight, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove, add, styles } from 'dom7/dist/dom7.modular';
14
+import { window, document as document$1 } from 'ssr-window';
15
+
16
+const Methods = {
17
+  addClass,
18
+  removeClass,
19
+  hasClass,
20
+  toggleClass,
21
+  attr,
22
+  removeAttr,
23
+  data,
24
+  transform,
25
+  transition: transition$1,
26
+  on,
27
+  off,
28
+  trigger,
29
+  transitionEnd: transitionEnd$1,
30
+  outerWidth,
31
+  outerHeight,
32
+  offset,
33
+  css,
34
+  each,
35
+  html,
36
+  text,
37
+  is,
38
+  index,
39
+  eq,
40
+  append,
41
+  prepend,
42
+  next,
43
+  nextAll,
44
+  prev,
45
+  prevAll,
46
+  parent,
47
+  parents,
48
+  closest,
49
+  find,
50
+  children,
51
+  filter,
52
+  remove,
53
+  add,
54
+  styles,
55
+};
56
+
57
+Object.keys(Methods).forEach((methodName) => {
58
+  $.fn[methodName] = $.fn[methodName] || Methods[methodName];
59
+});
60
+
61
+const Utils = {
62
+  deleteProps(obj) {
63
+    const object = obj;
64
+    Object.keys(object).forEach((key) => {
65
+      try {
66
+        object[key] = null;
67
+      } catch (e) {
68
+        // no getter for object
69
+      }
70
+      try {
71
+        delete object[key];
72
+      } catch (e) {
73
+        // something got wrong
74
+      }
75
+    });
76
+  },
77
+  nextTick(callback, delay = 0) {
78
+    return setTimeout(callback, delay);
79
+  },
80
+  now() {
81
+    return Date.now();
82
+  },
83
+  getTranslate(el, axis = 'x') {
84
+    let matrix;
85
+    let curTransform;
86
+    let transformMatrix;
87
+
88
+    const curStyle = window.getComputedStyle(el, null);
89
+
90
+    if (window.WebKitCSSMatrix) {
91
+      curTransform = curStyle.transform || curStyle.webkitTransform;
92
+      if (curTransform.split(',').length > 6) {
93
+        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
94
+      }
95
+      // Some old versions of Webkit choke when 'none' is passed; pass
96
+      // empty string instead in this case
97
+      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
98
+    } else {
99
+      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
100
+      matrix = transformMatrix.toString().split(',');
101
+    }
102
+
103
+    if (axis === 'x') {
104
+      // Latest Chrome and webkits Fix
105
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
106
+      // Crazy IE10 Matrix
107
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
108
+      // Normal Browsers
109
+      else curTransform = parseFloat(matrix[4]);
110
+    }
111
+    if (axis === 'y') {
112
+      // Latest Chrome and webkits Fix
113
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
114
+      // Crazy IE10 Matrix
115
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
116
+      // Normal Browsers
117
+      else curTransform = parseFloat(matrix[5]);
118
+    }
119
+    return curTransform || 0;
120
+  },
121
+  parseUrlQuery(url) {
122
+    const query = {};
123
+    let urlToParse = url || window.location.href;
124
+    let i;
125
+    let params;
126
+    let param;
127
+    let length;
128
+    if (typeof urlToParse === 'string' && urlToParse.length) {
129
+      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
130
+      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
131
+      length = params.length;
132
+
133
+      for (i = 0; i < length; i += 1) {
134
+        param = params[i].replace(/#\S+/g, '').split('=');
135
+        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
136
+      }
137
+    }
138
+    return query;
139
+  },
140
+  isObject(o) {
141
+    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
142
+  },
143
+  extend(...args) {
144
+    const to = Object(args[0]);
145
+    for (let i = 1; i < args.length; i += 1) {
146
+      const nextSource = args[i];
147
+      if (nextSource !== undefined && nextSource !== null) {
148
+        const keysArray = Object.keys(Object(nextSource));
149
+        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
150
+          const nextKey = keysArray[nextIndex];
151
+          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
152
+          if (desc !== undefined && desc.enumerable) {
153
+            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
154
+              Utils.extend(to[nextKey], nextSource[nextKey]);
155
+            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
156
+              to[nextKey] = {};
157
+              Utils.extend(to[nextKey], nextSource[nextKey]);
158
+            } else {
159
+              to[nextKey] = nextSource[nextKey];
160
+            }
161
+          }
162
+        }
163
+      }
164
+    }
165
+    return to;
166
+  },
167
+};
168
+
169
+const Support = (function Support() {
170
+  return {
171
+    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document$1 instanceof window.DocumentTouch)),
172
+
173
+    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,
174
+
175
+    observer: (function checkObserver() {
176
+      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);
177
+    }()),
178
+
179
+    passiveListener: (function checkPassiveListener() {
180
+      let supportsPassive = false;
181
+      try {
182
+        const opts = Object.defineProperty({}, 'passive', {
183
+          // eslint-disable-next-line
184
+          get() {
185
+            supportsPassive = true;
186
+          },
187
+        });
188
+        window.addEventListener('testPassiveListener', null, opts);
189
+      } catch (e) {
190
+        // No support
191
+      }
192
+      return supportsPassive;
193
+    }()),
194
+
195
+    gestures: (function checkGestures() {
196
+      return 'ongesturestart' in window;
197
+    }()),
198
+  };
199
+}());
200
+
201
+class SwiperClass {
202
+  constructor(params = {}) {
203
+    const self = this;
204
+    self.params = params;
205
+
206
+    // Events
207
+    self.eventsListeners = {};
208
+
209
+    if (self.params && self.params.on) {
210
+      Object.keys(self.params.on).forEach((eventName) => {
211
+        self.on(eventName, self.params.on[eventName]);
212
+      });
213
+    }
214
+  }
215
+
216
+  on(events, handler, priority) {
217
+    const self = this;
218
+    if (typeof handler !== 'function') return self;
219
+    const method = priority ? 'unshift' : 'push';
220
+    events.split(' ').forEach((event) => {
221
+      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
222
+      self.eventsListeners[event][method](handler);
223
+    });
224
+    return self;
225
+  }
226
+
227
+  once(events, handler, priority) {
228
+    const self = this;
229
+    if (typeof handler !== 'function') return self;
230
+    function onceHandler(...args) {
231
+      self.off(events, onceHandler);
232
+      if (onceHandler.f7proxy) {
233
+        delete onceHandler.f7proxy;
234
+      }
235
+      handler.apply(self, args);
236
+    }
237
+    onceHandler.f7proxy = handler;
238
+    return self.on(events, onceHandler, priority);
239
+  }
240
+
241
+  off(events, handler) {
242
+    const self = this;
243
+    if (!self.eventsListeners) return self;
244
+    events.split(' ').forEach((event) => {
245
+      if (typeof handler === 'undefined') {
246
+        self.eventsListeners[event] = [];
247
+      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
248
+        self.eventsListeners[event].forEach((eventHandler, index) => {
249
+          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
250
+            self.eventsListeners[event].splice(index, 1);
251
+          }
252
+        });
253
+      }
254
+    });
255
+    return self;
256
+  }
257
+
258
+  emit(...args) {
259
+    const self = this;
260
+    if (!self.eventsListeners) return self;
261
+    let events;
262
+    let data;
263
+    let context;
264
+    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
265
+      events = args[0];
266
+      data = args.slice(1, args.length);
267
+      context = self;
268
+    } else {
269
+      events = args[0].events;
270
+      data = args[0].data;
271
+      context = args[0].context || self;
272
+    }
273
+    const eventsArray = Array.isArray(events) ? events : events.split(' ');
274
+    eventsArray.forEach((event) => {
275
+      if (self.eventsListeners && self.eventsListeners[event]) {
276
+        const handlers = [];
277
+        self.eventsListeners[event].forEach((eventHandler) => {
278
+          handlers.push(eventHandler);
279
+        });
280
+        handlers.forEach((eventHandler) => {
281
+          eventHandler.apply(context, data);
282
+        });
283
+      }
284
+    });
285
+    return self;
286
+  }
287
+
288
+  useModulesParams(instanceParams) {
289
+    const instance = this;
290
+    if (!instance.modules) return;
291
+    Object.keys(instance.modules).forEach((moduleName) => {
292
+      const module = instance.modules[moduleName];
293
+      // Extend params
294
+      if (module.params) {
295
+        Utils.extend(instanceParams, module.params);
296
+      }
297
+    });
298
+  }
299
+
300
+  useModules(modulesParams = {}) {
301
+    const instance = this;
302
+    if (!instance.modules) return;
303
+    Object.keys(instance.modules).forEach((moduleName) => {
304
+      const module = instance.modules[moduleName];
305
+      const moduleParams = modulesParams[moduleName] || {};
306
+      // Extend instance methods and props
307
+      if (module.instance) {
308
+        Object.keys(module.instance).forEach((modulePropName) => {
309
+          const moduleProp = module.instance[modulePropName];
310
+          if (typeof moduleProp === 'function') {
311
+            instance[modulePropName] = moduleProp.bind(instance);
312
+          } else {
313
+            instance[modulePropName] = moduleProp;
314
+          }
315
+        });
316
+      }
317
+      // Add event listeners
318
+      if (module.on && instance.on) {
319
+        Object.keys(module.on).forEach((moduleEventName) => {
320
+          instance.on(moduleEventName, module.on[moduleEventName]);
321
+        });
322
+      }
323
+
324
+      // Module create callback
325
+      if (module.create) {
326
+        module.create.bind(instance)(moduleParams);
327
+      }
328
+    });
329
+  }
330
+
331
+  static set components(components) {
332
+    const Class = this;
333
+    if (!Class.use) return;
334
+    Class.use(components);
335
+  }
336
+
337
+  static installModule(module, ...params) {
338
+    const Class = this;
339
+    if (!Class.prototype.modules) Class.prototype.modules = {};
340
+    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);
341
+    Class.prototype.modules[name] = module;
342
+    // Prototype
343
+    if (module.proto) {
344
+      Object.keys(module.proto).forEach((key) => {
345
+        Class.prototype[key] = module.proto[key];
346
+      });
347
+    }
348
+    // Class
349
+    if (module.static) {
350
+      Object.keys(module.static).forEach((key) => {
351
+        Class[key] = module.static[key];
352
+      });
353
+    }
354
+    // Callback
355
+    if (module.install) {
356
+      module.install.apply(Class, params);
357
+    }
358
+    return Class;
359
+  }
360
+
361
+  static use(module, ...params) {
362
+    const Class = this;
363
+    if (Array.isArray(module)) {
364
+      module.forEach((m) => Class.installModule(m));
365
+      return Class;
366
+    }
367
+    return Class.installModule(module, ...params);
368
+  }
369
+}
370
+
371
+function updateSize () {
372
+  const swiper = this;
373
+  let width;
374
+  let height;
375
+  const $el = swiper.$el;
376
+  if (typeof swiper.params.width !== 'undefined') {
377
+    width = swiper.params.width;
378
+  } else {
379
+    width = $el[0].clientWidth;
380
+  }
381
+  if (typeof swiper.params.height !== 'undefined') {
382
+    height = swiper.params.height;
383
+  } else {
384
+    height = $el[0].clientHeight;
385
+  }
386
+  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
387
+    return;
388
+  }
389
+
390
+  // Subtract paddings
391
+  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
392
+  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
393
+
394
+  Utils.extend(swiper, {
395
+    width,
396
+    height,
397
+    size: swiper.isHorizontal() ? width : height,
398
+  });
399
+}
400
+
401
+function updateSlides () {
402
+  const swiper = this;
403
+  const params = swiper.params;
404
+
405
+  const {
406
+    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,
407
+  } = swiper;
408
+  const isVirtual = swiper.virtual && params.virtual.enabled;
409
+  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
410
+  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);
411
+  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
412
+  let snapGrid = [];
413
+  const slidesGrid = [];
414
+  const slidesSizesGrid = [];
415
+
416
+  function slidesForMargin(slideIndex) {
417
+    if (!params.cssMode) return true;
418
+    if (slideIndex === slides.length - 1) {
419
+      return false;
420
+    }
421
+    return true;
422
+  }
423
+
424
+  let offsetBefore = params.slidesOffsetBefore;
425
+  if (typeof offsetBefore === 'function') {
426
+    offsetBefore = params.slidesOffsetBefore.call(swiper);
427
+  }
428
+
429
+  let offsetAfter = params.slidesOffsetAfter;
430
+  if (typeof offsetAfter === 'function') {
431
+    offsetAfter = params.slidesOffsetAfter.call(swiper);
432
+  }
433
+
434
+  const previousSnapGridLength = swiper.snapGrid.length;
435
+  const previousSlidesGridLength = swiper.snapGrid.length;
436
+
437
+  let spaceBetween = params.spaceBetween;
438
+  let slidePosition = -offsetBefore;
439
+  let prevSlideSize = 0;
440
+  let index = 0;
441
+  if (typeof swiperSize === 'undefined') {
442
+    return;
443
+  }
444
+  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
445
+    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
446
+  }
447
+
448
+  swiper.virtualSize = -spaceBetween;
449
+
450
+  // reset margins
451
+  if (rtl) slides.css({ marginLeft: '', marginTop: '' });
452
+  else slides.css({ marginRight: '', marginBottom: '' });
453
+
454
+  let slidesNumberEvenToRows;
455
+  if (params.slidesPerColumn > 1) {
456
+    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
457
+      slidesNumberEvenToRows = slidesLength;
458
+    } else {
459
+      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
460
+    }
461
+    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
462
+      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
463
+    }
464
+  }
465
+
466
+  // Calc slides
467
+  let slideSize;
468
+  const slidesPerColumn = params.slidesPerColumn;
469
+  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
470
+  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
471
+  for (let i = 0; i < slidesLength; i += 1) {
472
+    slideSize = 0;
473
+    const slide = slides.eq(i);
474
+    if (params.slidesPerColumn > 1) {
475
+      // Set slides order
476
+      let newSlideOrderIndex;
477
+      let column;
478
+      let row;
479
+      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
480
+        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
481
+        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
482
+        const columnsInGroup = groupIndex === 0
483
+          ? params.slidesPerGroup
484
+          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
485
+        row = Math.floor(slideIndexInGroup / columnsInGroup);
486
+        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;
487
+
488
+        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
489
+        slide
490
+          .css({
491
+            '-webkit-box-ordinal-group': newSlideOrderIndex,
492
+            '-moz-box-ordinal-group': newSlideOrderIndex,
493
+            '-ms-flex-order': newSlideOrderIndex,
494
+            '-webkit-order': newSlideOrderIndex,
495
+            order: newSlideOrderIndex,
496
+          });
497
+      } else if (params.slidesPerColumnFill === 'column') {
498
+        column = Math.floor(i / slidesPerColumn);
499
+        row = i - (column * slidesPerColumn);
500
+        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
501
+          row += 1;
502
+          if (row >= slidesPerColumn) {
503
+            row = 0;
504
+            column += 1;
505
+          }
506
+        }
507
+      } else {
508
+        row = Math.floor(i / slidesPerRow);
509
+        column = i - (row * slidesPerRow);
510
+      }
511
+      slide.css(
512
+        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,
513
+        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)
514
+      );
515
+    }
516
+    if (slide.css('display') === 'none') continue; // eslint-disable-line
517
+
518
+    if (params.slidesPerView === 'auto') {
519
+      const slideStyles = window.getComputedStyle(slide[0], null);
520
+      const currentTransform = slide[0].style.transform;
521
+      const currentWebKitTransform = slide[0].style.webkitTransform;
522
+      if (currentTransform) {
523
+        slide[0].style.transform = 'none';
524
+      }
525
+      if (currentWebKitTransform) {
526
+        slide[0].style.webkitTransform = 'none';
527
+      }
528
+      if (params.roundLengths) {
529
+        slideSize = swiper.isHorizontal()
530
+          ? slide.outerWidth(true)
531
+          : slide.outerHeight(true);
532
+      } else {
533
+        // eslint-disable-next-line
534
+        if (swiper.isHorizontal()) {
535
+          const width = parseFloat(slideStyles.getPropertyValue('width'));
536
+          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
537
+          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
538
+          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
539
+          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
540
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
541
+          if (boxSizing && boxSizing === 'border-box') {
542
+            slideSize = width + marginLeft + marginRight;
543
+          } else {
544
+            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
545
+          }
546
+        } else {
547
+          const height = parseFloat(slideStyles.getPropertyValue('height'));
548
+          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
549
+          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
550
+          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
551
+          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
552
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
553
+          if (boxSizing && boxSizing === 'border-box') {
554
+            slideSize = height + marginTop + marginBottom;
555
+          } else {
556
+            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
557
+          }
558
+        }
559
+      }
560
+      if (currentTransform) {
561
+        slide[0].style.transform = currentTransform;
562
+      }
563
+      if (currentWebKitTransform) {
564
+        slide[0].style.webkitTransform = currentWebKitTransform;
565
+      }
566
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
567
+    } else {
568
+      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
569
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
570
+
571
+      if (slides[i]) {
572
+        if (swiper.isHorizontal()) {
573
+          slides[i].style.width = `${slideSize}px`;
574
+        } else {
575
+          slides[i].style.height = `${slideSize}px`;
576
+        }
577
+      }
578
+    }
579
+    if (slides[i]) {
580
+      slides[i].swiperSlideSize = slideSize;
581
+    }
582
+    slidesSizesGrid.push(slideSize);
583
+
584
+
585
+    if (params.centeredSlides) {
586
+      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
587
+      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
588
+      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
589
+      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
590
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
591
+      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
592
+      slidesGrid.push(slidePosition);
593
+    } else {
594
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
595
+      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
596
+      slidesGrid.push(slidePosition);
597
+      slidePosition = slidePosition + slideSize + spaceBetween;
598
+    }
599
+
600
+    swiper.virtualSize += slideSize + spaceBetween;
601
+
602
+    prevSlideSize = slideSize;
603
+
604
+    index += 1;
605
+  }
606
+  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
607
+  let newSlidesGrid;
608
+
609
+  if (
610
+    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
611
+    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
612
+  }
613
+  if (params.setWrapperSize) {
614
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
615
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
616
+  }
617
+
618
+  if (params.slidesPerColumn > 1) {
619
+    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
620
+    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
621
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
622
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
623
+    if (params.centeredSlides) {
624
+      newSlidesGrid = [];
625
+      for (let i = 0; i < snapGrid.length; i += 1) {
626
+        let slidesGridItem = snapGrid[i];
627
+        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
628
+        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
629
+      }
630
+      snapGrid = newSlidesGrid;
631
+    }
632
+  }
633
+
634
+  // Remove last grid elements depending on width
635
+  if (!params.centeredSlides) {
636
+    newSlidesGrid = [];
637
+    for (let i = 0; i < snapGrid.length; i += 1) {
638
+      let slidesGridItem = snapGrid[i];
639
+      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
640
+      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
641
+        newSlidesGrid.push(slidesGridItem);
642
+      }
643
+    }
644
+    snapGrid = newSlidesGrid;
645
+    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
646
+      snapGrid.push(swiper.virtualSize - swiperSize);
647
+    }
648
+  }
649
+  if (snapGrid.length === 0) snapGrid = [0];
650
+
651
+  if (params.spaceBetween !== 0) {
652
+    if (swiper.isHorizontal()) {
653
+      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });
654
+      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });
655
+    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });
656
+  }
657
+
658
+  if (params.centeredSlides && params.centeredSlidesBounds) {
659
+    let allSlidesSize = 0;
660
+    slidesSizesGrid.forEach((slideSizeValue) => {
661
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
662
+    });
663
+    allSlidesSize -= params.spaceBetween;
664
+    const maxSnap = allSlidesSize - swiperSize;
665
+    snapGrid = snapGrid.map((snap) => {
666
+      if (snap < 0) return -offsetBefore;
667
+      if (snap > maxSnap) return maxSnap + offsetAfter;
668
+      return snap;
669
+    });
670
+  }
671
+
672
+  if (params.centerInsufficientSlides) {
673
+    let allSlidesSize = 0;
674
+    slidesSizesGrid.forEach((slideSizeValue) => {
675
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
676
+    });
677
+    allSlidesSize -= params.spaceBetween;
678
+    if (allSlidesSize < swiperSize) {
679
+      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
680
+      snapGrid.forEach((snap, snapIndex) => {
681
+        snapGrid[snapIndex] = snap - allSlidesOffset;
682
+      });
683
+      slidesGrid.forEach((snap, snapIndex) => {
684
+        slidesGrid[snapIndex] = snap + allSlidesOffset;
685
+      });
686
+    }
687
+  }
688
+
689
+  Utils.extend(swiper, {
690
+    slides,
691
+    snapGrid,
692
+    slidesGrid,
693
+    slidesSizesGrid,
694
+  });
695
+
696
+  if (slidesLength !== previousSlidesLength) {
697
+    swiper.emit('slidesLengthChange');
698
+  }
699
+  if (snapGrid.length !== previousSnapGridLength) {
700
+    if (swiper.params.watchOverflow) swiper.checkOverflow();
701
+    swiper.emit('snapGridLengthChange');
702
+  }
703
+  if (slidesGrid.length !== previousSlidesGridLength) {
704
+    swiper.emit('slidesGridLengthChange');
705
+  }
706
+
707
+  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
708
+    swiper.updateSlidesOffset();
709
+  }
710
+}
711
+
712
+function updateAutoHeight (speed) {
713
+  const swiper = this;
714
+  const activeSlides = [];
715
+  let newHeight = 0;
716
+  let i;
717
+  if (typeof speed === 'number') {
718
+    swiper.setTransition(speed);
719
+  } else if (speed === true) {
720
+    swiper.setTransition(swiper.params.speed);
721
+  }
722
+  // Find slides currently in view
723
+  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
724
+    if (swiper.params.centeredSlides) {
725
+      swiper.visibleSlides.each((index, slide) => {
726
+        activeSlides.push(slide);
727
+      });
728
+    } else {
729
+      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
730
+        const index = swiper.activeIndex + i;
731
+        if (index > swiper.slides.length) break;
732
+        activeSlides.push(swiper.slides.eq(index)[0]);
733
+      }
734
+    }
735
+  } else {
736
+    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
737
+  }
738
+
739
+  // Find new height from highest slide in view
740
+  for (i = 0; i < activeSlides.length; i += 1) {
741
+    if (typeof activeSlides[i] !== 'undefined') {
742
+      const height = activeSlides[i].offsetHeight;
743
+      newHeight = height > newHeight ? height : newHeight;
744
+    }
745
+  }
746
+
747
+  // Update Height
748
+  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);
749
+}
750
+
751
+function updateSlidesOffset () {
752
+  const swiper = this;
753
+  const slides = swiper.slides;
754
+  for (let i = 0; i < slides.length; i += 1) {
755
+    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
756
+  }
757
+}
758
+
759
+function updateSlidesProgress (translate = (this && this.translate) || 0) {
760
+  const swiper = this;
761
+  const params = swiper.params;
762
+
763
+  const { slides, rtlTranslate: rtl } = swiper;
764
+
765
+  if (slides.length === 0) return;
766
+  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
767
+
768
+  let offsetCenter = -translate;
769
+  if (rtl) offsetCenter = translate;
770
+
771
+  // Visible Slides
772
+  slides.removeClass(params.slideVisibleClass);
773
+
774
+  swiper.visibleSlidesIndexes = [];
775
+  swiper.visibleSlides = [];
776
+
777
+  for (let i = 0; i < slides.length; i += 1) {
778
+    const slide = slides[i];
779
+    const slideProgress = (
780
+      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
781
+    ) / (slide.swiperSlideSize + params.spaceBetween);
782
+    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
783
+      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);
784
+      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
785
+      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
786
+                || (slideAfter > 1 && slideAfter <= swiper.size)
787
+                || (slideBefore <= 0 && slideAfter >= swiper.size);
788
+      if (isVisible) {
789
+        swiper.visibleSlides.push(slide);
790
+        swiper.visibleSlidesIndexes.push(i);
791
+        slides.eq(i).addClass(params.slideVisibleClass);
792
+      }
793
+    }
794
+    slide.progress = rtl ? -slideProgress : slideProgress;
795
+  }
796
+  swiper.visibleSlides = $(swiper.visibleSlides);
797
+}
798
+
799
+function updateProgress (translate) {
800
+  const swiper = this;
801
+  if (typeof translate === 'undefined') {
802
+    const multiplier = swiper.rtlTranslate ? -1 : 1;
803
+    // eslint-disable-next-line
804
+    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
805
+  }
806
+  const params = swiper.params;
807
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
808
+  let { progress, isBeginning, isEnd } = swiper;
809
+  const wasBeginning = isBeginning;
810
+  const wasEnd = isEnd;
811
+  if (translatesDiff === 0) {
812
+    progress = 0;
813
+    isBeginning = true;
814
+    isEnd = true;
815
+  } else {
816
+    progress = (translate - swiper.minTranslate()) / (translatesDiff);
817
+    isBeginning = progress <= 0;
818
+    isEnd = progress >= 1;
819
+  }
820
+  Utils.extend(swiper, {
821
+    progress,
822
+    isBeginning,
823
+    isEnd,
824
+  });
825
+
826
+  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);
827
+
828
+  if (isBeginning && !wasBeginning) {
829
+    swiper.emit('reachBeginning toEdge');
830
+  }
831
+  if (isEnd && !wasEnd) {
832
+    swiper.emit('reachEnd toEdge');
833
+  }
834
+  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
835
+    swiper.emit('fromEdge');
836
+  }
837
+
838
+  swiper.emit('progress', progress);
839
+}
840
+
841
+function updateSlidesClasses () {
842
+  const swiper = this;
843
+
844
+  const {
845
+    slides, params, $wrapperEl, activeIndex, realIndex,
846
+  } = swiper;
847
+  const isVirtual = swiper.virtual && params.virtual.enabled;
848
+
849
+  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);
850
+
851
+  let activeSlide;
852
+  if (isVirtual) {
853
+    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`);
854
+  } else {
855
+    activeSlide = slides.eq(activeIndex);
856
+  }
857
+
858
+  // Active classes
859
+  activeSlide.addClass(params.slideActiveClass);
860
+
861
+  if (params.loop) {
862
+    // Duplicate to all looped slides
863
+    if (activeSlide.hasClass(params.slideDuplicateClass)) {
864
+      $wrapperEl
865
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`)
866
+        .addClass(params.slideDuplicateActiveClass);
867
+    } else {
868
+      $wrapperEl
869
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`)
870
+        .addClass(params.slideDuplicateActiveClass);
871
+    }
872
+  }
873
+  // Next Slide
874
+  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);
875
+  if (params.loop && nextSlide.length === 0) {
876
+    nextSlide = slides.eq(0);
877
+    nextSlide.addClass(params.slideNextClass);
878
+  }
879
+  // Prev Slide
880
+  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);
881
+  if (params.loop && prevSlide.length === 0) {
882
+    prevSlide = slides.eq(-1);
883
+    prevSlide.addClass(params.slidePrevClass);
884
+  }
885
+  if (params.loop) {
886
+    // Duplicate to all looped slides
887
+    if (nextSlide.hasClass(params.slideDuplicateClass)) {
888
+      $wrapperEl
889
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
890
+        .addClass(params.slideDuplicateNextClass);
891
+    } else {
892
+      $wrapperEl
893
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
894
+        .addClass(params.slideDuplicateNextClass);
895
+    }
896
+    if (prevSlide.hasClass(params.slideDuplicateClass)) {
897
+      $wrapperEl
898
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
899
+        .addClass(params.slideDuplicatePrevClass);
900
+    } else {
901
+      $wrapperEl
902
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
903
+        .addClass(params.slideDuplicatePrevClass);
904
+    }
905
+  }
906
+}
907
+
908
+function updateActiveIndex (newActiveIndex) {
909
+  const swiper = this;
910
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
911
+  const {
912
+    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,
913
+  } = swiper;
914
+  let activeIndex = newActiveIndex;
915
+  let snapIndex;
916
+  if (typeof activeIndex === 'undefined') {
917
+    for (let i = 0; i < slidesGrid.length; i += 1) {
918
+      if (typeof slidesGrid[i + 1] !== 'undefined') {
919
+        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
920
+          activeIndex = i;
921
+        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
922
+          activeIndex = i + 1;
923
+        }
924
+      } else if (translate >= slidesGrid[i]) {
925
+        activeIndex = i;
926
+      }
927
+    }
928
+    // Normalize slideIndex
929
+    if (params.normalizeSlideIndex) {
930
+      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
931
+    }
932
+  }
933
+  if (snapGrid.indexOf(translate) >= 0) {
934
+    snapIndex = snapGrid.indexOf(translate);
935
+  } else {
936
+    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
937
+    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
938
+  }
939
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
940
+  if (activeIndex === previousIndex) {
941
+    if (snapIndex !== previousSnapIndex) {
942
+      swiper.snapIndex = snapIndex;
943
+      swiper.emit('snapIndexChange');
944
+    }
945
+    return;
946
+  }
947
+
948
+  // Get real index
949
+  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
950
+
951
+  Utils.extend(swiper, {
952
+    snapIndex,
953
+    realIndex,
954
+    previousIndex,
955
+    activeIndex,
956
+  });
957
+  swiper.emit('activeIndexChange');
958
+  swiper.emit('snapIndexChange');
959
+  if (previousRealIndex !== realIndex) {
960
+    swiper.emit('realIndexChange');
961
+  }
962
+  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
963
+    swiper.emit('slideChange');
964
+  }
965
+}
966
+
967
+function updateClickedSlide (e) {
968
+  const swiper = this;
969
+  const params = swiper.params;
970
+  const slide = $(e.target).closest(`.${params.slideClass}`)[0];
971
+  let slideFound = false;
972
+  if (slide) {
973
+    for (let i = 0; i < swiper.slides.length; i += 1) {
974
+      if (swiper.slides[i] === slide) slideFound = true;
975
+    }
976
+  }
977
+
978
+  if (slide && slideFound) {
979
+    swiper.clickedSlide = slide;
980
+    if (swiper.virtual && swiper.params.virtual.enabled) {
981
+      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
982
+    } else {
983
+      swiper.clickedIndex = $(slide).index();
984
+    }
985
+  } else {
986
+    swiper.clickedSlide = undefined;
987
+    swiper.clickedIndex = undefined;
988
+    return;
989
+  }
990
+  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
991
+    swiper.slideToClickedSlide();
992
+  }
993
+}
994
+
995
+var update = {
996
+  updateSize,
997
+  updateSlides,
998
+  updateAutoHeight,
999
+  updateSlidesOffset,
1000
+  updateSlidesProgress,
1001
+  updateProgress,
1002
+  updateSlidesClasses,
1003
+  updateActiveIndex,
1004
+  updateClickedSlide,
1005
+};
1006
+
1007
+function getTranslate (axis = this.isHorizontal() ? 'x' : 'y') {
1008
+  const swiper = this;
1009
+
1010
+  const {
1011
+    params, rtlTranslate: rtl, translate, $wrapperEl,
1012
+  } = swiper;
1013
+
1014
+  if (params.virtualTranslate) {
1015
+    return rtl ? -translate : translate;
1016
+  }
1017
+  if (params.cssMode) {
1018
+    return translate;
1019
+  }
1020
+
1021
+  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
1022
+  if (rtl) currentTranslate = -currentTranslate;
1023
+
1024
+  return currentTranslate || 0;
1025
+}
1026
+
1027
+function setTranslate (translate, byController) {
1028
+  const swiper = this;
1029
+  const {
1030
+    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,
1031
+  } = swiper;
1032
+  let x = 0;
1033
+  let y = 0;
1034
+  const z = 0;
1035
+
1036
+  if (swiper.isHorizontal()) {
1037
+    x = rtl ? -translate : translate;
1038
+  } else {
1039
+    y = translate;
1040
+  }
1041
+
1042
+  if (params.roundLengths) {
1043
+    x = Math.floor(x);
1044
+    y = Math.floor(y);
1045
+  }
1046
+
1047
+  if (params.cssMode) {
1048
+    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1049
+  } else if (!params.virtualTranslate) {
1050
+    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
1051
+  }
1052
+  swiper.previousTranslate = swiper.translate;
1053
+  swiper.translate = swiper.isHorizontal() ? x : y;
1054
+
1055
+  // Check if we need to update progress
1056
+  let newProgress;
1057
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1058
+  if (translatesDiff === 0) {
1059
+    newProgress = 0;
1060
+  } else {
1061
+    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
1062
+  }
1063
+  if (newProgress !== progress) {
1064
+    swiper.updateProgress(translate);
1065
+  }
1066
+
1067
+  swiper.emit('setTranslate', swiper.translate, byController);
1068
+}
1069
+
1070
+function minTranslate () {
1071
+  return (-this.snapGrid[0]);
1072
+}
1073
+
1074
+function maxTranslate () {
1075
+  return (-this.snapGrid[this.snapGrid.length - 1]);
1076
+}
1077
+
1078
+function translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
1079
+  const swiper = this;
1080
+
1081
+  const {
1082
+    params,
1083
+    wrapperEl,
1084
+  } = swiper;
1085
+
1086
+  if (swiper.animating && params.preventInteractionOnTransition) {
1087
+    return false;
1088
+  }
1089
+
1090
+  const minTranslate = swiper.minTranslate();
1091
+  const maxTranslate = swiper.maxTranslate();
1092
+  let newTranslate;
1093
+  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
1094
+  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
1095
+  else newTranslate = translate;
1096
+
1097
+  // Update progress
1098
+  swiper.updateProgress(newTranslate);
1099
+
1100
+  if (params.cssMode) {
1101
+    const isH = swiper.isHorizontal();
1102
+    if (speed === 0) {
1103
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1104
+    } else {
1105
+      // eslint-disable-next-line
1106
+      if (wrapperEl.scrollTo) {
1107
+        wrapperEl.scrollTo({
1108
+          [isH ? 'left' : 'top']: -newTranslate,
1109
+          behavior: 'smooth',
1110
+        });
1111
+      } else {
1112
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1113
+      }
1114
+    }
1115
+    return true;
1116
+  }
1117
+
1118
+  if (speed === 0) {
1119
+    swiper.setTransition(0);
1120
+    swiper.setTranslate(newTranslate);
1121
+    if (runCallbacks) {
1122
+      swiper.emit('beforeTransitionStart', speed, internal);
1123
+      swiper.emit('transitionEnd');
1124
+    }
1125
+  } else {
1126
+    swiper.setTransition(speed);
1127
+    swiper.setTranslate(newTranslate);
1128
+    if (runCallbacks) {
1129
+      swiper.emit('beforeTransitionStart', speed, internal);
1130
+      swiper.emit('transitionStart');
1131
+    }
1132
+    if (!swiper.animating) {
1133
+      swiper.animating = true;
1134
+      if (!swiper.onTranslateToWrapperTransitionEnd) {
1135
+        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
1136
+          if (!swiper || swiper.destroyed) return;
1137
+          if (e.target !== this) return;
1138
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1139
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1140
+          swiper.onTranslateToWrapperTransitionEnd = null;
1141
+          delete swiper.onTranslateToWrapperTransitionEnd;
1142
+          if (runCallbacks) {
1143
+            swiper.emit('transitionEnd');
1144
+          }
1145
+        };
1146
+      }
1147
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1148
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
1149
+    }
1150
+  }
1151
+
1152
+  return true;
1153
+}
1154
+
1155
+var translate = {
1156
+  getTranslate,
1157
+  setTranslate,
1158
+  minTranslate,
1159
+  maxTranslate,
1160
+  translateTo,
1161
+};
1162
+
1163
+function setTransition (duration, byController) {
1164
+  const swiper = this;
1165
+
1166
+  if (!swiper.params.cssMode) {
1167
+    swiper.$wrapperEl.transition(duration);
1168
+  }
1169
+
1170
+  swiper.emit('setTransition', duration, byController);
1171
+}
1172
+
1173
+function transitionStart (runCallbacks = true, direction) {
1174
+  const swiper = this;
1175
+  const { activeIndex, params, previousIndex } = swiper;
1176
+  if (params.cssMode) return;
1177
+  if (params.autoHeight) {
1178
+    swiper.updateAutoHeight();
1179
+  }
1180
+
1181
+  let dir = direction;
1182
+  if (!dir) {
1183
+    if (activeIndex > previousIndex) dir = 'next';
1184
+    else if (activeIndex < previousIndex) dir = 'prev';
1185
+    else dir = 'reset';
1186
+  }
1187
+
1188
+  swiper.emit('transitionStart');
1189
+
1190
+  if (runCallbacks && activeIndex !== previousIndex) {
1191
+    if (dir === 'reset') {
1192
+      swiper.emit('slideResetTransitionStart');
1193
+      return;
1194
+    }
1195
+    swiper.emit('slideChangeTransitionStart');
1196
+    if (dir === 'next') {
1197
+      swiper.emit('slideNextTransitionStart');
1198
+    } else {
1199
+      swiper.emit('slidePrevTransitionStart');
1200
+    }
1201
+  }
1202
+}
1203
+
1204
+function transitionEnd (runCallbacks = true, direction) {
1205
+  const swiper = this;
1206
+  const { activeIndex, previousIndex, params } = swiper;
1207
+  swiper.animating = false;
1208
+  if (params.cssMode) return;
1209
+  swiper.setTransition(0);
1210
+
1211
+  let dir = direction;
1212
+  if (!dir) {
1213
+    if (activeIndex > previousIndex) dir = 'next';
1214
+    else if (activeIndex < previousIndex) dir = 'prev';
1215
+    else dir = 'reset';
1216
+  }
1217
+
1218
+  swiper.emit('transitionEnd');
1219
+
1220
+  if (runCallbacks && activeIndex !== previousIndex) {
1221
+    if (dir === 'reset') {
1222
+      swiper.emit('slideResetTransitionEnd');
1223
+      return;
1224
+    }
1225
+    swiper.emit('slideChangeTransitionEnd');
1226
+    if (dir === 'next') {
1227
+      swiper.emit('slideNextTransitionEnd');
1228
+    } else {
1229
+      swiper.emit('slidePrevTransitionEnd');
1230
+    }
1231
+  }
1232
+}
1233
+
1234
+var transition = {
1235
+  setTransition,
1236
+  transitionStart,
1237
+  transitionEnd,
1238
+};
1239
+
1240
+function slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
1241
+  const swiper = this;
1242
+  let slideIndex = index;
1243
+  if (slideIndex < 0) slideIndex = 0;
1244
+
1245
+  const {
1246
+    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,
1247
+  } = swiper;
1248
+  if (swiper.animating && params.preventInteractionOnTransition) {
1249
+    return false;
1250
+  }
1251
+
1252
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
1253
+  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
1254
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1255
+
1256
+  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
1257
+    swiper.emit('beforeSlideChangeStart');
1258
+  }
1259
+
1260
+  const translate = -snapGrid[snapIndex];
1261
+
1262
+  // Update progress
1263
+  swiper.updateProgress(translate);
1264
+
1265
+  // Normalize slideIndex
1266
+  if (params.normalizeSlideIndex) {
1267
+    for (let i = 0; i < slidesGrid.length; i += 1) {
1268
+      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
1269
+        slideIndex = i;
1270
+      }
1271
+    }
1272
+  }
1273
+  // Directions locks
1274
+  if (swiper.initialized && slideIndex !== activeIndex) {
1275
+    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
1276
+      return false;
1277
+    }
1278
+    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
1279
+      if ((activeIndex || 0) !== slideIndex) return false;
1280
+    }
1281
+  }
1282
+
1283
+  let direction;
1284
+  if (slideIndex > activeIndex) direction = 'next';
1285
+  else if (slideIndex < activeIndex) direction = 'prev';
1286
+  else direction = 'reset';
1287
+
1288
+
1289
+  // Update Index
1290
+  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
1291
+    swiper.updateActiveIndex(slideIndex);
1292
+    // Update Height
1293
+    if (params.autoHeight) {
1294
+      swiper.updateAutoHeight();
1295
+    }
1296
+    swiper.updateSlidesClasses();
1297
+    if (params.effect !== 'slide') {
1298
+      swiper.setTranslate(translate);
1299
+    }
1300
+    if (direction !== 'reset') {
1301
+      swiper.transitionStart(runCallbacks, direction);
1302
+      swiper.transitionEnd(runCallbacks, direction);
1303
+    }
1304
+    return false;
1305
+  }
1306
+  if (params.cssMode) {
1307
+    const isH = swiper.isHorizontal();
1308
+    let t = -translate;
1309
+    if (rtl) {
1310
+      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
1311
+    }
1312
+    if (speed === 0) {
1313
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1314
+    } else {
1315
+      // eslint-disable-next-line
1316
+      if (wrapperEl.scrollTo) {
1317
+        wrapperEl.scrollTo({
1318
+          [isH ? 'left' : 'top']: t,
1319
+          behavior: 'smooth',
1320
+        });
1321
+      } else {
1322
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1323
+      }
1324
+    }
1325
+    return true;
1326
+  }
1327
+
1328
+  if (speed === 0) {
1329
+    swiper.setTransition(0);
1330
+    swiper.setTranslate(translate);
1331
+    swiper.updateActiveIndex(slideIndex);
1332
+    swiper.updateSlidesClasses();
1333
+    swiper.emit('beforeTransitionStart', speed, internal);
1334
+    swiper.transitionStart(runCallbacks, direction);
1335
+    swiper.transitionEnd(runCallbacks, direction);
1336
+  } else {
1337
+    swiper.setTransition(speed);
1338
+    swiper.setTranslate(translate);
1339
+    swiper.updateActiveIndex(slideIndex);
1340
+    swiper.updateSlidesClasses();
1341
+    swiper.emit('beforeTransitionStart', speed, internal);
1342
+    swiper.transitionStart(runCallbacks, direction);
1343
+    if (!swiper.animating) {
1344
+      swiper.animating = true;
1345
+      if (!swiper.onSlideToWrapperTransitionEnd) {
1346
+        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
1347
+          if (!swiper || swiper.destroyed) return;
1348
+          if (e.target !== this) return;
1349
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1350
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
1351
+          swiper.onSlideToWrapperTransitionEnd = null;
1352
+          delete swiper.onSlideToWrapperTransitionEnd;
1353
+          swiper.transitionEnd(runCallbacks, direction);
1354
+        };
1355
+      }
1356
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1357
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
1358
+    }
1359
+  }
1360
+
1361
+  return true;
1362
+}
1363
+
1364
+function slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
1365
+  const swiper = this;
1366
+  let newIndex = index;
1367
+  if (swiper.params.loop) {
1368
+    newIndex += swiper.loopedSlides;
1369
+  }
1370
+
1371
+  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
1372
+}
1373
+
1374
+/* eslint no-unused-vars: "off" */
1375
+function slideNext (speed = this.params.speed, runCallbacks = true, internal) {
1376
+  const swiper = this;
1377
+  const { params, animating } = swiper;
1378
+  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
1379
+  if (params.loop) {
1380
+    if (animating) return false;
1381
+    swiper.loopFix();
1382
+    // eslint-disable-next-line
1383
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
1384
+  }
1385
+  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
1386
+}
1387
+
1388
+/* eslint no-unused-vars: "off" */
1389
+function slidePrev (speed = this.params.speed, runCallbacks = true, internal) {
1390
+  const swiper = this;
1391
+  const {
1392
+    params, animating, snapGrid, slidesGrid, rtlTranslate,
1393
+  } = swiper;
1394
+
1395
+  if (params.loop) {
1396
+    if (animating) return false;
1397
+    swiper.loopFix();
1398
+    // eslint-disable-next-line
1399
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
1400
+  }
1401
+  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
1402
+  function normalize(val) {
1403
+    if (val < 0) return -Math.floor(Math.abs(val));
1404
+    return Math.floor(val);
1405
+  }
1406
+  const normalizedTranslate = normalize(translate);
1407
+  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
1408
+  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));
1409
+
1410
+  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
1411
+  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
1412
+  if (typeof prevSnap === 'undefined' && params.cssMode) {
1413
+    snapGrid.forEach((snap) => {
1414
+      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
1415
+    });
1416
+  }
1417
+  let prevIndex;
1418
+  if (typeof prevSnap !== 'undefined') {
1419
+    prevIndex = slidesGrid.indexOf(prevSnap);
1420
+    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
1421
+  }
1422
+  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
1423
+}
1424
+
1425
+/* eslint no-unused-vars: "off" */
1426
+function slideReset (speed = this.params.speed, runCallbacks = true, internal) {
1427
+  const swiper = this;
1428
+  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
1429
+}
1430
+
1431
+/* eslint no-unused-vars: "off" */
1432
+function slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
1433
+  const swiper = this;
1434
+  let index = swiper.activeIndex;
1435
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
1436
+  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
1437
+
1438
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1439
+
1440
+  if (translate >= swiper.snapGrid[snapIndex]) {
1441
+    // The current translate is on or after the current snap index, so the choice
1442
+    // is between the current index and the one after it.
1443
+    const currentSnap = swiper.snapGrid[snapIndex];
1444
+    const nextSnap = swiper.snapGrid[snapIndex + 1];
1445
+    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
1446
+      index += swiper.params.slidesPerGroup;
1447
+    }
1448
+  } else {
1449
+    // The current translate is before the current snap index, so the choice
1450
+    // is between the current index and the one before it.
1451
+    const prevSnap = swiper.snapGrid[snapIndex - 1];
1452
+    const currentSnap = swiper.snapGrid[snapIndex];
1453
+    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {
1454
+      index -= swiper.params.slidesPerGroup;
1455
+    }
1456
+  }
1457
+  index = Math.max(index, 0);
1458
+  index = Math.min(index, swiper.slidesGrid.length - 1);
1459
+
1460
+  return swiper.slideTo(index, speed, runCallbacks, internal);
1461
+}
1462
+
1463
+function slideToClickedSlide () {
1464
+  const swiper = this;
1465
+  const { params, $wrapperEl } = swiper;
1466
+
1467
+  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
1468
+  let slideToIndex = swiper.clickedIndex;
1469
+  let realIndex;
1470
+  if (params.loop) {
1471
+    if (swiper.animating) return;
1472
+    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
1473
+    if (params.centeredSlides) {
1474
+      if (
1475
+        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
1476
+        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
1477
+      ) {
1478
+        swiper.loopFix();
1479
+        slideToIndex = $wrapperEl
1480
+          .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
1481
+          .eq(0)
1482
+          .index();
1483
+
1484
+        Utils.nextTick(() => {
1485
+          swiper.slideTo(slideToIndex);
1486
+        });
1487
+      } else {
1488
+        swiper.slideTo(slideToIndex);
1489
+      }
1490
+    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
1491
+      swiper.loopFix();
1492
+      slideToIndex = $wrapperEl
1493
+        .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
1494
+        .eq(0)
1495
+        .index();
1496
+
1497
+      Utils.nextTick(() => {
1498
+        swiper.slideTo(slideToIndex);
1499
+      });
1500
+    } else {
1501
+      swiper.slideTo(slideToIndex);
1502
+    }
1503
+  } else {
1504
+    swiper.slideTo(slideToIndex);
1505
+  }
1506
+}
1507
+
1508
+var slide = {
1509
+  slideTo,
1510
+  slideToLoop,
1511
+  slideNext,
1512
+  slidePrev,
1513
+  slideReset,
1514
+  slideToClosest,
1515
+  slideToClickedSlide,
1516
+};
1517
+
1518
+function loopCreate () {
1519
+  const swiper = this;
1520
+  const { params, $wrapperEl } = swiper;
1521
+  // Remove duplicated slides
1522
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();
1523
+
1524
+  let slides = $wrapperEl.children(`.${params.slideClass}`);
1525
+
1526
+  if (params.loopFillGroupWithBlank) {
1527
+    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
1528
+    if (blankSlidesNum !== params.slidesPerGroup) {
1529
+      for (let i = 0; i < blankSlidesNum; i += 1) {
1530
+        const blankNode = $(document$1.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);
1531
+        $wrapperEl.append(blankNode);
1532
+      }
1533
+      slides = $wrapperEl.children(`.${params.slideClass}`);
1534
+    }
1535
+  }
1536
+
1537
+  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
1538
+
1539
+  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
1540
+  swiper.loopedSlides += params.loopAdditionalSlides;
1541
+  if (swiper.loopedSlides > slides.length) {
1542
+    swiper.loopedSlides = slides.length;
1543
+  }
1544
+
1545
+  const prependSlides = [];
1546
+  const appendSlides = [];
1547
+  slides.each((index, el) => {
1548
+    const slide = $(el);
1549
+    if (index < swiper.loopedSlides) appendSlides.push(el);
1550
+    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
1551
+    slide.attr('data-swiper-slide-index', index);
1552
+  });
1553
+  for (let i = 0; i < appendSlides.length; i += 1) {
1554
+    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
1555
+  }
1556
+  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {
1557
+    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
1558
+  }
1559
+}
1560
+
1561
+function loopFix () {
1562
+  const swiper = this;
1563
+
1564
+  swiper.emit('beforeLoopFix');
1565
+
1566
+  const {
1567
+    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,
1568
+  } = swiper;
1569
+  let newIndex;
1570
+  swiper.allowSlidePrev = true;
1571
+  swiper.allowSlideNext = true;
1572
+
1573
+  const snapTranslate = -snapGrid[activeIndex];
1574
+  const diff = snapTranslate - swiper.getTranslate();
1575
+
1576
+  // Fix For Negative Oversliding
1577
+  if (activeIndex < loopedSlides) {
1578
+    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
1579
+    newIndex += loopedSlides;
1580
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
1581
+    if (slideChanged && diff !== 0) {
1582
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
1583
+    }
1584
+  } else if (activeIndex >= slides.length - loopedSlides) {
1585
+    // Fix For Positive Oversliding
1586
+    newIndex = -slides.length + activeIndex + loopedSlides;
1587
+    newIndex += loopedSlides;
1588
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
1589
+    if (slideChanged && diff !== 0) {
1590
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
1591
+    }
1592
+  }
1593
+  swiper.allowSlidePrev = allowSlidePrev;
1594
+  swiper.allowSlideNext = allowSlideNext;
1595
+
1596
+  swiper.emit('loopFix');
1597
+}
1598
+
1599
+function loopDestroy () {
1600
+  const swiper = this;
1601
+  const { $wrapperEl, params, slides } = swiper;
1602
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();
1603
+  slides.removeAttr('data-swiper-slide-index');
1604
+}
1605
+
1606
+var loop = {
1607
+  loopCreate,
1608
+  loopFix,
1609
+  loopDestroy,
1610
+};
1611
+
1612
+function setGrabCursor (moving) {
1613
+  const swiper = this;
1614
+  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
1615
+  const el = swiper.el;
1616
+  el.style.cursor = 'move';
1617
+  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
1618
+  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
1619
+  el.style.cursor = moving ? 'grabbing' : 'grab';
1620
+}
1621
+
1622
+function unsetGrabCursor () {
1623
+  const swiper = this;
1624
+  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
1625
+  swiper.el.style.cursor = '';
1626
+}
1627
+
1628
+var grabCursor = {
1629
+  setGrabCursor,
1630
+  unsetGrabCursor,
1631
+};
1632
+
1633
+function appendSlide (slides) {
1634
+  const swiper = this;
1635
+  const { $wrapperEl, params } = swiper;
1636
+  if (params.loop) {
1637
+    swiper.loopDestroy();
1638
+  }
1639
+  if (typeof slides === 'object' && 'length' in slides) {
1640
+    for (let i = 0; i < slides.length; i += 1) {
1641
+      if (slides[i]) $wrapperEl.append(slides[i]);
1642
+    }
1643
+  } else {
1644
+    $wrapperEl.append(slides);
1645
+  }
1646
+  if (params.loop) {
1647
+    swiper.loopCreate();
1648
+  }
1649
+  if (!(params.observer && Support.observer)) {
1650
+    swiper.update();
1651
+  }
1652
+}
1653
+
1654
+function prependSlide (slides) {
1655
+  const swiper = this;
1656
+  const { params, $wrapperEl, activeIndex } = swiper;
1657
+
1658
+  if (params.loop) {
1659
+    swiper.loopDestroy();
1660
+  }
1661
+  let newActiveIndex = activeIndex + 1;
1662
+  if (typeof slides === 'object' && 'length' in slides) {
1663
+    for (let i = 0; i < slides.length; i += 1) {
1664
+      if (slides[i]) $wrapperEl.prepend(slides[i]);
1665
+    }
1666
+    newActiveIndex = activeIndex + slides.length;
1667
+  } else {
1668
+    $wrapperEl.prepend(slides);
1669
+  }
1670
+  if (params.loop) {
1671
+    swiper.loopCreate();
1672
+  }
1673
+  if (!(params.observer && Support.observer)) {
1674
+    swiper.update();
1675
+  }
1676
+  swiper.slideTo(newActiveIndex, 0, false);
1677
+}
1678
+
1679
+function addSlide (index, slides) {
1680
+  const swiper = this;
1681
+  const { $wrapperEl, params, activeIndex } = swiper;
1682
+  let activeIndexBuffer = activeIndex;
1683
+  if (params.loop) {
1684
+    activeIndexBuffer -= swiper.loopedSlides;
1685
+    swiper.loopDestroy();
1686
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
1687
+  }
1688
+  const baseLength = swiper.slides.length;
1689
+  if (index <= 0) {
1690
+    swiper.prependSlide(slides);
1691
+    return;
1692
+  }
1693
+  if (index >= baseLength) {
1694
+    swiper.appendSlide(slides);
1695
+    return;
1696
+  }
1697
+  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
1698
+
1699
+  const slidesBuffer = [];
1700
+  for (let i = baseLength - 1; i >= index; i -= 1) {
1701
+    const currentSlide = swiper.slides.eq(i);
1702
+    currentSlide.remove();
1703
+    slidesBuffer.unshift(currentSlide);
1704
+  }
1705
+
1706
+  if (typeof slides === 'object' && 'length' in slides) {
1707
+    for (let i = 0; i < slides.length; i += 1) {
1708
+      if (slides[i]) $wrapperEl.append(slides[i]);
1709
+    }
1710
+    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
1711
+  } else {
1712
+    $wrapperEl.append(slides);
1713
+  }
1714
+
1715
+  for (let i = 0; i < slidesBuffer.length; i += 1) {
1716
+    $wrapperEl.append(slidesBuffer[i]);
1717
+  }
1718
+
1719
+  if (params.loop) {
1720
+    swiper.loopCreate();
1721
+  }
1722
+  if (!(params.observer && Support.observer)) {
1723
+    swiper.update();
1724
+  }
1725
+  if (params.loop) {
1726
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
1727
+  } else {
1728
+    swiper.slideTo(newActiveIndex, 0, false);
1729
+  }
1730
+}
1731
+
1732
+function removeSlide (slidesIndexes) {
1733
+  const swiper = this;
1734
+  const { params, $wrapperEl, activeIndex } = swiper;
1735
+
1736
+  let activeIndexBuffer = activeIndex;
1737
+  if (params.loop) {
1738
+    activeIndexBuffer -= swiper.loopedSlides;
1739
+    swiper.loopDestroy();
1740
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
1741
+  }
1742
+  let newActiveIndex = activeIndexBuffer;
1743
+  let indexToRemove;
1744
+
1745
+  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
1746
+    for (let i = 0; i < slidesIndexes.length; i += 1) {
1747
+      indexToRemove = slidesIndexes[i];
1748
+      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
1749
+      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
1750
+    }
1751
+    newActiveIndex = Math.max(newActiveIndex, 0);
1752
+  } else {
1753
+    indexToRemove = slidesIndexes;
1754
+    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
1755
+    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
1756
+    newActiveIndex = Math.max(newActiveIndex, 0);
1757
+  }
1758
+
1759
+  if (params.loop) {
1760
+    swiper.loopCreate();
1761
+  }
1762
+
1763
+  if (!(params.observer && Support.observer)) {
1764
+    swiper.update();
1765
+  }
1766
+  if (params.loop) {
1767
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
1768
+  } else {
1769
+    swiper.slideTo(newActiveIndex, 0, false);
1770
+  }
1771
+}
1772
+
1773
+function removeAllSlides () {
1774
+  const swiper = this;
1775
+
1776
+  const slidesIndexes = [];
1777
+  for (let i = 0; i < swiper.slides.length; i += 1) {
1778
+    slidesIndexes.push(i);
1779
+  }
1780
+  swiper.removeSlide(slidesIndexes);
1781
+}
1782
+
1783
+var manipulation = {
1784
+  appendSlide,
1785
+  prependSlide,
1786
+  addSlide,
1787
+  removeSlide,
1788
+  removeAllSlides,
1789
+};
1790
+
1791
+const Device = (function Device() {
1792
+  const platform = window.navigator.platform;
1793
+  const ua = window.navigator.userAgent;
1794
+
1795
+  const device = {
1796
+    ios: false,
1797
+    android: false,
1798
+    androidChrome: false,
1799
+    desktop: false,
1800
+    iphone: false,
1801
+    ipod: false,
1802
+    ipad: false,
1803
+    edge: false,
1804
+    ie: false,
1805
+    firefox: false,
1806
+    macos: false,
1807
+    windows: false,
1808
+    cordova: !!(window.cordova || window.phonegap),
1809
+    phonegap: !!(window.cordova || window.phonegap),
1810
+    electron: false,
1811
+  };
1812
+
1813
+  const screenWidth = window.screen.width;
1814
+  const screenHeight = window.screen.height;
1815
+
1816
+  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
1817
+  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
1818
+  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
1819
+  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
1820
+  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
1821
+  const edge = ua.indexOf('Edge/') >= 0;
1822
+  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
1823
+  const windows = platform === 'Win32';
1824
+  const electron = ua.toLowerCase().indexOf('electron') >= 0;
1825
+  let macos = platform === 'MacIntel';
1826
+
1827
+  // iPadOs 13 fix
1828
+  if (!ipad
1829
+    && macos
1830
+    && Support.touch
1831
+    && (
1832
+      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
1833
+      || (screenWidth === 834 && screenHeight === 1194) // Pro 11
1834
+      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
1835
+      || (screenWidth === 768 && screenHeight === 1024) // other
1836
+    )
1837
+  ) {
1838
+    ipad = ua.match(/(Version)\/([\d.]+)/);
1839
+    macos = false;
1840
+  }
1841
+
1842
+  device.ie = ie;
1843
+  device.edge = edge;
1844
+  device.firefox = firefox;
1845
+
1846
+  // Android
1847
+  if (android && !windows) {
1848
+    device.os = 'android';
1849
+    device.osVersion = android[2];
1850
+    device.android = true;
1851
+    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
1852
+  }
1853
+  if (ipad || iphone || ipod) {
1854
+    device.os = 'ios';
1855
+    device.ios = true;
1856
+  }
1857
+  // iOS
1858
+  if (iphone && !ipod) {
1859
+    device.osVersion = iphone[2].replace(/_/g, '.');
1860
+    device.iphone = true;
1861
+  }
1862
+  if (ipad) {
1863
+    device.osVersion = ipad[2].replace(/_/g, '.');
1864
+    device.ipad = true;
1865
+  }
1866
+  if (ipod) {
1867
+    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
1868
+    device.ipod = true;
1869
+  }
1870
+  // iOS 8+ changed UA
1871
+  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
1872
+    if (device.osVersion.split('.')[0] === '10') {
1873
+      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
1874
+    }
1875
+  }
1876
+
1877
+  // Webview
1878
+  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))
1879
+    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);
1880
+  device.webview = device.webView;
1881
+  device.standalone = device.webView;
1882
+
1883
+  // Desktop
1884
+  device.desktop = !(device.ios || device.android) || electron;
1885
+  if (device.desktop) {
1886
+    device.electron = electron;
1887
+    device.macos = macos;
1888
+    device.windows = windows;
1889
+    if (device.macos) {
1890
+      device.os = 'macos';
1891
+    }
1892
+    if (device.windows) {
1893
+      device.os = 'windows';
1894
+    }
1895
+  }
1896
+
1897
+  // Pixel Ratio
1898
+  device.pixelRatio = window.devicePixelRatio || 1;
1899
+
1900
+  // Export object
1901
+  return device;
1902
+}());
1903
+
1904
+function onTouchStart (event) {
1905
+  const swiper = this;
1906
+  const data = swiper.touchEventsData;
1907
+  const { params, touches } = swiper;
1908
+
1909
+  if (swiper.animating && params.preventInteractionOnTransition) {
1910
+    return;
1911
+  }
1912
+  let e = event;
1913
+  if (e.originalEvent) e = e.originalEvent;
1914
+  const $targetEl = $(e.target);
1915
+
1916
+  if (params.touchEventsTarget === 'wrapper') {
1917
+    if (!$targetEl.closest(swiper.wrapperEl).length) return;
1918
+  }
1919
+  data.isTouchEvent = e.type === 'touchstart';
1920
+  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
1921
+  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
1922
+  if (data.isTouched && data.isMoved) return;
1923
+  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
1924
+    swiper.allowClick = true;
1925
+    return;
1926
+  }
1927
+  if (params.swipeHandler) {
1928
+    if (!$targetEl.closest(params.swipeHandler)[0]) return;
1929
+  }
1930
+
1931
+  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
1932
+  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
1933
+  const startX = touches.currentX;
1934
+  const startY = touches.currentY;
1935
+
1936
+  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
1937
+
1938
+  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
1939
+  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
1940
+  if (
1941
+    edgeSwipeDetection
1942
+    && ((startX <= edgeSwipeThreshold)
1943
+    || (startX >= window.screen.width - edgeSwipeThreshold))
1944
+  ) {
1945
+    return;
1946
+  }
1947
+
1948
+  Utils.extend(data, {
1949
+    isTouched: true,
1950
+    isMoved: false,
1951
+    allowTouchCallbacks: true,
1952
+    isScrolling: undefined,
1953
+    startMoving: undefined,
1954
+  });
1955
+
1956
+  touches.startX = startX;
1957
+  touches.startY = startY;
1958
+  data.touchStartTime = Utils.now();
1959
+  swiper.allowClick = true;
1960
+  swiper.updateSize();
1961
+  swiper.swipeDirection = undefined;
1962
+  if (params.threshold > 0) data.allowThresholdMove = false;
1963
+  if (e.type !== 'touchstart') {
1964
+    let preventDefault = true;
1965
+    if ($targetEl.is(data.formElements)) preventDefault = false;
1966
+    if (
1967
+      document$1.activeElement
1968
+      && $(document$1.activeElement).is(data.formElements)
1969
+      && document$1.activeElement !== $targetEl[0]
1970
+    ) {
1971
+      document$1.activeElement.blur();
1972
+    }
1973
+
1974
+    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
1975
+    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
1976
+      e.preventDefault();
1977
+    }
1978
+  }
1979
+  swiper.emit('touchStart', e);
1980
+}
1981
+
1982
+function onTouchMove (event) {
1983
+  const swiper = this;
1984
+  const data = swiper.touchEventsData;
1985
+  const { params, touches, rtlTranslate: rtl } = swiper;
1986
+  let e = event;
1987
+  if (e.originalEvent) e = e.originalEvent;
1988
+  if (!data.isTouched) {
1989
+    if (data.startMoving && data.isScrolling) {
1990
+      swiper.emit('touchMoveOpposite', e);
1991
+    }
1992
+    return;
1993
+  }
1994
+  if (data.isTouchEvent && e.type !== 'touchmove') return;
1995
+  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
1996
+  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
1997
+  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
1998
+  if (e.preventedByNestedSwiper) {
1999
+    touches.startX = pageX;
2000
+    touches.startY = pageY;
2001
+    return;
2002
+  }
2003
+  if (!swiper.allowTouchMove) {
2004
+    // isMoved = true;
2005
+    swiper.allowClick = false;
2006
+    if (data.isTouched) {
2007
+      Utils.extend(touches, {
2008
+        startX: pageX,
2009
+        startY: pageY,
2010
+        currentX: pageX,
2011
+        currentY: pageY,
2012
+      });
2013
+      data.touchStartTime = Utils.now();
2014
+    }
2015
+    return;
2016
+  }
2017
+  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
2018
+    if (swiper.isVertical()) {
2019
+      // Vertical
2020
+      if (
2021
+        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
2022
+        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
2023
+      ) {
2024
+        data.isTouched = false;
2025
+        data.isMoved = false;
2026
+        return;
2027
+      }
2028
+    } else if (
2029
+      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
2030
+      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
2031
+    ) {
2032
+      return;
2033
+    }
2034
+  }
2035
+  if (data.isTouchEvent && document$1.activeElement) {
2036
+    if (e.target === document$1.activeElement && $(e.target).is(data.formElements)) {
2037
+      data.isMoved = true;
2038
+      swiper.allowClick = false;
2039
+      return;
2040
+    }
2041
+  }
2042
+  if (data.allowTouchCallbacks) {
2043
+    swiper.emit('touchMove', e);
2044
+  }
2045
+  if (e.targetTouches && e.targetTouches.length > 1) return;
2046
+
2047
+  touches.currentX = pageX;
2048
+  touches.currentY = pageY;
2049
+
2050
+  const diffX = touches.currentX - touches.startX;
2051
+  const diffY = touches.currentY - touches.startY;
2052
+  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;
2053
+
2054
+  if (typeof data.isScrolling === 'undefined') {
2055
+    let touchAngle;
2056
+    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
2057
+      data.isScrolling = false;
2058
+    } else {
2059
+      // eslint-disable-next-line
2060
+      if ((diffX * diffX) + (diffY * diffY) >= 25) {
2061
+        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
2062
+        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
2063
+      }
2064
+    }
2065
+  }
2066
+  if (data.isScrolling) {
2067
+    swiper.emit('touchMoveOpposite', e);
2068
+  }
2069
+  if (typeof data.startMoving === 'undefined') {
2070
+    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
2071
+      data.startMoving = true;
2072
+    }
2073
+  }
2074
+  if (data.isScrolling) {
2075
+    data.isTouched = false;
2076
+    return;
2077
+  }
2078
+  if (!data.startMoving) {
2079
+    return;
2080
+  }
2081
+  swiper.allowClick = false;
2082
+  if (!params.cssMode && e.cancelable) {
2083
+    e.preventDefault();
2084
+  }
2085
+  if (params.touchMoveStopPropagation && !params.nested) {
2086
+    e.stopPropagation();
2087
+  }
2088
+
2089
+  if (!data.isMoved) {
2090
+    if (params.loop) {
2091
+      swiper.loopFix();
2092
+    }
2093
+    data.startTranslate = swiper.getTranslate();
2094
+    swiper.setTransition(0);
2095
+    if (swiper.animating) {
2096
+      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
2097
+    }
2098
+    data.allowMomentumBounce = false;
2099
+    // Grab Cursor
2100
+    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2101
+      swiper.setGrabCursor(true);
2102
+    }
2103
+    swiper.emit('sliderFirstMove', e);
2104
+  }
2105
+  swiper.emit('sliderMove', e);
2106
+  data.isMoved = true;
2107
+
2108
+  let diff = swiper.isHorizontal() ? diffX : diffY;
2109
+  touches.diff = diff;
2110
+
2111
+  diff *= params.touchRatio;
2112
+  if (rtl) diff = -diff;
2113
+
2114
+  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
2115
+  data.currentTranslate = diff + data.startTranslate;
2116
+
2117
+  let disableParentSwiper = true;
2118
+  let resistanceRatio = params.resistanceRatio;
2119
+  if (params.touchReleaseOnEdges) {
2120
+    resistanceRatio = 0;
2121
+  }
2122
+  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
2123
+    disableParentSwiper = false;
2124
+    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);
2125
+  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
2126
+    disableParentSwiper = false;
2127
+    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);
2128
+  }
2129
+
2130
+  if (disableParentSwiper) {
2131
+    e.preventedByNestedSwiper = true;
2132
+  }
2133
+
2134
+  // Directions locks
2135
+  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
2136
+    data.currentTranslate = data.startTranslate;
2137
+  }
2138
+  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
2139
+    data.currentTranslate = data.startTranslate;
2140
+  }
2141
+
2142
+
2143
+  // Threshold
2144
+  if (params.threshold > 0) {
2145
+    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
2146
+      if (!data.allowThresholdMove) {
2147
+        data.allowThresholdMove = true;
2148
+        touches.startX = touches.currentX;
2149
+        touches.startY = touches.currentY;
2150
+        data.currentTranslate = data.startTranslate;
2151
+        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
2152
+        return;
2153
+      }
2154
+    } else {
2155
+      data.currentTranslate = data.startTranslate;
2156
+      return;
2157
+    }
2158
+  }
2159
+
2160
+  if (!params.followFinger || params.cssMode) return;
2161
+
2162
+  // Update active index in free mode
2163
+  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
2164
+    swiper.updateActiveIndex();
2165
+    swiper.updateSlidesClasses();
2166
+  }
2167
+  if (params.freeMode) {
2168
+    // Velocity
2169
+    if (data.velocities.length === 0) {
2170
+      data.velocities.push({
2171
+        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
2172
+        time: data.touchStartTime,
2173
+      });
2174
+    }
2175
+    data.velocities.push({
2176
+      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
2177
+      time: Utils.now(),
2178
+    });
2179
+  }
2180
+  // Update progress
2181
+  swiper.updateProgress(data.currentTranslate);
2182
+  // Update translate
2183
+  swiper.setTranslate(data.currentTranslate);
2184
+}
2185
+
2186
+function onTouchEnd (event) {
2187
+  const swiper = this;
2188
+  const data = swiper.touchEventsData;
2189
+
2190
+  const {
2191
+    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,
2192
+  } = swiper;
2193
+  let e = event;
2194
+  if (e.originalEvent) e = e.originalEvent;
2195
+  if (data.allowTouchCallbacks) {
2196
+    swiper.emit('touchEnd', e);
2197
+  }
2198
+  data.allowTouchCallbacks = false;
2199
+  if (!data.isTouched) {
2200
+    if (data.isMoved && params.grabCursor) {
2201
+      swiper.setGrabCursor(false);
2202
+    }
2203
+    data.isMoved = false;
2204
+    data.startMoving = false;
2205
+    return;
2206
+  }
2207
+  // Return Grab Cursor
2208
+  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2209
+    swiper.setGrabCursor(false);
2210
+  }
2211
+
2212
+  // Time diff
2213
+  const touchEndTime = Utils.now();
2214
+  const timeDiff = touchEndTime - data.touchStartTime;
2215
+
2216
+  // Tap, doubleTap, Click
2217
+  if (swiper.allowClick) {
2218
+    swiper.updateClickedSlide(e);
2219
+    swiper.emit('tap click', e);
2220
+    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
2221
+      swiper.emit('doubleTap doubleClick', e);
2222
+    }
2223
+  }
2224
+
2225
+  data.lastClickTime = Utils.now();
2226
+  Utils.nextTick(() => {
2227
+    if (!swiper.destroyed) swiper.allowClick = true;
2228
+  });
2229
+
2230
+  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
2231
+    data.isTouched = false;
2232
+    data.isMoved = false;
2233
+    data.startMoving = false;
2234
+    return;
2235
+  }
2236
+  data.isTouched = false;
2237
+  data.isMoved = false;
2238
+  data.startMoving = false;
2239
+
2240
+  let currentPos;
2241
+  if (params.followFinger) {
2242
+    currentPos = rtl ? swiper.translate : -swiper.translate;
2243
+  } else {
2244
+    currentPos = -data.currentTranslate;
2245
+  }
2246
+
2247
+  if (params.cssMode) {
2248
+    return;
2249
+  }
2250
+
2251
+  if (params.freeMode) {
2252
+    if (currentPos < -swiper.minTranslate()) {
2253
+      swiper.slideTo(swiper.activeIndex);
2254
+      return;
2255
+    }
2256
+    if (currentPos > -swiper.maxTranslate()) {
2257
+      if (swiper.slides.length < snapGrid.length) {
2258
+        swiper.slideTo(snapGrid.length - 1);
2259
+      } else {
2260
+        swiper.slideTo(swiper.slides.length - 1);
2261
+      }
2262
+      return;
2263
+    }
2264
+
2265
+    if (params.freeModeMomentum) {
2266
+      if (data.velocities.length > 1) {
2267
+        const lastMoveEvent = data.velocities.pop();
2268
+        const velocityEvent = data.velocities.pop();
2269
+
2270
+        const distance = lastMoveEvent.position - velocityEvent.position;
2271
+        const time = lastMoveEvent.time - velocityEvent.time;
2272
+        swiper.velocity = distance / time;
2273
+        swiper.velocity /= 2;
2274
+        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
2275
+          swiper.velocity = 0;
2276
+        }
2277
+        // this implies that the user stopped moving a finger then released.
2278
+        // There would be no events with distance zero, so the last event is stale.
2279
+        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
2280
+          swiper.velocity = 0;
2281
+        }
2282
+      } else {
2283
+        swiper.velocity = 0;
2284
+      }
2285
+      swiper.velocity *= params.freeModeMomentumVelocityRatio;
2286
+
2287
+      data.velocities.length = 0;
2288
+      let momentumDuration = 1000 * params.freeModeMomentumRatio;
2289
+      const momentumDistance = swiper.velocity * momentumDuration;
2290
+
2291
+      let newPosition = swiper.translate + momentumDistance;
2292
+      if (rtl) newPosition = -newPosition;
2293
+
2294
+      let doBounce = false;
2295
+      let afterBouncePosition;
2296
+      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
2297
+      let needsLoopFix;
2298
+      if (newPosition < swiper.maxTranslate()) {
2299
+        if (params.freeModeMomentumBounce) {
2300
+          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
2301
+            newPosition = swiper.maxTranslate() - bounceAmount;
2302
+          }
2303
+          afterBouncePosition = swiper.maxTranslate();
2304
+          doBounce = true;
2305
+          data.allowMomentumBounce = true;
2306
+        } else {
2307
+          newPosition = swiper.maxTranslate();
2308
+        }
2309
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
2310
+      } else if (newPosition > swiper.minTranslate()) {
2311
+        if (params.freeModeMomentumBounce) {
2312
+          if (newPosition - swiper.minTranslate() > bounceAmount) {
2313
+            newPosition = swiper.minTranslate() + bounceAmount;
2314
+          }
2315
+          afterBouncePosition = swiper.minTranslate();
2316
+          doBounce = true;
2317
+          data.allowMomentumBounce = true;
2318
+        } else {
2319
+          newPosition = swiper.minTranslate();
2320
+        }
2321
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
2322
+      } else if (params.freeModeSticky) {
2323
+        let nextSlide;
2324
+        for (let j = 0; j < snapGrid.length; j += 1) {
2325
+          if (snapGrid[j] > -newPosition) {
2326
+            nextSlide = j;
2327
+            break;
2328
+          }
2329
+        }
2330
+
2331
+        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
2332
+          newPosition = snapGrid[nextSlide];
2333
+        } else {
2334
+          newPosition = snapGrid[nextSlide - 1];
2335
+        }
2336
+        newPosition = -newPosition;
2337
+      }
2338
+      if (needsLoopFix) {
2339
+        swiper.once('transitionEnd', () => {
2340
+          swiper.loopFix();
2341
+        });
2342
+      }
2343
+      // Fix duration
2344
+      if (swiper.velocity !== 0) {
2345
+        if (rtl) {
2346
+          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
2347
+        } else {
2348
+          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
2349
+        }
2350
+        if (params.freeModeSticky) {
2351
+          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
2352
+          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
2353
+          // It's easy to see this when simulating touch with mouse events. To fix this,
2354
+          // limit single-slide swipes to the default slide duration. This also has the
2355
+          // nice side effect of matching slide speed if the user stopped moving before
2356
+          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
2357
+          // For faster swipes, also apply limits (albeit higher ones).
2358
+          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
2359
+          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
2360
+          if (moveDistance < currentSlideSize) {
2361
+            momentumDuration = params.speed;
2362
+          } else if (moveDistance < 2 * currentSlideSize) {
2363
+            momentumDuration = params.speed * 1.5;
2364
+          } else {
2365
+            momentumDuration = params.speed * 2.5;
2366
+          }
2367
+        }
2368
+      } else if (params.freeModeSticky) {
2369
+        swiper.slideToClosest();
2370
+        return;
2371
+      }
2372
+
2373
+      if (params.freeModeMomentumBounce && doBounce) {
2374
+        swiper.updateProgress(afterBouncePosition);
2375
+        swiper.setTransition(momentumDuration);
2376
+        swiper.setTranslate(newPosition);
2377
+        swiper.transitionStart(true, swiper.swipeDirection);
2378
+        swiper.animating = true;
2379
+        $wrapperEl.transitionEnd(() => {
2380
+          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
2381
+          swiper.emit('momentumBounce');
2382
+          swiper.setTransition(params.speed);
2383
+          setTimeout(() => {
2384
+            swiper.setTranslate(afterBouncePosition);
2385
+            $wrapperEl.transitionEnd(() => {
2386
+              if (!swiper || swiper.destroyed) return;
2387
+              swiper.transitionEnd();
2388
+            });
2389
+          }, 0);
2390
+        });
2391
+      } else if (swiper.velocity) {
2392
+        swiper.updateProgress(newPosition);
2393
+        swiper.setTransition(momentumDuration);
2394
+        swiper.setTranslate(newPosition);
2395
+        swiper.transitionStart(true, swiper.swipeDirection);
2396
+        if (!swiper.animating) {
2397
+          swiper.animating = true;
2398
+          $wrapperEl.transitionEnd(() => {
2399
+            if (!swiper || swiper.destroyed) return;
2400
+            swiper.transitionEnd();
2401
+          });
2402
+        }
2403
+      } else {
2404
+        swiper.updateProgress(newPosition);
2405
+      }
2406
+
2407
+      swiper.updateActiveIndex();
2408
+      swiper.updateSlidesClasses();
2409
+    } else if (params.freeModeSticky) {
2410
+      swiper.slideToClosest();
2411
+      return;
2412
+    }
2413
+
2414
+    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
2415
+      swiper.updateProgress();
2416
+      swiper.updateActiveIndex();
2417
+      swiper.updateSlidesClasses();
2418
+    }
2419
+    return;
2420
+  }
2421
+
2422
+  // Find current slide
2423
+  let stopIndex = 0;
2424
+  let groupSize = swiper.slidesSizesGrid[0];
2425
+  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
2426
+    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
2427
+    if (typeof slidesGrid[i + increment] !== 'undefined') {
2428
+      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
2429
+        stopIndex = i;
2430
+        groupSize = slidesGrid[i + increment] - slidesGrid[i];
2431
+      }
2432
+    } else if (currentPos >= slidesGrid[i]) {
2433
+      stopIndex = i;
2434
+      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
2435
+    }
2436
+  }
2437
+
2438
+  // Find current slide size
2439
+  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
2440
+  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
2441
+
2442
+  if (timeDiff > params.longSwipesMs) {
2443
+    // Long touches
2444
+    if (!params.longSwipes) {
2445
+      swiper.slideTo(swiper.activeIndex);
2446
+      return;
2447
+    }
2448
+    if (swiper.swipeDirection === 'next') {
2449
+      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);
2450
+      else swiper.slideTo(stopIndex);
2451
+    }
2452
+    if (swiper.swipeDirection === 'prev') {
2453
+      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);
2454
+      else swiper.slideTo(stopIndex);
2455
+    }
2456
+  } else {
2457
+    // Short swipes
2458
+    if (!params.shortSwipes) {
2459
+      swiper.slideTo(swiper.activeIndex);
2460
+      return;
2461
+    }
2462
+    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
2463
+    if (!isNavButtonTarget) {
2464
+      if (swiper.swipeDirection === 'next') {
2465
+        swiper.slideTo(stopIndex + increment);
2466
+      }
2467
+      if (swiper.swipeDirection === 'prev') {
2468
+        swiper.slideTo(stopIndex);
2469
+      }
2470
+    } else if (e.target === swiper.navigation.nextEl) {
2471
+      swiper.slideTo(stopIndex + increment);
2472
+    } else {
2473
+      swiper.slideTo(stopIndex);
2474
+    }
2475
+  }
2476
+}
2477
+
2478
+function onResize () {
2479
+  const swiper = this;
2480
+
2481
+  const { params, el } = swiper;
2482
+
2483
+  if (el && el.offsetWidth === 0) return;
2484
+
2485
+  // Breakpoints
2486
+  if (params.breakpoints) {
2487
+    swiper.setBreakpoint();
2488
+  }
2489
+
2490
+  // Save locks
2491
+  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;
2492
+
2493
+  // Disable locks on resize
2494
+  swiper.allowSlideNext = true;
2495
+  swiper.allowSlidePrev = true;
2496
+
2497
+  swiper.updateSize();
2498
+  swiper.updateSlides();
2499
+
2500
+  swiper.updateSlidesClasses();
2501
+  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
2502
+    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
2503
+  } else {
2504
+    swiper.slideTo(swiper.activeIndex, 0, false, true);
2505
+  }
2506
+
2507
+  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
2508
+    swiper.autoplay.run();
2509
+  }
2510
+  // Return locks after resize
2511
+  swiper.allowSlidePrev = allowSlidePrev;
2512
+  swiper.allowSlideNext = allowSlideNext;
2513
+
2514
+  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
2515
+    swiper.checkOverflow();
2516
+  }
2517
+}
2518
+
2519
+function onClick (e) {
2520
+  const swiper = this;
2521
+  if (!swiper.allowClick) {
2522
+    if (swiper.params.preventClicks) e.preventDefault();
2523
+    if (swiper.params.preventClicksPropagation && swiper.animating) {
2524
+      e.stopPropagation();
2525
+      e.stopImmediatePropagation();
2526
+    }
2527
+  }
2528
+}
2529
+
2530
+function onScroll () {
2531
+  const swiper = this;
2532
+  const { wrapperEl, rtlTranslate } = swiper;
2533
+  swiper.previousTranslate = swiper.translate;
2534
+  if (swiper.isHorizontal()) {
2535
+    if (rtlTranslate) {
2536
+      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
2537
+    } else {
2538
+      swiper.translate = -wrapperEl.scrollLeft;
2539
+    }
2540
+  } else {
2541
+    swiper.translate = -wrapperEl.scrollTop;
2542
+  }
2543
+  // eslint-disable-next-line
2544
+  if (swiper.translate === -0) swiper.translate = 0;
2545
+
2546
+  swiper.updateActiveIndex();
2547
+  swiper.updateSlidesClasses();
2548
+
2549
+  let newProgress;
2550
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
2551
+  if (translatesDiff === 0) {
2552
+    newProgress = 0;
2553
+  } else {
2554
+    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
2555
+  }
2556
+  if (newProgress !== swiper.progress) {
2557
+    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
2558
+  }
2559
+
2560
+  swiper.emit('setTranslate', swiper.translate, false);
2561
+}
2562
+
2563
+let dummyEventAttached = false;
2564
+function dummyEventListener() {}
2565
+
2566
+function attachEvents() {
2567
+  const swiper = this;
2568
+  const {
2569
+    params, touchEvents, el, wrapperEl,
2570
+  } = swiper;
2571
+
2572
+  swiper.onTouchStart = onTouchStart.bind(swiper);
2573
+  swiper.onTouchMove = onTouchMove.bind(swiper);
2574
+  swiper.onTouchEnd = onTouchEnd.bind(swiper);
2575
+  if (params.cssMode) {
2576
+    swiper.onScroll = onScroll.bind(swiper);
2577
+  }
2578
+
2579
+  swiper.onClick = onClick.bind(swiper);
2580
+
2581
+  const capture = !!params.nested;
2582
+
2583
+  // Touch Events
2584
+  if (!Support.touch && Support.pointerEvents) {
2585
+    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
2586
+    document$1.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
2587
+    document$1.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
2588
+  } else {
2589
+    if (Support.touch) {
2590
+      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
2591
+      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
2592
+      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
2593
+      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
2594
+      if (touchEvents.cancel) {
2595
+        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
2596
+      }
2597
+      if (!dummyEventAttached) {
2598
+        document$1.addEventListener('touchstart', dummyEventListener);
2599
+        dummyEventAttached = true;
2600
+      }
2601
+    }
2602
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
2603
+      el.addEventListener('mousedown', swiper.onTouchStart, false);
2604
+      document$1.addEventListener('mousemove', swiper.onTouchMove, capture);
2605
+      document$1.addEventListener('mouseup', swiper.onTouchEnd, false);
2606
+    }
2607
+  }
2608
+  // Prevent Links Clicks
2609
+  if (params.preventClicks || params.preventClicksPropagation) {
2610
+    el.addEventListener('click', swiper.onClick, true);
2611
+  }
2612
+  if (params.cssMode) {
2613
+    wrapperEl.addEventListener('scroll', swiper.onScroll);
2614
+  }
2615
+
2616
+  // Resize handler
2617
+  if (params.updateOnWindowResize) {
2618
+    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
2619
+  } else {
2620
+    swiper.on('observerUpdate', onResize, true);
2621
+  }
2622
+}
2623
+
2624
+function detachEvents() {
2625
+  const swiper = this;
2626
+
2627
+  const {
2628
+    params, touchEvents, el, wrapperEl,
2629
+  } = swiper;
2630
+
2631
+  const capture = !!params.nested;
2632
+
2633
+  // Touch Events
2634
+  if (!Support.touch && Support.pointerEvents) {
2635
+    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
2636
+    document$1.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
2637
+    document$1.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
2638
+  } else {
2639
+    if (Support.touch) {
2640
+      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
2641
+      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
2642
+      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
2643
+      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
2644
+      if (touchEvents.cancel) {
2645
+        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
2646
+      }
2647
+    }
2648
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
2649
+      el.removeEventListener('mousedown', swiper.onTouchStart, false);
2650
+      document$1.removeEventListener('mousemove', swiper.onTouchMove, capture);
2651
+      document$1.removeEventListener('mouseup', swiper.onTouchEnd, false);
2652
+    }
2653
+  }
2654
+  // Prevent Links Clicks
2655
+  if (params.preventClicks || params.preventClicksPropagation) {
2656
+    el.removeEventListener('click', swiper.onClick, true);
2657
+  }
2658
+
2659
+  if (params.cssMode) {
2660
+    wrapperEl.removeEventListener('scroll', swiper.onScroll);
2661
+  }
2662
+
2663
+  // Resize handler
2664
+  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
2665
+}
2666
+
2667
+var events = {
2668
+  attachEvents,
2669
+  detachEvents,
2670
+};
2671
+
2672
+function setBreakpoint () {
2673
+  const swiper = this;
2674
+  const {
2675
+    activeIndex, initialized, loopedSlides = 0, params, $el,
2676
+  } = swiper;
2677
+  const breakpoints = params.breakpoints;
2678
+  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;
2679
+
2680
+  // Get breakpoint for window width and update parameters
2681
+  const breakpoint = swiper.getBreakpoint(breakpoints);
2682
+
2683
+  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
2684
+    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
2685
+    if (breakpointOnlyParams) {
2686
+      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {
2687
+        const paramValue = breakpointOnlyParams[param];
2688
+        if (typeof paramValue === 'undefined') return;
2689
+        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
2690
+          breakpointOnlyParams[param] = 'auto';
2691
+        } else if (param === 'slidesPerView') {
2692
+          breakpointOnlyParams[param] = parseFloat(paramValue);
2693
+        } else {
2694
+          breakpointOnlyParams[param] = parseInt(paramValue, 10);
2695
+        }
2696
+      });
2697
+    }
2698
+
2699
+    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
2700
+    const wasMultiRow = params.slidesPerColumn > 1;
2701
+    const isMultiRow = breakpointParams.slidesPerColumn > 1;
2702
+    if (wasMultiRow && !isMultiRow) {
2703
+      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);
2704
+    } else if (!wasMultiRow && isMultiRow) {
2705
+      $el.addClass(`${params.containerModifierClass}multirow`);
2706
+      if (breakpointParams.slidesPerColumnFill === 'column') {
2707
+        $el.addClass(`${params.containerModifierClass}multirow-column`);
2708
+      }
2709
+    }
2710
+
2711
+    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
2712
+    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
2713
+
2714
+    if (directionChanged && initialized) {
2715
+      swiper.changeDirection();
2716
+    }
2717
+
2718
+    Utils.extend(swiper.params, breakpointParams);
2719
+
2720
+    Utils.extend(swiper, {
2721
+      allowTouchMove: swiper.params.allowTouchMove,
2722
+      allowSlideNext: swiper.params.allowSlideNext,
2723
+      allowSlidePrev: swiper.params.allowSlidePrev,
2724
+    });
2725
+
2726
+    swiper.currentBreakpoint = breakpoint;
2727
+
2728
+    if (needsReLoop && initialized) {
2729
+      swiper.loopDestroy();
2730
+      swiper.loopCreate();
2731
+      swiper.updateSlides();
2732
+      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
2733
+    }
2734
+
2735
+    swiper.emit('breakpoint', breakpointParams);
2736
+  }
2737
+}
2738
+
2739
+function getBreakpoint (breakpoints) {
2740
+  // Get breakpoint for window width
2741
+  if (!breakpoints) return undefined;
2742
+  let breakpoint = false;
2743
+
2744
+  const points = Object.keys(breakpoints).map((point) => {
2745
+    if (typeof point === 'string' && point.indexOf('@') === 0) {
2746
+      const minRatio = parseFloat(point.substr(1));
2747
+      const value = window.innerHeight * minRatio;
2748
+      return { value, point };
2749
+    }
2750
+    return { value: point, point };
2751
+  });
2752
+
2753
+  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
2754
+  for (let i = 0; i < points.length; i += 1) {
2755
+    const { point, value } = points[i];
2756
+    if (value <= window.innerWidth) {
2757
+      breakpoint = point;
2758
+    }
2759
+  }
2760
+  return breakpoint || 'max';
2761
+}
2762
+
2763
+var breakpoints = { setBreakpoint, getBreakpoint };
2764
+
2765
+function addClasses () {
2766
+  const swiper = this;
2767
+  const {
2768
+    classNames, params, rtl, $el,
2769
+  } = swiper;
2770
+  const suffixes = [];
2771
+
2772
+  suffixes.push('initialized');
2773
+  suffixes.push(params.direction);
2774
+
2775
+  if (params.freeMode) {
2776
+    suffixes.push('free-mode');
2777
+  }
2778
+  if (params.autoHeight) {
2779
+    suffixes.push('autoheight');
2780
+  }
2781
+  if (rtl) {
2782
+    suffixes.push('rtl');
2783
+  }
2784
+  if (params.slidesPerColumn > 1) {
2785
+    suffixes.push('multirow');
2786
+    if (params.slidesPerColumnFill === 'column') {
2787
+      suffixes.push('multirow-column');
2788
+    }
2789
+  }
2790
+  if (Device.android) {
2791
+    suffixes.push('android');
2792
+  }
2793
+  if (Device.ios) {
2794
+    suffixes.push('ios');
2795
+  }
2796
+
2797
+  if (params.cssMode) {
2798
+    suffixes.push('css-mode');
2799
+  }
2800
+
2801
+  suffixes.forEach((suffix) => {
2802
+    classNames.push(params.containerModifierClass + suffix);
2803
+  });
2804
+
2805
+  $el.addClass(classNames.join(' '));
2806
+}
2807
+
2808
+function removeClasses () {
2809
+  const swiper = this;
2810
+  const { $el, classNames } = swiper;
2811
+
2812
+  $el.removeClass(classNames.join(' '));
2813
+}
2814
+
2815
+var classes = { addClasses, removeClasses };
2816
+
2817
+function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
2818
+  let image;
2819
+  function onReady() {
2820
+    if (callback) callback();
2821
+  }
2822
+  const isPicture = $(imageEl).parent('picture')[0];
2823
+
2824
+  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
2825
+    if (src) {
2826
+      image = new window.Image();
2827
+      image.onload = onReady;
2828
+      image.onerror = onReady;
2829
+      if (sizes) {
2830
+        image.sizes = sizes;
2831
+      }
2832
+      if (srcset) {
2833
+        image.srcset = srcset;
2834
+      }
2835
+      if (src) {
2836
+        image.src = src;
2837
+      }
2838
+    } else {
2839
+      onReady();
2840
+    }
2841
+  } else {
2842
+    // image already loaded...
2843
+    onReady();
2844
+  }
2845
+}
2846
+
2847
+function preloadImages () {
2848
+  const swiper = this;
2849
+  swiper.imagesToLoad = swiper.$el.find('img');
2850
+  function onReady() {
2851
+    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
2852
+    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
2853
+    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
2854
+      if (swiper.params.updateOnImagesReady) swiper.update();
2855
+      swiper.emit('imagesReady');
2856
+    }
2857
+  }
2858
+  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {
2859
+    const imageEl = swiper.imagesToLoad[i];
2860
+    swiper.loadImage(
2861
+      imageEl,
2862
+      imageEl.currentSrc || imageEl.getAttribute('src'),
2863
+      imageEl.srcset || imageEl.getAttribute('srcset'),
2864
+      imageEl.sizes || imageEl.getAttribute('sizes'),
2865
+      true,
2866
+      onReady
2867
+    );
2868
+  }
2869
+}
2870
+
2871
+var images = {
2872
+  loadImage,
2873
+  preloadImages,
2874
+};
2875
+
2876
+function checkOverflow() {
2877
+  const swiper = this;
2878
+  const params = swiper.params;
2879
+  const wasLocked = swiper.isLocked;
2880
+  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);
2881
+
2882
+  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
2883
+    swiper.isLocked = lastSlidePosition <= swiper.size;
2884
+  } else {
2885
+    swiper.isLocked = swiper.snapGrid.length === 1;
2886
+  }
2887
+
2888
+  swiper.allowSlideNext = !swiper.isLocked;
2889
+  swiper.allowSlidePrev = !swiper.isLocked;
2890
+
2891
+  // events
2892
+  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
2893
+
2894
+  if (wasLocked && wasLocked !== swiper.isLocked) {
2895
+    swiper.isEnd = false;
2896
+    swiper.navigation.update();
2897
+  }
2898
+}
2899
+
2900
+var checkOverflow$1 = { checkOverflow };
2901
+
2902
+var defaults = {
2903
+  init: true,
2904
+  direction: 'horizontal',
2905
+  touchEventsTarget: 'container',
2906
+  initialSlide: 0,
2907
+  speed: 300,
2908
+  cssMode: false,
2909
+  updateOnWindowResize: true,
2910
+  //
2911
+  preventInteractionOnTransition: false,
2912
+
2913
+  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
2914
+  edgeSwipeDetection: false,
2915
+  edgeSwipeThreshold: 20,
2916
+
2917
+  // Free mode
2918
+  freeMode: false,
2919
+  freeModeMomentum: true,
2920
+  freeModeMomentumRatio: 1,
2921
+  freeModeMomentumBounce: true,
2922
+  freeModeMomentumBounceRatio: 1,
2923
+  freeModeMomentumVelocityRatio: 1,
2924
+  freeModeSticky: false,
2925
+  freeModeMinimumVelocity: 0.02,
2926
+
2927
+  // Autoheight
2928
+  autoHeight: false,
2929
+
2930
+  // Set wrapper width
2931
+  setWrapperSize: false,
2932
+
2933
+  // Virtual Translate
2934
+  virtualTranslate: false,
2935
+
2936
+  // Effects
2937
+  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
2938
+
2939
+  // Breakpoints
2940
+  breakpoints: undefined,
2941
+
2942
+  // Slides grid
2943
+  spaceBetween: 0,
2944
+  slidesPerView: 1,
2945
+  slidesPerColumn: 1,
2946
+  slidesPerColumnFill: 'column',
2947
+  slidesPerGroup: 1,
2948
+  slidesPerGroupSkip: 0,
2949
+  centeredSlides: false,
2950
+  centeredSlidesBounds: false,
2951
+  slidesOffsetBefore: 0, // in px
2952
+  slidesOffsetAfter: 0, // in px
2953
+  normalizeSlideIndex: true,
2954
+  centerInsufficientSlides: false,
2955
+
2956
+  // Disable swiper and hide navigation when container not overflow
2957
+  watchOverflow: false,
2958
+
2959
+  // Round length
2960
+  roundLengths: false,
2961
+
2962
+  // Touches
2963
+  touchRatio: 1,
2964
+  touchAngle: 45,
2965
+  simulateTouch: true,
2966
+  shortSwipes: true,
2967
+  longSwipes: true,
2968
+  longSwipesRatio: 0.5,
2969
+  longSwipesMs: 300,
2970
+  followFinger: true,
2971
+  allowTouchMove: true,
2972
+  threshold: 0,
2973
+  touchMoveStopPropagation: false,
2974
+  touchStartPreventDefault: true,
2975
+  touchStartForcePreventDefault: false,
2976
+  touchReleaseOnEdges: false,
2977
+
2978
+  // Unique Navigation Elements
2979
+  uniqueNavElements: true,
2980
+
2981
+  // Resistance
2982
+  resistance: true,
2983
+  resistanceRatio: 0.85,
2984
+
2985
+  // Progress
2986
+  watchSlidesProgress: false,
2987
+  watchSlidesVisibility: false,
2988
+
2989
+  // Cursor
2990
+  grabCursor: false,
2991
+
2992
+  // Clicks
2993
+  preventClicks: true,
2994
+  preventClicksPropagation: true,
2995
+  slideToClickedSlide: false,
2996
+
2997
+  // Images
2998
+  preloadImages: true,
2999
+  updateOnImagesReady: true,
3000
+
3001
+  // loop
3002
+  loop: false,
3003
+  loopAdditionalSlides: 0,
3004
+  loopedSlides: null,
3005
+  loopFillGroupWithBlank: false,
3006
+
3007
+  // Swiping/no swiping
3008
+  allowSlidePrev: true,
3009
+  allowSlideNext: true,
3010
+  swipeHandler: null, // '.swipe-handler',
3011
+  noSwiping: true,
3012
+  noSwipingClass: 'swiper-no-swiping',
3013
+  noSwipingSelector: null,
3014
+
3015
+  // Passive Listeners
3016
+  passiveListeners: true,
3017
+
3018
+  // NS
3019
+  containerModifierClass: 'swiper-container-', // NEW
3020
+  slideClass: 'swiper-slide',
3021
+  slideBlankClass: 'swiper-slide-invisible-blank',
3022
+  slideActiveClass: 'swiper-slide-active',
3023
+  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
3024
+  slideVisibleClass: 'swiper-slide-visible',
3025
+  slideDuplicateClass: 'swiper-slide-duplicate',
3026
+  slideNextClass: 'swiper-slide-next',
3027
+  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
3028
+  slidePrevClass: 'swiper-slide-prev',
3029
+  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
3030
+  wrapperClass: 'swiper-wrapper',
3031
+
3032
+  // Callbacks
3033
+  runCallbacksOnInit: true,
3034
+};
3035
+
3036
+/* eslint no-param-reassign: "off" */
3037
+
3038
+const prototypes = {
3039
+  update,
3040
+  translate,
3041
+  transition,
3042
+  slide,
3043
+  loop,
3044
+  grabCursor,
3045
+  manipulation,
3046
+  events,
3047
+  breakpoints,
3048
+  checkOverflow: checkOverflow$1,
3049
+  classes,
3050
+  images,
3051
+};
3052
+
3053
+const extendedDefaults = {};
3054
+
3055
+class Swiper extends SwiperClass {
3056
+  constructor(...args) {
3057
+    let el;
3058
+    let params;
3059
+    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
3060
+      params = args[0];
3061
+    } else {
3062
+      [el, params] = args;
3063
+    }
3064
+    if (!params) params = {};
3065
+
3066
+    params = Utils.extend({}, params);
3067
+    if (el && !params.el) params.el = el;
3068
+
3069
+    super(params);
3070
+
3071
+    Object.keys(prototypes).forEach((prototypeGroup) => {
3072
+      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
3073
+        if (!Swiper.prototype[protoMethod]) {
3074
+          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
3075
+        }
3076
+      });
3077
+    });
3078
+
3079
+    // Swiper Instance
3080
+    const swiper = this;
3081
+    if (typeof swiper.modules === 'undefined') {
3082
+      swiper.modules = {};
3083
+    }
3084
+    Object.keys(swiper.modules).forEach((moduleName) => {
3085
+      const module = swiper.modules[moduleName];
3086
+      if (module.params) {
3087
+        const moduleParamName = Object.keys(module.params)[0];
3088
+        const moduleParams = module.params[moduleParamName];
3089
+        if (typeof moduleParams !== 'object' || moduleParams === null) return;
3090
+        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
3091
+        if (params[moduleParamName] === true) {
3092
+          params[moduleParamName] = { enabled: true };
3093
+        }
3094
+        if (
3095
+          typeof params[moduleParamName] === 'object'
3096
+          && !('enabled' in params[moduleParamName])
3097
+        ) {
3098
+          params[moduleParamName].enabled = true;
3099
+        }
3100
+        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
3101
+      }
3102
+    });
3103
+
3104
+    // Extend defaults with modules params
3105
+    const swiperParams = Utils.extend({}, defaults);
3106
+    swiper.useModulesParams(swiperParams);
3107
+
3108
+    // Extend defaults with passed params
3109
+    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
3110
+    swiper.originalParams = Utils.extend({}, swiper.params);
3111
+    swiper.passedParams = Utils.extend({}, params);
3112
+
3113
+    // Save Dom lib
3114
+    swiper.$ = $;
3115
+
3116
+    // Find el
3117
+    const $el = $(swiper.params.el);
3118
+    el = $el[0];
3119
+
3120
+    if (!el) {
3121
+      return undefined;
3122
+    }
3123
+
3124
+    if ($el.length > 1) {
3125
+      const swipers = [];
3126
+      $el.each((index, containerEl) => {
3127
+        const newParams = Utils.extend({}, params, { el: containerEl });
3128
+        swipers.push(new Swiper(newParams));
3129
+      });
3130
+      return swipers;
3131
+    }
3132
+
3133
+    el.swiper = swiper;
3134
+    $el.data('swiper', swiper);
3135
+
3136
+    // Find Wrapper
3137
+    let $wrapperEl;
3138
+    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
3139
+      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));
3140
+      // Children needs to return slot items
3141
+      $wrapperEl.children = (options) => $el.children(options);
3142
+    } else {
3143
+      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);
3144
+    }
3145
+    // Extend Swiper
3146
+    Utils.extend(swiper, {
3147
+      $el,
3148
+      el,
3149
+      $wrapperEl,
3150
+      wrapperEl: $wrapperEl[0],
3151
+
3152
+      // Classes
3153
+      classNames: [],
3154
+
3155
+      // Slides
3156
+      slides: $(),
3157
+      slidesGrid: [],
3158
+      snapGrid: [],
3159
+      slidesSizesGrid: [],
3160
+
3161
+      // isDirection
3162
+      isHorizontal() {
3163
+        return swiper.params.direction === 'horizontal';
3164
+      },
3165
+      isVertical() {
3166
+        return swiper.params.direction === 'vertical';
3167
+      },
3168
+      // RTL
3169
+      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3170
+      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
3171
+      wrongRTL: $wrapperEl.css('display') === '-webkit-box',
3172
+
3173
+      // Indexes
3174
+      activeIndex: 0,
3175
+      realIndex: 0,
3176
+
3177
+      //
3178
+      isBeginning: true,
3179
+      isEnd: false,
3180
+
3181
+      // Props
3182
+      translate: 0,
3183
+      previousTranslate: 0,
3184
+      progress: 0,
3185
+      velocity: 0,
3186
+      animating: false,
3187
+
3188
+      // Locks
3189
+      allowSlideNext: swiper.params.allowSlideNext,
3190
+      allowSlidePrev: swiper.params.allowSlidePrev,
3191
+
3192
+      // Touch Events
3193
+      touchEvents: (function touchEvents() {
3194
+        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
3195
+        let desktop = ['mousedown', 'mousemove', 'mouseup'];
3196
+        if (Support.pointerEvents) {
3197
+          desktop = ['pointerdown', 'pointermove', 'pointerup'];
3198
+        }
3199
+        swiper.touchEventsTouch = {
3200
+          start: touch[0],
3201
+          move: touch[1],
3202
+          end: touch[2],
3203
+          cancel: touch[3],
3204
+        };
3205
+        swiper.touchEventsDesktop = {
3206
+          start: desktop[0],
3207
+          move: desktop[1],
3208
+          end: desktop[2],
3209
+        };
3210
+        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
3211
+      }()),
3212
+      touchEventsData: {
3213
+        isTouched: undefined,
3214
+        isMoved: undefined,
3215
+        allowTouchCallbacks: undefined,
3216
+        touchStartTime: undefined,
3217
+        isScrolling: undefined,
3218
+        currentTranslate: undefined,
3219
+        startTranslate: undefined,
3220
+        allowThresholdMove: undefined,
3221
+        // Form elements to match
3222
+        formElements: 'input, select, option, textarea, button, video, label',
3223
+        // Last click time
3224
+        lastClickTime: Utils.now(),
3225
+        clickTimeout: undefined,
3226
+        // Velocities
3227
+        velocities: [],
3228
+        allowMomentumBounce: undefined,
3229
+        isTouchEvent: undefined,
3230
+        startMoving: undefined,
3231
+      },
3232
+
3233
+      // Clicks
3234
+      allowClick: true,
3235
+
3236
+      // Touches
3237
+      allowTouchMove: swiper.params.allowTouchMove,
3238
+
3239
+      touches: {
3240
+        startX: 0,
3241
+        startY: 0,
3242
+        currentX: 0,
3243
+        currentY: 0,
3244
+        diff: 0,
3245
+      },
3246
+
3247
+      // Images
3248
+      imagesToLoad: [],
3249
+      imagesLoaded: 0,
3250
+
3251
+    });
3252
+
3253
+    // Install Modules
3254
+    swiper.useModules();
3255
+
3256
+    // Init
3257
+    if (swiper.params.init) {
3258
+      swiper.init();
3259
+    }
3260
+
3261
+    // Return app instance
3262
+    return swiper;
3263
+  }
3264
+
3265
+  slidesPerViewDynamic() {
3266
+    const swiper = this;
3267
+    const {
3268
+      params, slides, slidesGrid, size: swiperSize, activeIndex,
3269
+    } = swiper;
3270
+    let spv = 1;
3271
+    if (params.centeredSlides) {
3272
+      let slideSize = slides[activeIndex].swiperSlideSize;
3273
+      let breakLoop;
3274
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
3275
+        if (slides[i] && !breakLoop) {
3276
+          slideSize += slides[i].swiperSlideSize;
3277
+          spv += 1;
3278
+          if (slideSize > swiperSize) breakLoop = true;
3279
+        }
3280
+      }
3281
+      for (let i = activeIndex - 1; i >= 0; i -= 1) {
3282
+        if (slides[i] && !breakLoop) {
3283
+          slideSize += slides[i].swiperSlideSize;
3284
+          spv += 1;
3285
+          if (slideSize > swiperSize) breakLoop = true;
3286
+        }
3287
+      }
3288
+    } else {
3289
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
3290
+        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {
3291
+          spv += 1;
3292
+        }
3293
+      }
3294
+    }
3295
+    return spv;
3296
+  }
3297
+
3298
+  update() {
3299
+    const swiper = this;
3300
+    if (!swiper || swiper.destroyed) return;
3301
+    const { snapGrid, params } = swiper;
3302
+    // Breakpoints
3303
+    if (params.breakpoints) {
3304
+      swiper.setBreakpoint();
3305
+    }
3306
+    swiper.updateSize();
3307
+    swiper.updateSlides();
3308
+    swiper.updateProgress();
3309
+    swiper.updateSlidesClasses();
3310
+
3311
+    function setTranslate() {
3312
+      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
3313
+      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
3314
+      swiper.setTranslate(newTranslate);
3315
+      swiper.updateActiveIndex();
3316
+      swiper.updateSlidesClasses();
3317
+    }
3318
+    let translated;
3319
+    if (swiper.params.freeMode) {
3320
+      setTranslate();
3321
+      if (swiper.params.autoHeight) {
3322
+        swiper.updateAutoHeight();
3323
+      }
3324
+    } else {
3325
+      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
3326
+        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3327
+      } else {
3328
+        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
3329
+      }
3330
+      if (!translated) {
3331
+        setTranslate();
3332
+      }
3333
+    }
3334
+    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
3335
+      swiper.checkOverflow();
3336
+    }
3337
+    swiper.emit('update');
3338
+  }
3339
+
3340
+  changeDirection(newDirection, needUpdate = true) {
3341
+    const swiper = this;
3342
+    const currentDirection = swiper.params.direction;
3343
+    if (!newDirection) {
3344
+      // eslint-disable-next-line
3345
+      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
3346
+    }
3347
+    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
3348
+      return swiper;
3349
+    }
3350
+
3351
+    swiper.$el
3352
+      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)
3353
+      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);
3354
+
3355
+    swiper.params.direction = newDirection;
3356
+
3357
+    swiper.slides.each((slideIndex, slideEl) => {
3358
+      if (newDirection === 'vertical') {
3359
+        slideEl.style.width = '';
3360
+      } else {
3361
+        slideEl.style.height = '';
3362
+      }
3363
+    });
3364
+
3365
+    swiper.emit('changeDirection');
3366
+    if (needUpdate) swiper.update();
3367
+
3368
+    return swiper;
3369
+  }
3370
+
3371
+  init() {
3372
+    const swiper = this;
3373
+    if (swiper.initialized) return;
3374
+
3375
+    swiper.emit('beforeInit');
3376
+
3377
+    // Set breakpoint
3378
+    if (swiper.params.breakpoints) {
3379
+      swiper.setBreakpoint();
3380
+    }
3381
+
3382
+    // Add Classes
3383
+    swiper.addClasses();
3384
+
3385
+    // Create loop
3386
+    if (swiper.params.loop) {
3387
+      swiper.loopCreate();
3388
+    }
3389
+
3390
+    // Update size
3391
+    swiper.updateSize();
3392
+
3393
+    // Update slides
3394
+    swiper.updateSlides();
3395
+
3396
+    if (swiper.params.watchOverflow) {
3397
+      swiper.checkOverflow();
3398
+    }
3399
+
3400
+    // Set Grab Cursor
3401
+    if (swiper.params.grabCursor) {
3402
+      swiper.setGrabCursor();
3403
+    }
3404
+
3405
+    if (swiper.params.preloadImages) {
3406
+      swiper.preloadImages();
3407
+    }
3408
+
3409
+    // Slide To Initial Slide
3410
+    if (swiper.params.loop) {
3411
+      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
3412
+    } else {
3413
+      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
3414
+    }
3415
+
3416
+    // Attach events
3417
+    swiper.attachEvents();
3418
+
3419
+    // Init Flag
3420
+    swiper.initialized = true;
3421
+
3422
+    // Emit
3423
+    swiper.emit('init');
3424
+  }
3425
+
3426
+  destroy(deleteInstance = true, cleanStyles = true) {
3427
+    const swiper = this;
3428
+    const {
3429
+      params, $el, $wrapperEl, slides,
3430
+    } = swiper;
3431
+
3432
+    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
3433
+      return null;
3434
+    }
3435
+
3436
+    swiper.emit('beforeDestroy');
3437
+
3438
+    // Init Flag
3439
+    swiper.initialized = false;
3440
+
3441
+    // Detach events
3442
+    swiper.detachEvents();
3443
+
3444
+    // Destroy loop
3445
+    if (params.loop) {
3446
+      swiper.loopDestroy();
3447
+    }
3448
+
3449
+    // Cleanup styles
3450
+    if (cleanStyles) {
3451
+      swiper.removeClasses();
3452
+      $el.removeAttr('style');
3453
+      $wrapperEl.removeAttr('style');
3454
+      if (slides && slides.length) {
3455
+        slides
3456
+          .removeClass([
3457
+            params.slideVisibleClass,
3458
+            params.slideActiveClass,
3459
+            params.slideNextClass,
3460
+            params.slidePrevClass,
3461
+          ].join(' '))
3462
+          .removeAttr('style')
3463
+          .removeAttr('data-swiper-slide-index');
3464
+      }
3465
+    }
3466
+
3467
+    swiper.emit('destroy');
3468
+
3469
+    // Detach emitter events
3470
+    Object.keys(swiper.eventsListeners).forEach((eventName) => {
3471
+      swiper.off(eventName);
3472
+    });
3473
+
3474
+    if (deleteInstance !== false) {
3475
+      swiper.$el[0].swiper = null;
3476
+      swiper.$el.data('swiper', null);
3477
+      Utils.deleteProps(swiper);
3478
+    }
3479
+    swiper.destroyed = true;
3480
+
3481
+    return null;
3482
+  }
3483
+
3484
+  static extendDefaults(newDefaults) {
3485
+    Utils.extend(extendedDefaults, newDefaults);
3486
+  }
3487
+
3488
+  static get extendedDefaults() {
3489
+    return extendedDefaults;
3490
+  }
3491
+
3492
+  static get defaults() {
3493
+    return defaults;
3494
+  }
3495
+
3496
+  static get Class() {
3497
+    return SwiperClass;
3498
+  }
3499
+
3500
+  static get $() {
3501
+    return $;
3502
+  }
3503
+}
3504
+
3505
+var Device$1 = {
3506
+  name: 'device',
3507
+  proto: {
3508
+    device: Device,
3509
+  },
3510
+  static: {
3511
+    device: Device,
3512
+  },
3513
+};
3514
+
3515
+var Support$1 = {
3516
+  name: 'support',
3517
+  proto: {
3518
+    support: Support,
3519
+  },
3520
+  static: {
3521
+    support: Support,
3522
+  },
3523
+};
3524
+
3525
+const Browser = (function Browser() {
3526
+  function isSafari() {
3527
+    const ua = window.navigator.userAgent.toLowerCase();
3528
+    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
3529
+  }
3530
+  return {
3531
+    isEdge: !!window.navigator.userAgent.match(/Edge/g),
3532
+    isSafari: isSafari(),
3533
+    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
3534
+  };
3535
+}());
3536
+
3537
+var Browser$1 = {
3538
+  name: 'browser',
3539
+  proto: {
3540
+    browser: Browser,
3541
+  },
3542
+  static: {
3543
+    browser: Browser,
3544
+  },
3545
+};
3546
+
3547
+var Resize = {
3548
+  name: 'resize',
3549
+  create() {
3550
+    const swiper = this;
3551
+    Utils.extend(swiper, {
3552
+      resize: {
3553
+        resizeHandler() {
3554
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
3555
+          swiper.emit('beforeResize');
3556
+          swiper.emit('resize');
3557
+        },
3558
+        orientationChangeHandler() {
3559
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
3560
+          swiper.emit('orientationchange');
3561
+        },
3562
+      },
3563
+    });
3564
+  },
3565
+  on: {
3566
+    init() {
3567
+      const swiper = this;
3568
+      // Emit resize
3569
+      window.addEventListener('resize', swiper.resize.resizeHandler);
3570
+
3571
+      // Emit orientationchange
3572
+      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
3573
+    },
3574
+    destroy() {
3575
+      const swiper = this;
3576
+      window.removeEventListener('resize', swiper.resize.resizeHandler);
3577
+      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
3578
+    },
3579
+  },
3580
+};
3581
+
3582
+const Observer = {
3583
+  func: window.MutationObserver || window.WebkitMutationObserver,
3584
+  attach(target, options = {}) {
3585
+    const swiper = this;
3586
+
3587
+    const ObserverFunc = Observer.func;
3588
+    const observer = new ObserverFunc((mutations) => {
3589
+      // The observerUpdate event should only be triggered
3590
+      // once despite the number of mutations.  Additional
3591
+      // triggers are redundant and are very costly
3592
+      if (mutations.length === 1) {
3593
+        swiper.emit('observerUpdate', mutations[0]);
3594
+        return;
3595
+      }
3596
+      const observerUpdate = function observerUpdate() {
3597
+        swiper.emit('observerUpdate', mutations[0]);
3598
+      };
3599
+
3600
+      if (window.requestAnimationFrame) {
3601
+        window.requestAnimationFrame(observerUpdate);
3602
+      } else {
3603
+        window.setTimeout(observerUpdate, 0);
3604
+      }
3605
+    });
3606
+
3607
+    observer.observe(target, {
3608
+      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
3609
+      childList: typeof options.childList === 'undefined' ? true : options.childList,
3610
+      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
3611
+    });
3612
+
3613
+    swiper.observer.observers.push(observer);
3614
+  },
3615
+  init() {
3616
+    const swiper = this;
3617
+    if (!Support.observer || !swiper.params.observer) return;
3618
+    if (swiper.params.observeParents) {
3619
+      const containerParents = swiper.$el.parents();
3620
+      for (let i = 0; i < containerParents.length; i += 1) {
3621
+        swiper.observer.attach(containerParents[i]);
3622
+      }
3623
+    }
3624
+    // Observe container
3625
+    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });
3626
+
3627
+    // Observe wrapper
3628
+    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
3629
+  },
3630
+  destroy() {
3631
+    const swiper = this;
3632
+    swiper.observer.observers.forEach((observer) => {
3633
+      observer.disconnect();
3634
+    });
3635
+    swiper.observer.observers = [];
3636
+  },
3637
+};
3638
+
3639
+var Observer$1 = {
3640
+  name: 'observer',
3641
+  params: {
3642
+    observer: false,
3643
+    observeParents: false,
3644
+    observeSlideChildren: false,
3645
+  },
3646
+  create() {
3647
+    const swiper = this;
3648
+    Utils.extend(swiper, {
3649
+      observer: {
3650
+        init: Observer.init.bind(swiper),
3651
+        attach: Observer.attach.bind(swiper),
3652
+        destroy: Observer.destroy.bind(swiper),
3653
+        observers: [],
3654
+      },
3655
+    });
3656
+  },
3657
+  on: {
3658
+    init() {
3659
+      const swiper = this;
3660
+      swiper.observer.init();
3661
+    },
3662
+    destroy() {
3663
+      const swiper = this;
3664
+      swiper.observer.destroy();
3665
+    },
3666
+  },
3667
+};
3668
+
3669
+const Virtual = {
3670
+  update(force) {
3671
+    const swiper = this;
3672
+    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;
3673
+    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
3674
+    const {
3675
+      from: previousFrom,
3676
+      to: previousTo,
3677
+      slides,
3678
+      slidesGrid: previousSlidesGrid,
3679
+      renderSlide,
3680
+      offset: previousOffset,
3681
+    } = swiper.virtual;
3682
+    swiper.updateActiveIndex();
3683
+    const activeIndex = swiper.activeIndex || 0;
3684
+
3685
+    let offsetProp;
3686
+    if (swiper.rtlTranslate) offsetProp = 'right';
3687
+    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
3688
+
3689
+    let slidesAfter;
3690
+    let slidesBefore;
3691
+    if (centeredSlides) {
3692
+      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
3693
+      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
3694
+    } else {
3695
+      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
3696
+      slidesBefore = slidesPerGroup + addSlidesAfter;
3697
+    }
3698
+    const from = Math.max((activeIndex || 0) - slidesBefore, 0);
3699
+    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
3700
+    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
3701
+
3702
+    Utils.extend(swiper.virtual, {
3703
+      from,
3704
+      to,
3705
+      offset,
3706
+      slidesGrid: swiper.slidesGrid,
3707
+    });
3708
+
3709
+    function onRendered() {
3710
+      swiper.updateSlides();
3711
+      swiper.updateProgress();
3712
+      swiper.updateSlidesClasses();
3713
+      if (swiper.lazy && swiper.params.lazy.enabled) {
3714
+        swiper.lazy.load();
3715
+      }
3716
+    }
3717
+
3718
+    if (previousFrom === from && previousTo === to && !force) {
3719
+      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
3720
+        swiper.slides.css(offsetProp, `${offset}px`);
3721
+      }
3722
+      swiper.updateProgress();
3723
+      return;
3724
+    }
3725
+    if (swiper.params.virtual.renderExternal) {
3726
+      swiper.params.virtual.renderExternal.call(swiper, {
3727
+        offset,
3728
+        from,
3729
+        to,
3730
+        slides: (function getSlides() {
3731
+          const slidesToRender = [];
3732
+          for (let i = from; i <= to; i += 1) {
3733
+            slidesToRender.push(slides[i]);
3734
+          }
3735
+          return slidesToRender;
3736
+        }()),
3737
+      });
3738
+      onRendered();
3739
+      return;
3740
+    }
3741
+    const prependIndexes = [];
3742
+    const appendIndexes = [];
3743
+    if (force) {
3744
+      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();
3745
+    } else {
3746
+      for (let i = previousFrom; i <= previousTo; i += 1) {
3747
+        if (i < from || i > to) {
3748
+          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove();
3749
+        }
3750
+      }
3751
+    }
3752
+    for (let i = 0; i < slides.length; i += 1) {
3753
+      if (i >= from && i <= to) {
3754
+        if (typeof previousTo === 'undefined' || force) {
3755
+          appendIndexes.push(i);
3756
+        } else {
3757
+          if (i > previousTo) appendIndexes.push(i);
3758
+          if (i < previousFrom) prependIndexes.push(i);
3759
+        }
3760
+      }
3761
+    }
3762
+    appendIndexes.forEach((index) => {
3763
+      swiper.$wrapperEl.append(renderSlide(slides[index], index));
3764
+    });
3765
+    prependIndexes.sort((a, b) => b - a).forEach((index) => {
3766
+      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
3767
+    });
3768
+    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);
3769
+    onRendered();
3770
+  },
3771
+  renderSlide(slide, index) {
3772
+    const swiper = this;
3773
+    const params = swiper.params.virtual;
3774
+    if (params.cache && swiper.virtual.cache[index]) {
3775
+      return swiper.virtual.cache[index];
3776
+    }
3777
+    const $slideEl = params.renderSlide
3778
+      ? $(params.renderSlide.call(swiper, slide, index))
3779
+      : $(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`);
3780
+    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
3781
+    if (params.cache) swiper.virtual.cache[index] = $slideEl;
3782
+    return $slideEl;
3783
+  },
3784
+  appendSlide(slides) {
3785
+    const swiper = this;
3786
+    if (typeof slides === 'object' && 'length' in slides) {
3787
+      for (let i = 0; i < slides.length; i += 1) {
3788
+        if (slides[i]) swiper.virtual.slides.push(slides[i]);
3789
+      }
3790
+    } else {
3791
+      swiper.virtual.slides.push(slides);
3792
+    }
3793
+    swiper.virtual.update(true);
3794
+  },
3795
+  prependSlide(slides) {
3796
+    const swiper = this;
3797
+    const activeIndex = swiper.activeIndex;
3798
+    let newActiveIndex = activeIndex + 1;
3799
+    let numberOfNewSlides = 1;
3800
+
3801
+    if (Array.isArray(slides)) {
3802
+      for (let i = 0; i < slides.length; i += 1) {
3803
+        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
3804
+      }
3805
+      newActiveIndex = activeIndex + slides.length;
3806
+      numberOfNewSlides = slides.length;
3807
+    } else {
3808
+      swiper.virtual.slides.unshift(slides);
3809
+    }
3810
+    if (swiper.params.virtual.cache) {
3811
+      const cache = swiper.virtual.cache;
3812
+      const newCache = {};
3813
+      Object.keys(cache).forEach((cachedIndex) => {
3814
+        const $cachedEl = cache[cachedIndex];
3815
+        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
3816
+        if (cachedElIndex) {
3817
+          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
3818
+        }
3819
+        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
3820
+      });
3821
+      swiper.virtual.cache = newCache;
3822
+    }
3823
+    swiper.virtual.update(true);
3824
+    swiper.slideTo(newActiveIndex, 0);
3825
+  },
3826
+  removeSlide(slidesIndexes) {
3827
+    const swiper = this;
3828
+    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
3829
+    let activeIndex = swiper.activeIndex;
3830
+    if (Array.isArray(slidesIndexes)) {
3831
+      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
3832
+        swiper.virtual.slides.splice(slidesIndexes[i], 1);
3833
+        if (swiper.params.virtual.cache) {
3834
+          delete swiper.virtual.cache[slidesIndexes[i]];
3835
+        }
3836
+        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
3837
+        activeIndex = Math.max(activeIndex, 0);
3838
+      }
3839
+    } else {
3840
+      swiper.virtual.slides.splice(slidesIndexes, 1);
3841
+      if (swiper.params.virtual.cache) {
3842
+        delete swiper.virtual.cache[slidesIndexes];
3843
+      }
3844
+      if (slidesIndexes < activeIndex) activeIndex -= 1;
3845
+      activeIndex = Math.max(activeIndex, 0);
3846
+    }
3847
+    swiper.virtual.update(true);
3848
+    swiper.slideTo(activeIndex, 0);
3849
+  },
3850
+  removeAllSlides() {
3851
+    const swiper = this;
3852
+    swiper.virtual.slides = [];
3853
+    if (swiper.params.virtual.cache) {
3854
+      swiper.virtual.cache = {};
3855
+    }
3856
+    swiper.virtual.update(true);
3857
+    swiper.slideTo(0, 0);
3858
+  },
3859
+};
3860
+
3861
+var virtual = {
3862
+  name: 'virtual',
3863
+  params: {
3864
+    virtual: {
3865
+      enabled: false,
3866
+      slides: [],
3867
+      cache: true,
3868
+      renderSlide: null,
3869
+      renderExternal: null,
3870
+      addSlidesBefore: 0,
3871
+      addSlidesAfter: 0,
3872
+    },
3873
+  },
3874
+  create() {
3875
+    const swiper = this;
3876
+    Utils.extend(swiper, {
3877
+      virtual: {
3878
+        update: Virtual.update.bind(swiper),
3879
+        appendSlide: Virtual.appendSlide.bind(swiper),
3880
+        prependSlide: Virtual.prependSlide.bind(swiper),
3881
+        removeSlide: Virtual.removeSlide.bind(swiper),
3882
+        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
3883
+        renderSlide: Virtual.renderSlide.bind(swiper),
3884
+        slides: swiper.params.virtual.slides,
3885
+        cache: {},
3886
+      },
3887
+    });
3888
+  },
3889
+  on: {
3890
+    beforeInit() {
3891
+      const swiper = this;
3892
+      if (!swiper.params.virtual.enabled) return;
3893
+      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
3894
+      const overwriteParams = {
3895
+        watchSlidesProgress: true,
3896
+      };
3897
+      Utils.extend(swiper.params, overwriteParams);
3898
+      Utils.extend(swiper.originalParams, overwriteParams);
3899
+
3900
+      if (!swiper.params.initialSlide) {
3901
+        swiper.virtual.update();
3902
+      }
3903
+    },
3904
+    setTranslate() {
3905
+      const swiper = this;
3906
+      if (!swiper.params.virtual.enabled) return;
3907
+      swiper.virtual.update();
3908
+    },
3909
+  },
3910
+};
3911
+
3912
+const Keyboard = {
3913
+  handle(event) {
3914
+    const swiper = this;
3915
+    const { rtlTranslate: rtl } = swiper;
3916
+    let e = event;
3917
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
3918
+    const kc = e.keyCode || e.charCode;
3919
+    // Directions locks
3920
+    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {
3921
+      return false;
3922
+    }
3923
+    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {
3924
+      return false;
3925
+    }
3926
+    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
3927
+      return undefined;
3928
+    }
3929
+    if (document$1.activeElement && document$1.activeElement.nodeName && (document$1.activeElement.nodeName.toLowerCase() === 'input' || document$1.activeElement.nodeName.toLowerCase() === 'textarea')) {
3930
+      return undefined;
3931
+    }
3932
+    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
3933
+      let inView = false;
3934
+      // Check that swiper should be inside of visible area of window
3935
+      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {
3936
+        return undefined;
3937
+      }
3938
+      const windowWidth = window.innerWidth;
3939
+      const windowHeight = window.innerHeight;
3940
+      const swiperOffset = swiper.$el.offset();
3941
+      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
3942
+      const swiperCoord = [
3943
+        [swiperOffset.left, swiperOffset.top],
3944
+        [swiperOffset.left + swiper.width, swiperOffset.top],
3945
+        [swiperOffset.left, swiperOffset.top + swiper.height],
3946
+        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],
3947
+      ];
3948
+      for (let i = 0; i < swiperCoord.length; i += 1) {
3949
+        const point = swiperCoord[i];
3950
+        if (
3951
+          point[0] >= 0 && point[0] <= windowWidth
3952
+          && point[1] >= 0 && point[1] <= windowHeight
3953
+        ) {
3954
+          inView = true;
3955
+        }
3956
+      }
3957
+      if (!inView) return undefined;
3958
+    }
3959
+    if (swiper.isHorizontal()) {
3960
+      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
3961
+        if (e.preventDefault) e.preventDefault();
3962
+        else e.returnValue = false;
3963
+      }
3964
+      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();
3965
+      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();
3966
+    } else {
3967
+      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
3968
+        if (e.preventDefault) e.preventDefault();
3969
+        else e.returnValue = false;
3970
+      }
3971
+      if (kc === 34 || kc === 40) swiper.slideNext();
3972
+      if (kc === 33 || kc === 38) swiper.slidePrev();
3973
+    }
3974
+    swiper.emit('keyPress', kc);
3975
+    return undefined;
3976
+  },
3977
+  enable() {
3978
+    const swiper = this;
3979
+    if (swiper.keyboard.enabled) return;
3980
+    $(document$1).on('keydown', swiper.keyboard.handle);
3981
+    swiper.keyboard.enabled = true;
3982
+  },
3983
+  disable() {
3984
+    const swiper = this;
3985
+    if (!swiper.keyboard.enabled) return;
3986
+    $(document$1).off('keydown', swiper.keyboard.handle);
3987
+    swiper.keyboard.enabled = false;
3988
+  },
3989
+};
3990
+
3991
+var keyboard = {
3992
+  name: 'keyboard',
3993
+  params: {
3994
+    keyboard: {
3995
+      enabled: false,
3996
+      onlyInViewport: true,
3997
+    },
3998
+  },
3999
+  create() {
4000
+    const swiper = this;
4001
+    Utils.extend(swiper, {
4002
+      keyboard: {
4003
+        enabled: false,
4004
+        enable: Keyboard.enable.bind(swiper),
4005
+        disable: Keyboard.disable.bind(swiper),
4006
+        handle: Keyboard.handle.bind(swiper),
4007
+      },
4008
+    });
4009
+  },
4010
+  on: {
4011
+    init() {
4012
+      const swiper = this;
4013
+      if (swiper.params.keyboard.enabled) {
4014
+        swiper.keyboard.enable();
4015
+      }
4016
+    },
4017
+    destroy() {
4018
+      const swiper = this;
4019
+      if (swiper.keyboard.enabled) {
4020
+        swiper.keyboard.disable();
4021
+      }
4022
+    },
4023
+  },
4024
+};
4025
+
4026
+function isEventSupported() {
4027
+  const eventName = 'onwheel';
4028
+  let isSupported = eventName in document$1;
4029
+
4030
+  if (!isSupported) {
4031
+    const element = document$1.createElement('div');
4032
+    element.setAttribute(eventName, 'return;');
4033
+    isSupported = typeof element[eventName] === 'function';
4034
+  }
4035
+
4036
+  if (!isSupported
4037
+    && document$1.implementation
4038
+    && document$1.implementation.hasFeature
4039
+    // always returns true in newer browsers as per the standard.
4040
+    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
4041
+    && document$1.implementation.hasFeature('', '') !== true
4042
+  ) {
4043
+    // This is the only way to test support for the `wheel` event in IE9+.
4044
+    isSupported = document$1.implementation.hasFeature('Events.wheel', '3.0');
4045
+  }
4046
+
4047
+  return isSupported;
4048
+}
4049
+const Mousewheel = {
4050
+  lastScrollTime: Utils.now(),
4051
+  lastEventBeforeSnap: undefined,
4052
+  recentWheelEvents: [],
4053
+  event() {
4054
+    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
4055
+    return isEventSupported() ? 'wheel' : 'mousewheel';
4056
+  },
4057
+  normalize(e) {
4058
+    // Reasonable defaults
4059
+    const PIXEL_STEP = 10;
4060
+    const LINE_HEIGHT = 40;
4061
+    const PAGE_HEIGHT = 800;
4062
+
4063
+    let sX = 0;
4064
+    let sY = 0; // spinX, spinY
4065
+    let pX = 0;
4066
+    let pY = 0; // pixelX, pixelY
4067
+
4068
+    // Legacy
4069
+    if ('detail' in e) {
4070
+      sY = e.detail;
4071
+    }
4072
+    if ('wheelDelta' in e) {
4073
+      sY = -e.wheelDelta / 120;
4074
+    }
4075
+    if ('wheelDeltaY' in e) {
4076
+      sY = -e.wheelDeltaY / 120;
4077
+    }
4078
+    if ('wheelDeltaX' in e) {
4079
+      sX = -e.wheelDeltaX / 120;
4080
+    }
4081
+
4082
+    // side scrolling on FF with DOMMouseScroll
4083
+    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
4084
+      sX = sY;
4085
+      sY = 0;
4086
+    }
4087
+
4088
+    pX = sX * PIXEL_STEP;
4089
+    pY = sY * PIXEL_STEP;
4090
+
4091
+    if ('deltaY' in e) {
4092
+      pY = e.deltaY;
4093
+    }
4094
+    if ('deltaX' in e) {
4095
+      pX = e.deltaX;
4096
+    }
4097
+
4098
+    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
4099
+      pX = pY;
4100
+      pY = 0;
4101
+    }
4102
+
4103
+    if ((pX || pY) && e.deltaMode) {
4104
+      if (e.deltaMode === 1) { // delta in LINE units
4105
+        pX *= LINE_HEIGHT;
4106
+        pY *= LINE_HEIGHT;
4107
+      } else { // delta in PAGE units
4108
+        pX *= PAGE_HEIGHT;
4109
+        pY *= PAGE_HEIGHT;
4110
+      }
4111
+    }
4112
+
4113
+    // Fall-back if spin cannot be determined
4114
+    if (pX && !sX) {
4115
+      sX = (pX < 1) ? -1 : 1;
4116
+    }
4117
+    if (pY && !sY) {
4118
+      sY = (pY < 1) ? -1 : 1;
4119
+    }
4120
+
4121
+    return {
4122
+      spinX: sX,
4123
+      spinY: sY,
4124
+      pixelX: pX,
4125
+      pixelY: pY,
4126
+    };
4127
+  },
4128
+  handleMouseEnter() {
4129
+    const swiper = this;
4130
+    swiper.mouseEntered = true;
4131
+  },
4132
+  handleMouseLeave() {
4133
+    const swiper = this;
4134
+    swiper.mouseEntered = false;
4135
+  },
4136
+  handle(event) {
4137
+    let e = event;
4138
+    const swiper = this;
4139
+    const params = swiper.params.mousewheel;
4140
+
4141
+    if (swiper.params.cssMode) {
4142
+      e.preventDefault();
4143
+    }
4144
+
4145
+    let target = swiper.$el;
4146
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4147
+      target = $(swiper.params.mousewheel.eventsTarged);
4148
+    }
4149
+    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
4150
+
4151
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
4152
+    let delta = 0;
4153
+    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
4154
+
4155
+    const data = Mousewheel.normalize(e);
4156
+
4157
+    if (params.forceToAxis) {
4158
+      if (swiper.isHorizontal()) {
4159
+        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
4160
+        else return true;
4161
+      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
4162
+      else return true;
4163
+    } else {
4164
+      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
4165
+    }
4166
+
4167
+    if (delta === 0) return true;
4168
+
4169
+    if (params.invert) delta = -delta;
4170
+
4171
+    if (!swiper.params.freeMode) {
4172
+      // Register the new event in a variable which stores the relevant data
4173
+      const newEvent = {
4174
+        time: Utils.now(),
4175
+        delta: Math.abs(delta),
4176
+        direction: Math.sign(delta),
4177
+        raw: event,
4178
+      };
4179
+
4180
+      // Keep the most recent events
4181
+      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
4182
+      if (recentWheelEvents.length >= 2) {
4183
+        recentWheelEvents.shift(); // only store the last N events
4184
+      }
4185
+      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
4186
+      recentWheelEvents.push(newEvent);
4187
+
4188
+      // If there is at least one previous recorded event:
4189
+      //   If direction has changed or
4190
+      //   if the scroll is quicker than the previous one:
4191
+      //     Animate the slider.
4192
+      // Else (this is the first time the wheel is moved):
4193
+      //     Animate the slider.
4194
+      if (prevEvent) {
4195
+        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
4196
+          swiper.mousewheel.animateSlider(newEvent);
4197
+        }
4198
+      } else {
4199
+        swiper.mousewheel.animateSlider(newEvent);
4200
+      }
4201
+
4202
+      // If it's time to release the scroll:
4203
+      //   Return now so you don't hit the preventDefault.
4204
+      if (swiper.mousewheel.releaseScroll(newEvent)) {
4205
+        return true;
4206
+      }
4207
+    } else {
4208
+      // Freemode or scrollContainer:
4209
+
4210
+      // If we recently snapped after a momentum scroll, then ignore wheel events
4211
+      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
4212
+      // or if it's a new scroll (larger delta or inverse sign as last event before
4213
+      // an end-of-momentum snap).
4214
+      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
4215
+      const { lastEventBeforeSnap } = swiper.mousewheel;
4216
+      const ignoreWheelEvents = lastEventBeforeSnap
4217
+        && newEvent.time < lastEventBeforeSnap.time + 500
4218
+        && newEvent.delta <= lastEventBeforeSnap.delta
4219
+        && newEvent.direction === lastEventBeforeSnap.direction;
4220
+      if (!ignoreWheelEvents) {
4221
+        swiper.mousewheel.lastEventBeforeSnap = undefined;
4222
+
4223
+        if (swiper.params.loop) {
4224
+          swiper.loopFix();
4225
+        }
4226
+        let position = swiper.getTranslate() + (delta * params.sensitivity);
4227
+        const wasBeginning = swiper.isBeginning;
4228
+        const wasEnd = swiper.isEnd;
4229
+
4230
+        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
4231
+        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
4232
+
4233
+        swiper.setTransition(0);
4234
+        swiper.setTranslate(position);
4235
+        swiper.updateProgress();
4236
+        swiper.updateActiveIndex();
4237
+        swiper.updateSlidesClasses();
4238
+
4239
+        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
4240
+          swiper.updateSlidesClasses();
4241
+        }
4242
+
4243
+        if (swiper.params.freeModeSticky) {
4244
+          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
4245
+          // the end of a momentum scroll by storing recent (N=15?) wheel events.
4246
+          // 1. do all N events have decreasing or same (absolute value) delta?
4247
+          // 2. did all N events arrive in the last M (M=500?) msecs?
4248
+          // 3. does the earliest event have an (absolute value) delta that's
4249
+          //    at least P (P=1?) larger than the most recent event's delta?
4250
+          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
4251
+          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
4252
+          // Snap immediately and ignore remaining wheel events in this scroll.
4253
+          // See comment above for "remaining wheel events in this scroll" determination.
4254
+          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
4255
+          clearTimeout(swiper.mousewheel.timeout);
4256
+          swiper.mousewheel.timeout = undefined;
4257
+          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
4258
+          if (recentWheelEvents.length >= 15) {
4259
+            recentWheelEvents.shift(); // only store the last N events
4260
+          }
4261
+          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
4262
+          const firstEvent = recentWheelEvents[0];
4263
+          recentWheelEvents.push(newEvent);
4264
+          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
4265
+            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
4266
+            recentWheelEvents.splice(0);
4267
+          } else if (recentWheelEvents.length >= 15
4268
+              && newEvent.time - firstEvent.time < 500
4269
+              && firstEvent.delta - newEvent.delta >= 1
4270
+              && newEvent.delta <= 6
4271
+          ) {
4272
+            // We're at the end of the deceleration of a momentum scroll, so there's no need
4273
+            // to wait for more events. Snap ASAP on the next tick.
4274
+            // Also, because there's some remaining momentum we'll bias the snap in the
4275
+            // direction of the ongoing scroll because it's better UX for the scroll to snap
4276
+            // in the same direction as the scroll instead of reversing to snap.  Therefore,
4277
+            // if it's already scrolled more than 20% in the current direction, keep going.
4278
+            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
4279
+            swiper.mousewheel.lastEventBeforeSnap = newEvent;
4280
+            recentWheelEvents.splice(0);
4281
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
4282
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
4283
+            }, 0); // no delay; move on next tick
4284
+          }
4285
+          if (!swiper.mousewheel.timeout) {
4286
+            // if we get here, then we haven't detected the end of a momentum scroll, so
4287
+            // we'll consider a scroll "complete" when there haven't been any wheel events
4288
+            // for 500ms.
4289
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
4290
+              const snapToThreshold = 0.5;
4291
+              swiper.mousewheel.lastEventBeforeSnap = newEvent;
4292
+              recentWheelEvents.splice(0);
4293
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
4294
+            }, 500);
4295
+          }
4296
+        }
4297
+
4298
+        // Emit event
4299
+        if (!ignoreWheelEvents) swiper.emit('scroll', e);
4300
+
4301
+        // Stop autoplay
4302
+        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
4303
+        // Return page scroll on edge positions
4304
+        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
4305
+      }
4306
+    }
4307
+
4308
+    if (e.preventDefault) e.preventDefault();
4309
+    else e.returnValue = false;
4310
+    return false;
4311
+  },
4312
+  animateSlider(newEvent) {
4313
+    const swiper = this;
4314
+    // If the movement is NOT big enough and
4315
+    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
4316
+    //   Don't go any further (avoid insignificant scroll movement).
4317
+    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
4318
+      // Return false as a default
4319
+      return true;
4320
+    }
4321
+    // If user is scrolling towards the end:
4322
+    //   If the slider hasn't hit the latest slide or
4323
+    //   if the slider is a loop and
4324
+    //   if the slider isn't moving right now:
4325
+    //     Go to next slide and
4326
+    //     emit a scroll event.
4327
+    // Else (the user is scrolling towards the beginning) and
4328
+    // if the slider hasn't hit the first slide or
4329
+    // if the slider is a loop and
4330
+    // if the slider isn't moving right now:
4331
+    //   Go to prev slide and
4332
+    //   emit a scroll event.
4333
+    if (newEvent.direction < 0) {
4334
+      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
4335
+        swiper.slideNext();
4336
+        swiper.emit('scroll', newEvent.raw);
4337
+      }
4338
+    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
4339
+      swiper.slidePrev();
4340
+      swiper.emit('scroll', newEvent.raw);
4341
+    }
4342
+    // If you got here is because an animation has been triggered so store the current time
4343
+    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();
4344
+    // Return false as a default
4345
+    return false;
4346
+  },
4347
+  releaseScroll(newEvent) {
4348
+    const swiper = this;
4349
+    const params = swiper.params.mousewheel;
4350
+    if (newEvent.direction < 0) {
4351
+      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
4352
+        // Return true to animate scroll on edges
4353
+        return true;
4354
+      }
4355
+    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
4356
+      // Return true to animate scroll on edges
4357
+      return true;
4358
+    }
4359
+    return false;
4360
+  },
4361
+  enable() {
4362
+    const swiper = this;
4363
+    const event = Mousewheel.event();
4364
+    if (swiper.params.cssMode) {
4365
+      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
4366
+      return true;
4367
+    }
4368
+    if (!event) return false;
4369
+    if (swiper.mousewheel.enabled) return false;
4370
+    let target = swiper.$el;
4371
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4372
+      target = $(swiper.params.mousewheel.eventsTarged);
4373
+    }
4374
+    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
4375
+    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
4376
+    target.on(event, swiper.mousewheel.handle);
4377
+    swiper.mousewheel.enabled = true;
4378
+    return true;
4379
+  },
4380
+  disable() {
4381
+    const swiper = this;
4382
+    const event = Mousewheel.event();
4383
+    if (swiper.params.cssMode) {
4384
+      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
4385
+      return true;
4386
+    }
4387
+    if (!event) return false;
4388
+    if (!swiper.mousewheel.enabled) return false;
4389
+    let target = swiper.$el;
4390
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
4391
+      target = $(swiper.params.mousewheel.eventsTarged);
4392
+    }
4393
+    target.off(event, swiper.mousewheel.handle);
4394
+    swiper.mousewheel.enabled = false;
4395
+    return true;
4396
+  },
4397
+};
4398
+
4399
+var mousewheel = {
4400
+  name: 'mousewheel',
4401
+  params: {
4402
+    mousewheel: {
4403
+      enabled: false,
4404
+      releaseOnEdges: false,
4405
+      invert: false,
4406
+      forceToAxis: false,
4407
+      sensitivity: 1,
4408
+      eventsTarged: 'container',
4409
+    },
4410
+  },
4411
+  create() {
4412
+    const swiper = this;
4413
+    Utils.extend(swiper, {
4414
+      mousewheel: {
4415
+        enabled: false,
4416
+        enable: Mousewheel.enable.bind(swiper),
4417
+        disable: Mousewheel.disable.bind(swiper),
4418
+        handle: Mousewheel.handle.bind(swiper),
4419
+        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
4420
+        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
4421
+        animateSlider: Mousewheel.animateSlider.bind(swiper),
4422
+        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
4423
+        lastScrollTime: Utils.now(),
4424
+        lastEventBeforeSnap: undefined,
4425
+        recentWheelEvents: [],
4426
+      },
4427
+    });
4428
+  },
4429
+  on: {
4430
+    init() {
4431
+      const swiper = this;
4432
+      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
4433
+        swiper.mousewheel.disable();
4434
+      }
4435
+      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
4436
+    },
4437
+    destroy() {
4438
+      const swiper = this;
4439
+      if (swiper.params.cssMode) {
4440
+        swiper.mousewheel.enable();
4441
+      }
4442
+      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
4443
+    },
4444
+  },
4445
+};
4446
+
4447
+const Navigation = {
4448
+  update() {
4449
+    // Update Navigation Buttons
4450
+    const swiper = this;
4451
+    const params = swiper.params.navigation;
4452
+
4453
+    if (swiper.params.loop) return;
4454
+    const { $nextEl, $prevEl } = swiper.navigation;
4455
+
4456
+    if ($prevEl && $prevEl.length > 0) {
4457
+      if (swiper.isBeginning) {
4458
+        $prevEl.addClass(params.disabledClass);
4459
+      } else {
4460
+        $prevEl.removeClass(params.disabledClass);
4461
+      }
4462
+      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4463
+    }
4464
+    if ($nextEl && $nextEl.length > 0) {
4465
+      if (swiper.isEnd) {
4466
+        $nextEl.addClass(params.disabledClass);
4467
+      } else {
4468
+        $nextEl.removeClass(params.disabledClass);
4469
+      }
4470
+      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4471
+    }
4472
+  },
4473
+  onPrevClick(e) {
4474
+    const swiper = this;
4475
+    e.preventDefault();
4476
+    if (swiper.isBeginning && !swiper.params.loop) return;
4477
+    swiper.slidePrev();
4478
+  },
4479
+  onNextClick(e) {
4480
+    const swiper = this;
4481
+    e.preventDefault();
4482
+    if (swiper.isEnd && !swiper.params.loop) return;
4483
+    swiper.slideNext();
4484
+  },
4485
+  init() {
4486
+    const swiper = this;
4487
+    const params = swiper.params.navigation;
4488
+    if (!(params.nextEl || params.prevEl)) return;
4489
+
4490
+    let $nextEl;
4491
+    let $prevEl;
4492
+    if (params.nextEl) {
4493
+      $nextEl = $(params.nextEl);
4494
+      if (
4495
+        swiper.params.uniqueNavElements
4496
+        && typeof params.nextEl === 'string'
4497
+        && $nextEl.length > 1
4498
+        && swiper.$el.find(params.nextEl).length === 1
4499
+      ) {
4500
+        $nextEl = swiper.$el.find(params.nextEl);
4501
+      }
4502
+    }
4503
+    if (params.prevEl) {
4504
+      $prevEl = $(params.prevEl);
4505
+      if (
4506
+        swiper.params.uniqueNavElements
4507
+        && typeof params.prevEl === 'string'
4508
+        && $prevEl.length > 1
4509
+        && swiper.$el.find(params.prevEl).length === 1
4510
+      ) {
4511
+        $prevEl = swiper.$el.find(params.prevEl);
4512
+      }
4513
+    }
4514
+
4515
+    if ($nextEl && $nextEl.length > 0) {
4516
+      $nextEl.on('click', swiper.navigation.onNextClick);
4517
+    }
4518
+    if ($prevEl && $prevEl.length > 0) {
4519
+      $prevEl.on('click', swiper.navigation.onPrevClick);
4520
+    }
4521
+
4522
+    Utils.extend(swiper.navigation, {
4523
+      $nextEl,
4524
+      nextEl: $nextEl && $nextEl[0],
4525
+      $prevEl,
4526
+      prevEl: $prevEl && $prevEl[0],
4527
+    });
4528
+  },
4529
+  destroy() {
4530
+    const swiper = this;
4531
+    const { $nextEl, $prevEl } = swiper.navigation;
4532
+    if ($nextEl && $nextEl.length) {
4533
+      $nextEl.off('click', swiper.navigation.onNextClick);
4534
+      $nextEl.removeClass(swiper.params.navigation.disabledClass);
4535
+    }
4536
+    if ($prevEl && $prevEl.length) {
4537
+      $prevEl.off('click', swiper.navigation.onPrevClick);
4538
+      $prevEl.removeClass(swiper.params.navigation.disabledClass);
4539
+    }
4540
+  },
4541
+};
4542
+
4543
+var navigation = {
4544
+  name: 'navigation',
4545
+  params: {
4546
+    navigation: {
4547
+      nextEl: null,
4548
+      prevEl: null,
4549
+
4550
+      hideOnClick: false,
4551
+      disabledClass: 'swiper-button-disabled',
4552
+      hiddenClass: 'swiper-button-hidden',
4553
+      lockClass: 'swiper-button-lock',
4554
+    },
4555
+  },
4556
+  create() {
4557
+    const swiper = this;
4558
+    Utils.extend(swiper, {
4559
+      navigation: {
4560
+        init: Navigation.init.bind(swiper),
4561
+        update: Navigation.update.bind(swiper),
4562
+        destroy: Navigation.destroy.bind(swiper),
4563
+        onNextClick: Navigation.onNextClick.bind(swiper),
4564
+        onPrevClick: Navigation.onPrevClick.bind(swiper),
4565
+      },
4566
+    });
4567
+  },
4568
+  on: {
4569
+    init() {
4570
+      const swiper = this;
4571
+      swiper.navigation.init();
4572
+      swiper.navigation.update();
4573
+    },
4574
+    toEdge() {
4575
+      const swiper = this;
4576
+      swiper.navigation.update();
4577
+    },
4578
+    fromEdge() {
4579
+      const swiper = this;
4580
+      swiper.navigation.update();
4581
+    },
4582
+    destroy() {
4583
+      const swiper = this;
4584
+      swiper.navigation.destroy();
4585
+    },
4586
+    click(e) {
4587
+      const swiper = this;
4588
+      const { $nextEl, $prevEl } = swiper.navigation;
4589
+      if (
4590
+        swiper.params.navigation.hideOnClick
4591
+        && !$(e.target).is($prevEl)
4592
+        && !$(e.target).is($nextEl)
4593
+      ) {
4594
+        let isHidden;
4595
+        if ($nextEl) {
4596
+          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
4597
+        } else if ($prevEl) {
4598
+          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
4599
+        }
4600
+        if (isHidden === true) {
4601
+          swiper.emit('navigationShow', swiper);
4602
+        } else {
4603
+          swiper.emit('navigationHide', swiper);
4604
+        }
4605
+        if ($nextEl) {
4606
+          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
4607
+        }
4608
+        if ($prevEl) {
4609
+          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
4610
+        }
4611
+      }
4612
+    },
4613
+  },
4614
+};
4615
+
4616
+const Pagination = {
4617
+  update() {
4618
+    // Render || Update Pagination bullets/items
4619
+    const swiper = this;
4620
+    const rtl = swiper.rtl;
4621
+    const params = swiper.params.pagination;
4622
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4623
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
4624
+    const $el = swiper.pagination.$el;
4625
+    // Current/Total
4626
+    let current;
4627
+    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
4628
+    if (swiper.params.loop) {
4629
+      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
4630
+      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
4631
+        current -= (slidesLength - (swiper.loopedSlides * 2));
4632
+      }
4633
+      if (current > total - 1) current -= total;
4634
+      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
4635
+    } else if (typeof swiper.snapIndex !== 'undefined') {
4636
+      current = swiper.snapIndex;
4637
+    } else {
4638
+      current = swiper.activeIndex || 0;
4639
+    }
4640
+    // Types
4641
+    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
4642
+      const bullets = swiper.pagination.bullets;
4643
+      let firstIndex;
4644
+      let lastIndex;
4645
+      let midIndex;
4646
+      if (params.dynamicBullets) {
4647
+        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
4648
+        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);
4649
+        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
4650
+          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
4651
+          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
4652
+            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
4653
+          } else if (swiper.pagination.dynamicBulletIndex < 0) {
4654
+            swiper.pagination.dynamicBulletIndex = 0;
4655
+          }
4656
+        }
4657
+        firstIndex = current - swiper.pagination.dynamicBulletIndex;
4658
+        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
4659
+        midIndex = (lastIndex + firstIndex) / 2;
4660
+      }
4661
+      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);
4662
+      if ($el.length > 1) {
4663
+        bullets.each((index, bullet) => {
4664
+          const $bullet = $(bullet);
4665
+          const bulletIndex = $bullet.index();
4666
+          if (bulletIndex === current) {
4667
+            $bullet.addClass(params.bulletActiveClass);
4668
+          }
4669
+          if (params.dynamicBullets) {
4670
+            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
4671
+              $bullet.addClass(`${params.bulletActiveClass}-main`);
4672
+            }
4673
+            if (bulletIndex === firstIndex) {
4674
+              $bullet
4675
+                .prev()
4676
+                .addClass(`${params.bulletActiveClass}-prev`)
4677
+                .prev()
4678
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
4679
+            }
4680
+            if (bulletIndex === lastIndex) {
4681
+              $bullet
4682
+                .next()
4683
+                .addClass(`${params.bulletActiveClass}-next`)
4684
+                .next()
4685
+                .addClass(`${params.bulletActiveClass}-next-next`);
4686
+            }
4687
+          }
4688
+        });
4689
+      } else {
4690
+        const $bullet = bullets.eq(current);
4691
+        const bulletIndex = $bullet.index();
4692
+        $bullet.addClass(params.bulletActiveClass);
4693
+        if (params.dynamicBullets) {
4694
+          const $firstDisplayedBullet = bullets.eq(firstIndex);
4695
+          const $lastDisplayedBullet = bullets.eq(lastIndex);
4696
+          for (let i = firstIndex; i <= lastIndex; i += 1) {
4697
+            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);
4698
+          }
4699
+          if (swiper.params.loop) {
4700
+            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
4701
+              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {
4702
+                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);
4703
+              }
4704
+              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);
4705
+            } else {
4706
+              $firstDisplayedBullet
4707
+                .prev()
4708
+                .addClass(`${params.bulletActiveClass}-prev`)
4709
+                .prev()
4710
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
4711
+              $lastDisplayedBullet
4712
+                .next()
4713
+                .addClass(`${params.bulletActiveClass}-next`)
4714
+                .next()
4715
+                .addClass(`${params.bulletActiveClass}-next-next`);
4716
+            }
4717
+          } else {
4718
+            $firstDisplayedBullet
4719
+              .prev()
4720
+              .addClass(`${params.bulletActiveClass}-prev`)
4721
+              .prev()
4722
+              .addClass(`${params.bulletActiveClass}-prev-prev`);
4723
+            $lastDisplayedBullet
4724
+              .next()
4725
+              .addClass(`${params.bulletActiveClass}-next`)
4726
+              .next()
4727
+              .addClass(`${params.bulletActiveClass}-next-next`);
4728
+          }
4729
+        }
4730
+      }
4731
+      if (params.dynamicBullets) {
4732
+        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
4733
+        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
4734
+        const offsetProp = rtl ? 'right' : 'left';
4735
+        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);
4736
+      }
4737
+    }
4738
+    if (params.type === 'fraction') {
4739
+      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));
4740
+      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));
4741
+    }
4742
+    if (params.type === 'progressbar') {
4743
+      let progressbarDirection;
4744
+      if (params.progressbarOpposite) {
4745
+        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
4746
+      } else {
4747
+        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
4748
+      }
4749
+      const scale = (current + 1) / total;
4750
+      let scaleX = 1;
4751
+      let scaleY = 1;
4752
+      if (progressbarDirection === 'horizontal') {
4753
+        scaleX = scale;
4754
+      } else {
4755
+        scaleY = scale;
4756
+      }
4757
+      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);
4758
+    }
4759
+    if (params.type === 'custom' && params.renderCustom) {
4760
+      $el.html(params.renderCustom(swiper, current + 1, total));
4761
+      swiper.emit('paginationRender', swiper, $el[0]);
4762
+    } else {
4763
+      swiper.emit('paginationUpdate', swiper, $el[0]);
4764
+    }
4765
+    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
4766
+  },
4767
+  render() {
4768
+    // Render Container
4769
+    const swiper = this;
4770
+    const params = swiper.params.pagination;
4771
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4772
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
4773
+
4774
+    const $el = swiper.pagination.$el;
4775
+    let paginationHTML = '';
4776
+    if (params.type === 'bullets') {
4777
+      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
4778
+      for (let i = 0; i < numberOfBullets; i += 1) {
4779
+        if (params.renderBullet) {
4780
+          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
4781
+        } else {
4782
+          paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`;
4783
+        }
4784
+      }
4785
+      $el.html(paginationHTML);
4786
+      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);
4787
+    }
4788
+    if (params.type === 'fraction') {
4789
+      if (params.renderFraction) {
4790
+        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
4791
+      } else {
4792
+        paginationHTML = `<span class="${params.currentClass}"></span>`
4793
+        + ' / '
4794
+        + `<span class="${params.totalClass}"></span>`;
4795
+      }
4796
+      $el.html(paginationHTML);
4797
+    }
4798
+    if (params.type === 'progressbar') {
4799
+      if (params.renderProgressbar) {
4800
+        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
4801
+      } else {
4802
+        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
4803
+      }
4804
+      $el.html(paginationHTML);
4805
+    }
4806
+    if (params.type !== 'custom') {
4807
+      swiper.emit('paginationRender', swiper.pagination.$el[0]);
4808
+    }
4809
+  },
4810
+  init() {
4811
+    const swiper = this;
4812
+    const params = swiper.params.pagination;
4813
+    if (!params.el) return;
4814
+
4815
+    let $el = $(params.el);
4816
+    if ($el.length === 0) return;
4817
+
4818
+    if (
4819
+      swiper.params.uniqueNavElements
4820
+      && typeof params.el === 'string'
4821
+      && $el.length > 1
4822
+      && swiper.$el.find(params.el).length === 1
4823
+    ) {
4824
+      $el = swiper.$el.find(params.el);
4825
+    }
4826
+
4827
+    if (params.type === 'bullets' && params.clickable) {
4828
+      $el.addClass(params.clickableClass);
4829
+    }
4830
+
4831
+    $el.addClass(params.modifierClass + params.type);
4832
+
4833
+    if (params.type === 'bullets' && params.dynamicBullets) {
4834
+      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);
4835
+      swiper.pagination.dynamicBulletIndex = 0;
4836
+      if (params.dynamicMainBullets < 1) {
4837
+        params.dynamicMainBullets = 1;
4838
+      }
4839
+    }
4840
+    if (params.type === 'progressbar' && params.progressbarOpposite) {
4841
+      $el.addClass(params.progressbarOppositeClass);
4842
+    }
4843
+
4844
+    if (params.clickable) {
4845
+      $el.on('click', `.${params.bulletClass}`, function onClick(e) {
4846
+        e.preventDefault();
4847
+        let index = $(this).index() * swiper.params.slidesPerGroup;
4848
+        if (swiper.params.loop) index += swiper.loopedSlides;
4849
+        swiper.slideTo(index);
4850
+      });
4851
+    }
4852
+
4853
+    Utils.extend(swiper.pagination, {
4854
+      $el,
4855
+      el: $el[0],
4856
+    });
4857
+  },
4858
+  destroy() {
4859
+    const swiper = this;
4860
+    const params = swiper.params.pagination;
4861
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
4862
+    const $el = swiper.pagination.$el;
4863
+
4864
+    $el.removeClass(params.hiddenClass);
4865
+    $el.removeClass(params.modifierClass + params.type);
4866
+    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
4867
+    if (params.clickable) {
4868
+      $el.off('click', `.${params.bulletClass}`);
4869
+    }
4870
+  },
4871
+};
4872
+
4873
+var pagination = {
4874
+  name: 'pagination',
4875
+  params: {
4876
+    pagination: {
4877
+      el: null,
4878
+      bulletElement: 'span',
4879
+      clickable: false,
4880
+      hideOnClick: false,
4881
+      renderBullet: null,
4882
+      renderProgressbar: null,
4883
+      renderFraction: null,
4884
+      renderCustom: null,
4885
+      progressbarOpposite: false,
4886
+      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
4887
+      dynamicBullets: false,
4888
+      dynamicMainBullets: 1,
4889
+      formatFractionCurrent: (number) => number,
4890
+      formatFractionTotal: (number) => number,
4891
+      bulletClass: 'swiper-pagination-bullet',
4892
+      bulletActiveClass: 'swiper-pagination-bullet-active',
4893
+      modifierClass: 'swiper-pagination-', // NEW
4894
+      currentClass: 'swiper-pagination-current',
4895
+      totalClass: 'swiper-pagination-total',
4896
+      hiddenClass: 'swiper-pagination-hidden',
4897
+      progressbarFillClass: 'swiper-pagination-progressbar-fill',
4898
+      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
4899
+      clickableClass: 'swiper-pagination-clickable', // NEW
4900
+      lockClass: 'swiper-pagination-lock',
4901
+    },
4902
+  },
4903
+  create() {
4904
+    const swiper = this;
4905
+    Utils.extend(swiper, {
4906
+      pagination: {
4907
+        init: Pagination.init.bind(swiper),
4908
+        render: Pagination.render.bind(swiper),
4909
+        update: Pagination.update.bind(swiper),
4910
+        destroy: Pagination.destroy.bind(swiper),
4911
+        dynamicBulletIndex: 0,
4912
+      },
4913
+    });
4914
+  },
4915
+  on: {
4916
+    init() {
4917
+      const swiper = this;
4918
+      swiper.pagination.init();
4919
+      swiper.pagination.render();
4920
+      swiper.pagination.update();
4921
+    },
4922
+    activeIndexChange() {
4923
+      const swiper = this;
4924
+      if (swiper.params.loop) {
4925
+        swiper.pagination.update();
4926
+      } else if (typeof swiper.snapIndex === 'undefined') {
4927
+        swiper.pagination.update();
4928
+      }
4929
+    },
4930
+    snapIndexChange() {
4931
+      const swiper = this;
4932
+      if (!swiper.params.loop) {
4933
+        swiper.pagination.update();
4934
+      }
4935
+    },
4936
+    slidesLengthChange() {
4937
+      const swiper = this;
4938
+      if (swiper.params.loop) {
4939
+        swiper.pagination.render();
4940
+        swiper.pagination.update();
4941
+      }
4942
+    },
4943
+    snapGridLengthChange() {
4944
+      const swiper = this;
4945
+      if (!swiper.params.loop) {
4946
+        swiper.pagination.render();
4947
+        swiper.pagination.update();
4948
+      }
4949
+    },
4950
+    destroy() {
4951
+      const swiper = this;
4952
+      swiper.pagination.destroy();
4953
+    },
4954
+    click(e) {
4955
+      const swiper = this;
4956
+      if (
4957
+        swiper.params.pagination.el
4958
+        && swiper.params.pagination.hideOnClick
4959
+        && swiper.pagination.$el.length > 0
4960
+        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
4961
+      ) {
4962
+        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
4963
+        if (isHidden === true) {
4964
+          swiper.emit('paginationShow', swiper);
4965
+        } else {
4966
+          swiper.emit('paginationHide', swiper);
4967
+        }
4968
+        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
4969
+      }
4970
+    },
4971
+  },
4972
+};
4973
+
4974
+const Scrollbar = {
4975
+  setTranslate() {
4976
+    const swiper = this;
4977
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
4978
+    const { scrollbar, rtlTranslate: rtl, progress } = swiper;
4979
+    const {
4980
+      dragSize, trackSize, $dragEl, $el,
4981
+    } = scrollbar;
4982
+    const params = swiper.params.scrollbar;
4983
+
4984
+    let newSize = dragSize;
4985
+    let newPos = (trackSize - dragSize) * progress;
4986
+    if (rtl) {
4987
+      newPos = -newPos;
4988
+      if (newPos > 0) {
4989
+        newSize = dragSize - newPos;
4990
+        newPos = 0;
4991
+      } else if (-newPos + dragSize > trackSize) {
4992
+        newSize = trackSize + newPos;
4993
+      }
4994
+    } else if (newPos < 0) {
4995
+      newSize = dragSize + newPos;
4996
+      newPos = 0;
4997
+    } else if (newPos + dragSize > trackSize) {
4998
+      newSize = trackSize - newPos;
4999
+    }
5000
+    if (swiper.isHorizontal()) {
5001
+      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);
5002
+      $dragEl[0].style.width = `${newSize}px`;
5003
+    } else {
5004
+      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);
5005
+      $dragEl[0].style.height = `${newSize}px`;
5006
+    }
5007
+    if (params.hide) {
5008
+      clearTimeout(swiper.scrollbar.timeout);
5009
+      $el[0].style.opacity = 1;
5010
+      swiper.scrollbar.timeout = setTimeout(() => {
5011
+        $el[0].style.opacity = 0;
5012
+        $el.transition(400);
5013
+      }, 1000);
5014
+    }
5015
+  },
5016
+  setTransition(duration) {
5017
+    const swiper = this;
5018
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5019
+    swiper.scrollbar.$dragEl.transition(duration);
5020
+  },
5021
+  updateSize() {
5022
+    const swiper = this;
5023
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
5024
+
5025
+    const { scrollbar } = swiper;
5026
+    const { $dragEl, $el } = scrollbar;
5027
+
5028
+    $dragEl[0].style.width = '';
5029
+    $dragEl[0].style.height = '';
5030
+    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
5031
+
5032
+    const divider = swiper.size / swiper.virtualSize;
5033
+    const moveDivider = divider * (trackSize / swiper.size);
5034
+    let dragSize;
5035
+    if (swiper.params.scrollbar.dragSize === 'auto') {
5036
+      dragSize = trackSize * divider;
5037
+    } else {
5038
+      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
5039
+    }
5040
+
5041
+    if (swiper.isHorizontal()) {
5042
+      $dragEl[0].style.width = `${dragSize}px`;
5043
+    } else {
5044
+      $dragEl[0].style.height = `${dragSize}px`;
5045
+    }
5046
+
5047
+    if (divider >= 1) {
5048
+      $el[0].style.display = 'none';
5049
+    } else {
5050
+      $el[0].style.display = '';
5051
+    }
5052
+    if (swiper.params.scrollbar.hide) {
5053
+      $el[0].style.opacity = 0;
5054
+    }
5055
+    Utils.extend(scrollbar, {
5056
+      trackSize,
5057
+      divider,
5058
+      moveDivider,
5059
+      dragSize,
5060
+    });
5061
+    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
5062
+  },
5063
+  getPointerPosition(e) {
5064
+    const swiper = this;
5065
+    if (swiper.isHorizontal()) {
5066
+      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
5067
+    }
5068
+    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
5069
+  },
5070
+  setDragPosition(e) {
5071
+    const swiper = this;
5072
+    const { scrollbar, rtlTranslate: rtl } = swiper;
5073
+    const {
5074
+      $el,
5075
+      dragSize,
5076
+      trackSize,
5077
+      dragStartPos,
5078
+    } = scrollbar;
5079
+
5080
+    let positionRatio;
5081
+    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
5082
+      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
5083
+    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
5084
+    if (rtl) {
5085
+      positionRatio = 1 - positionRatio;
5086
+    }
5087
+
5088
+    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
5089
+
5090
+    swiper.updateProgress(position);
5091
+    swiper.setTranslate(position);
5092
+    swiper.updateActiveIndex();
5093
+    swiper.updateSlidesClasses();
5094
+  },
5095
+  onDragStart(e) {
5096
+    const swiper = this;
5097
+    const params = swiper.params.scrollbar;
5098
+    const { scrollbar, $wrapperEl } = swiper;
5099
+    const { $el, $dragEl } = scrollbar;
5100
+    swiper.scrollbar.isTouched = true;
5101
+    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
5102
+      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
5103
+    e.preventDefault();
5104
+    e.stopPropagation();
5105
+
5106
+    $wrapperEl.transition(100);
5107
+    $dragEl.transition(100);
5108
+    scrollbar.setDragPosition(e);
5109
+
5110
+    clearTimeout(swiper.scrollbar.dragTimeout);
5111
+
5112
+    $el.transition(0);
5113
+    if (params.hide) {
5114
+      $el.css('opacity', 1);
5115
+    }
5116
+    if (swiper.params.cssMode) {
5117
+      swiper.$wrapperEl.css('scroll-snap-type', 'none');
5118
+    }
5119
+    swiper.emit('scrollbarDragStart', e);
5120
+  },
5121
+  onDragMove(e) {
5122
+    const swiper = this;
5123
+    const { scrollbar, $wrapperEl } = swiper;
5124
+    const { $el, $dragEl } = scrollbar;
5125
+
5126
+    if (!swiper.scrollbar.isTouched) return;
5127
+    if (e.preventDefault) e.preventDefault();
5128
+    else e.returnValue = false;
5129
+    scrollbar.setDragPosition(e);
5130
+    $wrapperEl.transition(0);
5131
+    $el.transition(0);
5132
+    $dragEl.transition(0);
5133
+    swiper.emit('scrollbarDragMove', e);
5134
+  },
5135
+  onDragEnd(e) {
5136
+    const swiper = this;
5137
+
5138
+    const params = swiper.params.scrollbar;
5139
+    const { scrollbar, $wrapperEl } = swiper;
5140
+    const { $el } = scrollbar;
5141
+
5142
+    if (!swiper.scrollbar.isTouched) return;
5143
+    swiper.scrollbar.isTouched = false;
5144
+    if (swiper.params.cssMode) {
5145
+      swiper.$wrapperEl.css('scroll-snap-type', '');
5146
+      $wrapperEl.transition('');
5147
+    }
5148
+    if (params.hide) {
5149
+      clearTimeout(swiper.scrollbar.dragTimeout);
5150
+      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {
5151
+        $el.css('opacity', 0);
5152
+        $el.transition(400);
5153
+      }, 1000);
5154
+    }
5155
+    swiper.emit('scrollbarDragEnd', e);
5156
+    if (params.snapOnRelease) {
5157
+      swiper.slideToClosest();
5158
+    }
5159
+  },
5160
+  enableDraggable() {
5161
+    const swiper = this;
5162
+    if (!swiper.params.scrollbar.el) return;
5163
+    const {
5164
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
5165
+    } = swiper;
5166
+    const $el = scrollbar.$el;
5167
+    const target = $el[0];
5168
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
5169
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
5170
+    if (!Support.touch) {
5171
+      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
5172
+      document$1.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
5173
+      document$1.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
5174
+    } else {
5175
+      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
5176
+      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
5177
+      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
5178
+    }
5179
+  },
5180
+  disableDraggable() {
5181
+    const swiper = this;
5182
+    if (!swiper.params.scrollbar.el) return;
5183
+    const {
5184
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
5185
+    } = swiper;
5186
+    const $el = scrollbar.$el;
5187
+    const target = $el[0];
5188
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
5189
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
5190
+    if (!Support.touch) {
5191
+      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
5192
+      document$1.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
5193
+      document$1.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
5194
+    } else {
5195
+      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
5196
+      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
5197
+      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
5198
+    }
5199
+  },
5200
+  init() {
5201
+    const swiper = this;
5202
+    if (!swiper.params.scrollbar.el) return;
5203
+    const { scrollbar, $el: $swiperEl } = swiper;
5204
+    const params = swiper.params.scrollbar;
5205
+
5206
+    let $el = $(params.el);
5207
+    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
5208
+      $el = $swiperEl.find(params.el);
5209
+    }
5210
+
5211
+    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);
5212
+    if ($dragEl.length === 0) {
5213
+      $dragEl = $(`<div class="${swiper.params.scrollbar.dragClass}"></div>`);
5214
+      $el.append($dragEl);
5215
+    }
5216
+
5217
+    Utils.extend(scrollbar, {
5218
+      $el,
5219
+      el: $el[0],
5220
+      $dragEl,
5221
+      dragEl: $dragEl[0],
5222
+    });
5223
+
5224
+    if (params.draggable) {
5225
+      scrollbar.enableDraggable();
5226
+    }
5227
+  },
5228
+  destroy() {
5229
+    const swiper = this;
5230
+    swiper.scrollbar.disableDraggable();
5231
+  },
5232
+};
5233
+
5234
+var scrollbar = {
5235
+  name: 'scrollbar',
5236
+  params: {
5237
+    scrollbar: {
5238
+      el: null,
5239
+      dragSize: 'auto',
5240
+      hide: false,
5241
+      draggable: false,
5242
+      snapOnRelease: true,
5243
+      lockClass: 'swiper-scrollbar-lock',
5244
+      dragClass: 'swiper-scrollbar-drag',
5245
+    },
5246
+  },
5247
+  create() {
5248
+    const swiper = this;
5249
+    Utils.extend(swiper, {
5250
+      scrollbar: {
5251
+        init: Scrollbar.init.bind(swiper),
5252
+        destroy: Scrollbar.destroy.bind(swiper),
5253
+        updateSize: Scrollbar.updateSize.bind(swiper),
5254
+        setTranslate: Scrollbar.setTranslate.bind(swiper),
5255
+        setTransition: Scrollbar.setTransition.bind(swiper),
5256
+        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
5257
+        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
5258
+        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
5259
+        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
5260
+        onDragStart: Scrollbar.onDragStart.bind(swiper),
5261
+        onDragMove: Scrollbar.onDragMove.bind(swiper),
5262
+        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
5263
+        isTouched: false,
5264
+        timeout: null,
5265
+        dragTimeout: null,
5266
+      },
5267
+    });
5268
+  },
5269
+  on: {
5270
+    init() {
5271
+      const swiper = this;
5272
+      swiper.scrollbar.init();
5273
+      swiper.scrollbar.updateSize();
5274
+      swiper.scrollbar.setTranslate();
5275
+    },
5276
+    update() {
5277
+      const swiper = this;
5278
+      swiper.scrollbar.updateSize();
5279
+    },
5280
+    resize() {
5281
+      const swiper = this;
5282
+      swiper.scrollbar.updateSize();
5283
+    },
5284
+    observerUpdate() {
5285
+      const swiper = this;
5286
+      swiper.scrollbar.updateSize();
5287
+    },
5288
+    setTranslate() {
5289
+      const swiper = this;
5290
+      swiper.scrollbar.setTranslate();
5291
+    },
5292
+    setTransition(duration) {
5293
+      const swiper = this;
5294
+      swiper.scrollbar.setTransition(duration);
5295
+    },
5296
+    destroy() {
5297
+      const swiper = this;
5298
+      swiper.scrollbar.destroy();
5299
+    },
5300
+  },
5301
+};
5302
+
5303
+const Parallax = {
5304
+  setTransform(el, progress) {
5305
+    const swiper = this;
5306
+    const { rtl } = swiper;
5307
+
5308
+    const $el = $(el);
5309
+    const rtlFactor = rtl ? -1 : 1;
5310
+
5311
+    const p = $el.attr('data-swiper-parallax') || '0';
5312
+    let x = $el.attr('data-swiper-parallax-x');
5313
+    let y = $el.attr('data-swiper-parallax-y');
5314
+    const scale = $el.attr('data-swiper-parallax-scale');
5315
+    const opacity = $el.attr('data-swiper-parallax-opacity');
5316
+
5317
+    if (x || y) {
5318
+      x = x || '0';
5319
+      y = y || '0';
5320
+    } else if (swiper.isHorizontal()) {
5321
+      x = p;
5322
+      y = '0';
5323
+    } else {
5324
+      y = p;
5325
+      x = '0';
5326
+    }
5327
+
5328
+    if ((x).indexOf('%') >= 0) {
5329
+      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
5330
+    } else {
5331
+      x = `${x * progress * rtlFactor}px`;
5332
+    }
5333
+    if ((y).indexOf('%') >= 0) {
5334
+      y = `${parseInt(y, 10) * progress}%`;
5335
+    } else {
5336
+      y = `${y * progress}px`;
5337
+    }
5338
+
5339
+    if (typeof opacity !== 'undefined' && opacity !== null) {
5340
+      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
5341
+      $el[0].style.opacity = currentOpacity;
5342
+    }
5343
+    if (typeof scale === 'undefined' || scale === null) {
5344
+      $el.transform(`translate3d(${x}, ${y}, 0px)`);
5345
+    } else {
5346
+      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
5347
+      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);
5348
+    }
5349
+  },
5350
+  setTranslate() {
5351
+    const swiper = this;
5352
+    const {
5353
+      $el, slides, progress, snapGrid,
5354
+    } = swiper;
5355
+    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5356
+      .each((index, el) => {
5357
+        swiper.parallax.setTransform(el, progress);
5358
+      });
5359
+    slides.each((slideIndex, slideEl) => {
5360
+      let slideProgress = slideEl.progress;
5361
+      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
5362
+        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
5363
+      }
5364
+      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
5365
+      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5366
+        .each((index, el) => {
5367
+          swiper.parallax.setTransform(el, slideProgress);
5368
+        });
5369
+    });
5370
+  },
5371
+  setTransition(duration = this.params.speed) {
5372
+    const swiper = this;
5373
+    const { $el } = swiper;
5374
+    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
5375
+      .each((index, parallaxEl) => {
5376
+        const $parallaxEl = $(parallaxEl);
5377
+        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
5378
+        if (duration === 0) parallaxDuration = 0;
5379
+        $parallaxEl.transition(parallaxDuration);
5380
+      });
5381
+  },
5382
+};
5383
+
5384
+var parallax = {
5385
+  name: 'parallax',
5386
+  params: {
5387
+    parallax: {
5388
+      enabled: false,
5389
+    },
5390
+  },
5391
+  create() {
5392
+    const swiper = this;
5393
+    Utils.extend(swiper, {
5394
+      parallax: {
5395
+        setTransform: Parallax.setTransform.bind(swiper),
5396
+        setTranslate: Parallax.setTranslate.bind(swiper),
5397
+        setTransition: Parallax.setTransition.bind(swiper),
5398
+      },
5399
+    });
5400
+  },
5401
+  on: {
5402
+    beforeInit() {
5403
+      const swiper = this;
5404
+      if (!swiper.params.parallax.enabled) return;
5405
+      swiper.params.watchSlidesProgress = true;
5406
+      swiper.originalParams.watchSlidesProgress = true;
5407
+    },
5408
+    init() {
5409
+      const swiper = this;
5410
+      if (!swiper.params.parallax.enabled) return;
5411
+      swiper.parallax.setTranslate();
5412
+    },
5413
+    setTranslate() {
5414
+      const swiper = this;
5415
+      if (!swiper.params.parallax.enabled) return;
5416
+      swiper.parallax.setTranslate();
5417
+    },
5418
+    setTransition(duration) {
5419
+      const swiper = this;
5420
+      if (!swiper.params.parallax.enabled) return;
5421
+      swiper.parallax.setTransition(duration);
5422
+    },
5423
+  },
5424
+};
5425
+
5426
+const Zoom = {
5427
+  // Calc Scale From Multi-touches
5428
+  getDistanceBetweenTouches(e) {
5429
+    if (e.targetTouches.length < 2) return 1;
5430
+    const x1 = e.targetTouches[0].pageX;
5431
+    const y1 = e.targetTouches[0].pageY;
5432
+    const x2 = e.targetTouches[1].pageX;
5433
+    const y2 = e.targetTouches[1].pageY;
5434
+    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));
5435
+    return distance;
5436
+  },
5437
+  // Events
5438
+  onGestureStart(e) {
5439
+    const swiper = this;
5440
+    const params = swiper.params.zoom;
5441
+    const zoom = swiper.zoom;
5442
+    const { gesture } = zoom;
5443
+    zoom.fakeGestureTouched = false;
5444
+    zoom.fakeGestureMoved = false;
5445
+    if (!Support.gestures) {
5446
+      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
5447
+        return;
5448
+      }
5449
+      zoom.fakeGestureTouched = true;
5450
+      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
5451
+    }
5452
+    if (!gesture.$slideEl || !gesture.$slideEl.length) {
5453
+      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);
5454
+      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5455
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5456
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5457
+      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5458
+      if (gesture.$imageWrapEl.length === 0) {
5459
+        gesture.$imageEl = undefined;
5460
+        return;
5461
+      }
5462
+    }
5463
+    if (gesture.$imageEl) {
5464
+      gesture.$imageEl.transition(0);
5465
+    }
5466
+    swiper.zoom.isScaling = true;
5467
+  },
5468
+  onGestureChange(e) {
5469
+    const swiper = this;
5470
+    const params = swiper.params.zoom;
5471
+    const zoom = swiper.zoom;
5472
+    const { gesture } = zoom;
5473
+    if (!Support.gestures) {
5474
+      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
5475
+        return;
5476
+      }
5477
+      zoom.fakeGestureMoved = true;
5478
+      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
5479
+    }
5480
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5481
+    if (Support.gestures) {
5482
+      zoom.scale = e.scale * zoom.currentScale;
5483
+    } else {
5484
+      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
5485
+    }
5486
+    if (zoom.scale > gesture.maxRatio) {
5487
+      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);
5488
+    }
5489
+    if (zoom.scale < params.minRatio) {
5490
+      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);
5491
+    }
5492
+    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5493
+  },
5494
+  onGestureEnd(e) {
5495
+    const swiper = this;
5496
+    const params = swiper.params.zoom;
5497
+    const zoom = swiper.zoom;
5498
+    const { gesture } = zoom;
5499
+    if (!Support.gestures) {
5500
+      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
5501
+        return;
5502
+      }
5503
+      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
5504
+        return;
5505
+      }
5506
+      zoom.fakeGestureTouched = false;
5507
+      zoom.fakeGestureMoved = false;
5508
+    }
5509
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5510
+    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
5511
+    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5512
+    zoom.currentScale = zoom.scale;
5513
+    zoom.isScaling = false;
5514
+    if (zoom.scale === 1) gesture.$slideEl = undefined;
5515
+  },
5516
+  onTouchStart(e) {
5517
+    const swiper = this;
5518
+    const zoom = swiper.zoom;
5519
+    const { gesture, image } = zoom;
5520
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5521
+    if (image.isTouched) return;
5522
+    if (Device.android && e.cancelable) e.preventDefault();
5523
+    image.isTouched = true;
5524
+    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
5525
+    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
5526
+  },
5527
+  onTouchMove(e) {
5528
+    const swiper = this;
5529
+    const zoom = swiper.zoom;
5530
+    const { gesture, image, velocity } = zoom;
5531
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5532
+    swiper.allowClick = false;
5533
+    if (!image.isTouched || !gesture.$slideEl) return;
5534
+
5535
+    if (!image.isMoved) {
5536
+      image.width = gesture.$imageEl[0].offsetWidth;
5537
+      image.height = gesture.$imageEl[0].offsetHeight;
5538
+      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
5539
+      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
5540
+      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
5541
+      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
5542
+      gesture.$imageWrapEl.transition(0);
5543
+      if (swiper.rtl) {
5544
+        image.startX = -image.startX;
5545
+        image.startY = -image.startY;
5546
+      }
5547
+    }
5548
+    // Define if we need image drag
5549
+    const scaledWidth = image.width * zoom.scale;
5550
+    const scaledHeight = image.height * zoom.scale;
5551
+
5552
+    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
5553
+
5554
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
5555
+    image.maxX = -image.minX;
5556
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
5557
+    image.maxY = -image.minY;
5558
+
5559
+    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
5560
+    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
5561
+
5562
+    if (!image.isMoved && !zoom.isScaling) {
5563
+      if (
5564
+        swiper.isHorizontal()
5565
+        && (
5566
+          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
5567
+          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
5568
+        )
5569
+      ) {
5570
+        image.isTouched = false;
5571
+        return;
5572
+      } if (
5573
+        !swiper.isHorizontal()
5574
+        && (
5575
+          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
5576
+          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
5577
+        )
5578
+      ) {
5579
+        image.isTouched = false;
5580
+        return;
5581
+      }
5582
+    }
5583
+    if (e.cancelable) {
5584
+      e.preventDefault();
5585
+    }
5586
+    e.stopPropagation();
5587
+
5588
+    image.isMoved = true;
5589
+    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
5590
+    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
5591
+
5592
+    if (image.currentX < image.minX) {
5593
+      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);
5594
+    }
5595
+    if (image.currentX > image.maxX) {
5596
+      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);
5597
+    }
5598
+
5599
+    if (image.currentY < image.minY) {
5600
+      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);
5601
+    }
5602
+    if (image.currentY > image.maxY) {
5603
+      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);
5604
+    }
5605
+
5606
+    // Velocity
5607
+    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
5608
+    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
5609
+    if (!velocity.prevTime) velocity.prevTime = Date.now();
5610
+    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
5611
+    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
5612
+    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
5613
+    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
5614
+    velocity.prevPositionX = image.touchesCurrent.x;
5615
+    velocity.prevPositionY = image.touchesCurrent.y;
5616
+    velocity.prevTime = Date.now();
5617
+
5618
+    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
5619
+  },
5620
+  onTouchEnd() {
5621
+    const swiper = this;
5622
+    const zoom = swiper.zoom;
5623
+    const { gesture, image, velocity } = zoom;
5624
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5625
+    if (!image.isTouched || !image.isMoved) {
5626
+      image.isTouched = false;
5627
+      image.isMoved = false;
5628
+      return;
5629
+    }
5630
+    image.isTouched = false;
5631
+    image.isMoved = false;
5632
+    let momentumDurationX = 300;
5633
+    let momentumDurationY = 300;
5634
+    const momentumDistanceX = velocity.x * momentumDurationX;
5635
+    const newPositionX = image.currentX + momentumDistanceX;
5636
+    const momentumDistanceY = velocity.y * momentumDurationY;
5637
+    const newPositionY = image.currentY + momentumDistanceY;
5638
+
5639
+    // Fix duration
5640
+    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
5641
+    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
5642
+    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
5643
+
5644
+    image.currentX = newPositionX;
5645
+    image.currentY = newPositionY;
5646
+
5647
+    // Define if we need image drag
5648
+    const scaledWidth = image.width * zoom.scale;
5649
+    const scaledHeight = image.height * zoom.scale;
5650
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
5651
+    image.maxX = -image.minX;
5652
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
5653
+    image.maxY = -image.minY;
5654
+    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
5655
+    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
5656
+
5657
+    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
5658
+  },
5659
+  onTransitionEnd() {
5660
+    const swiper = this;
5661
+    const zoom = swiper.zoom;
5662
+    const { gesture } = zoom;
5663
+    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
5664
+      if (gesture.$imageEl) {
5665
+        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
5666
+      }
5667
+      if (gesture.$imageWrapEl) {
5668
+        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
5669
+      }
5670
+
5671
+      zoom.scale = 1;
5672
+      zoom.currentScale = 1;
5673
+
5674
+      gesture.$slideEl = undefined;
5675
+      gesture.$imageEl = undefined;
5676
+      gesture.$imageWrapEl = undefined;
5677
+    }
5678
+  },
5679
+  // Toggle Zoom
5680
+  toggle(e) {
5681
+    const swiper = this;
5682
+    const zoom = swiper.zoom;
5683
+
5684
+    if (zoom.scale && zoom.scale !== 1) {
5685
+      // Zoom Out
5686
+      zoom.out();
5687
+    } else {
5688
+      // Zoom In
5689
+      zoom.in(e);
5690
+    }
5691
+  },
5692
+  in(e) {
5693
+    const swiper = this;
5694
+
5695
+    const zoom = swiper.zoom;
5696
+    const params = swiper.params.zoom;
5697
+    const { gesture, image } = zoom;
5698
+
5699
+    if (!gesture.$slideEl) {
5700
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
5701
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
5702
+      } else {
5703
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5704
+      }
5705
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5706
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5707
+    }
5708
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5709
+
5710
+    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);
5711
+
5712
+    let touchX;
5713
+    let touchY;
5714
+    let offsetX;
5715
+    let offsetY;
5716
+    let diffX;
5717
+    let diffY;
5718
+    let translateX;
5719
+    let translateY;
5720
+    let imageWidth;
5721
+    let imageHeight;
5722
+    let scaledWidth;
5723
+    let scaledHeight;
5724
+    let translateMinX;
5725
+    let translateMinY;
5726
+    let translateMaxX;
5727
+    let translateMaxY;
5728
+    let slideWidth;
5729
+    let slideHeight;
5730
+
5731
+    if (typeof image.touchesStart.x === 'undefined' && e) {
5732
+      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
5733
+      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
5734
+    } else {
5735
+      touchX = image.touchesStart.x;
5736
+      touchY = image.touchesStart.y;
5737
+    }
5738
+
5739
+    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5740
+    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
5741
+    if (e) {
5742
+      slideWidth = gesture.$slideEl[0].offsetWidth;
5743
+      slideHeight = gesture.$slideEl[0].offsetHeight;
5744
+      offsetX = gesture.$slideEl.offset().left;
5745
+      offsetY = gesture.$slideEl.offset().top;
5746
+      diffX = (offsetX + (slideWidth / 2)) - touchX;
5747
+      diffY = (offsetY + (slideHeight / 2)) - touchY;
5748
+
5749
+      imageWidth = gesture.$imageEl[0].offsetWidth;
5750
+      imageHeight = gesture.$imageEl[0].offsetHeight;
5751
+      scaledWidth = imageWidth * zoom.scale;
5752
+      scaledHeight = imageHeight * zoom.scale;
5753
+
5754
+      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
5755
+      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
5756
+      translateMaxX = -translateMinX;
5757
+      translateMaxY = -translateMinY;
5758
+
5759
+      translateX = diffX * zoom.scale;
5760
+      translateY = diffY * zoom.scale;
5761
+
5762
+      if (translateX < translateMinX) {
5763
+        translateX = translateMinX;
5764
+      }
5765
+      if (translateX > translateMaxX) {
5766
+        translateX = translateMaxX;
5767
+      }
5768
+
5769
+      if (translateY < translateMinY) {
5770
+        translateY = translateMinY;
5771
+      }
5772
+      if (translateY > translateMaxY) {
5773
+        translateY = translateMaxY;
5774
+      }
5775
+    } else {
5776
+      translateX = 0;
5777
+      translateY = 0;
5778
+    }
5779
+    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);
5780
+    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
5781
+  },
5782
+  out() {
5783
+    const swiper = this;
5784
+
5785
+    const zoom = swiper.zoom;
5786
+    const params = swiper.params.zoom;
5787
+    const { gesture } = zoom;
5788
+
5789
+    if (!gesture.$slideEl) {
5790
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
5791
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
5792
+      } else {
5793
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
5794
+      }
5795
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
5796
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
5797
+    }
5798
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
5799
+
5800
+    zoom.scale = 1;
5801
+    zoom.currentScale = 1;
5802
+    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
5803
+    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
5804
+    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);
5805
+    gesture.$slideEl = undefined;
5806
+  },
5807
+  // Attach/Detach Events
5808
+  enable() {
5809
+    const swiper = this;
5810
+    const zoom = swiper.zoom;
5811
+    if (zoom.enabled) return;
5812
+    zoom.enabled = true;
5813
+
5814
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
5815
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
5816
+
5817
+    const slideSelector = `.${swiper.params.slideClass}`;
5818
+
5819
+    // Scale image
5820
+    if (Support.gestures) {
5821
+      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
5822
+      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
5823
+      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
5824
+    } else if (swiper.touchEvents.start === 'touchstart') {
5825
+      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
5826
+      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
5827
+      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
5828
+      if (swiper.touchEvents.cancel) {
5829
+        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
5830
+      }
5831
+    }
5832
+
5833
+    // Move image
5834
+    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
5835
+  },
5836
+  disable() {
5837
+    const swiper = this;
5838
+    const zoom = swiper.zoom;
5839
+    if (!zoom.enabled) return;
5840
+
5841
+    swiper.zoom.enabled = false;
5842
+
5843
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
5844
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
5845
+
5846
+    const slideSelector = `.${swiper.params.slideClass}`;
5847
+
5848
+    // Scale image
5849
+    if (Support.gestures) {
5850
+      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
5851
+      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
5852
+      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
5853
+    } else if (swiper.touchEvents.start === 'touchstart') {
5854
+      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
5855
+      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
5856
+      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
5857
+      if (swiper.touchEvents.cancel) {
5858
+        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
5859
+      }
5860
+    }
5861
+
5862
+    // Move image
5863
+    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
5864
+  },
5865
+};
5866
+
5867
+var zoom = {
5868
+  name: 'zoom',
5869
+  params: {
5870
+    zoom: {
5871
+      enabled: false,
5872
+      maxRatio: 3,
5873
+      minRatio: 1,
5874
+      toggle: true,
5875
+      containerClass: 'swiper-zoom-container',
5876
+      zoomedSlideClass: 'swiper-slide-zoomed',
5877
+    },
5878
+  },
5879
+  create() {
5880
+    const swiper = this;
5881
+    const zoom = {
5882
+      enabled: false,
5883
+      scale: 1,
5884
+      currentScale: 1,
5885
+      isScaling: false,
5886
+      gesture: {
5887
+        $slideEl: undefined,
5888
+        slideWidth: undefined,
5889
+        slideHeight: undefined,
5890
+        $imageEl: undefined,
5891
+        $imageWrapEl: undefined,
5892
+        maxRatio: 3,
5893
+      },
5894
+      image: {
5895
+        isTouched: undefined,
5896
+        isMoved: undefined,
5897
+        currentX: undefined,
5898
+        currentY: undefined,
5899
+        minX: undefined,
5900
+        minY: undefined,
5901
+        maxX: undefined,
5902
+        maxY: undefined,
5903
+        width: undefined,
5904
+        height: undefined,
5905
+        startX: undefined,
5906
+        startY: undefined,
5907
+        touchesStart: {},
5908
+        touchesCurrent: {},
5909
+      },
5910
+      velocity: {
5911
+        x: undefined,
5912
+        y: undefined,
5913
+        prevPositionX: undefined,
5914
+        prevPositionY: undefined,
5915
+        prevTime: undefined,
5916
+      },
5917
+    };
5918
+
5919
+    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {
5920
+      zoom[methodName] = Zoom[methodName].bind(swiper);
5921
+    });
5922
+    Utils.extend(swiper, {
5923
+      zoom,
5924
+    });
5925
+
5926
+    let scale = 1;
5927
+    Object.defineProperty(swiper.zoom, 'scale', {
5928
+      get() {
5929
+        return scale;
5930
+      },
5931
+      set(value) {
5932
+        if (scale !== value) {
5933
+          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
5934
+          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
5935
+          swiper.emit('zoomChange', value, imageEl, slideEl);
5936
+        }
5937
+        scale = value;
5938
+      },
5939
+    });
5940
+  },
5941
+  on: {
5942
+    init() {
5943
+      const swiper = this;
5944
+      if (swiper.params.zoom.enabled) {
5945
+        swiper.zoom.enable();
5946
+      }
5947
+    },
5948
+    destroy() {
5949
+      const swiper = this;
5950
+      swiper.zoom.disable();
5951
+    },
5952
+    touchStart(e) {
5953
+      const swiper = this;
5954
+      if (!swiper.zoom.enabled) return;
5955
+      swiper.zoom.onTouchStart(e);
5956
+    },
5957
+    touchEnd(e) {
5958
+      const swiper = this;
5959
+      if (!swiper.zoom.enabled) return;
5960
+      swiper.zoom.onTouchEnd(e);
5961
+    },
5962
+    doubleTap(e) {
5963
+      const swiper = this;
5964
+      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
5965
+        swiper.zoom.toggle(e);
5966
+      }
5967
+    },
5968
+    transitionEnd() {
5969
+      const swiper = this;
5970
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
5971
+        swiper.zoom.onTransitionEnd();
5972
+      }
5973
+    },
5974
+    slideChange() {
5975
+      const swiper = this;
5976
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
5977
+        swiper.zoom.onTransitionEnd();
5978
+      }
5979
+    },
5980
+  },
5981
+};
5982
+
5983
+const Lazy = {
5984
+  loadInSlide(index, loadInDuplicate = true) {
5985
+    const swiper = this;
5986
+    const params = swiper.params.lazy;
5987
+    if (typeof index === 'undefined') return;
5988
+    if (swiper.slides.length === 0) return;
5989
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
5990
+
5991
+    const $slideEl = isVirtual
5992
+      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`)
5993
+      : swiper.slides.eq(index);
5994
+
5995
+    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);
5996
+    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
5997
+      $images = $images.add($slideEl[0]);
5998
+    }
5999
+    if ($images.length === 0) return;
6000
+
6001
+    $images.each((imageIndex, imageEl) => {
6002
+      const $imageEl = $(imageEl);
6003
+      $imageEl.addClass(params.loadingClass);
6004
+
6005
+      const background = $imageEl.attr('data-background');
6006
+      const src = $imageEl.attr('data-src');
6007
+      const srcset = $imageEl.attr('data-srcset');
6008
+      const sizes = $imageEl.attr('data-sizes');
6009
+      const $pictureEl = $imageEl.parent('picture');
6010
+
6011
+      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {
6012
+        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;
6013
+        if (background) {
6014
+          $imageEl.css('background-image', `url("${background}")`);
6015
+          $imageEl.removeAttr('data-background');
6016
+        } else {
6017
+          if (srcset) {
6018
+            $imageEl.attr('srcset', srcset);
6019
+            $imageEl.removeAttr('data-srcset');
6020
+          }
6021
+          if (sizes) {
6022
+            $imageEl.attr('sizes', sizes);
6023
+            $imageEl.removeAttr('data-sizes');
6024
+          }
6025
+          if ($pictureEl.length) {
6026
+            $pictureEl.children('source').each((sourceIndex, sourceEl) => {
6027
+              const $source = $(sourceEl);
6028
+
6029
+              if ($source.attr('data-srcset')) {
6030
+                $source.attr('srcset', $source.attr('data-srcset'));
6031
+                $source.removeAttr('data-srcset');
6032
+              }
6033
+            });
6034
+          }
6035
+          if (src) {
6036
+            $imageEl.attr('src', src);
6037
+            $imageEl.removeAttr('data-src');
6038
+          }
6039
+        }
6040
+
6041
+        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
6042
+        $slideEl.find(`.${params.preloaderClass}`).remove();
6043
+        if (swiper.params.loop && loadInDuplicate) {
6044
+          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
6045
+          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
6046
+            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`);
6047
+            swiper.lazy.loadInSlide(originalSlide.index(), false);
6048
+          } else {
6049
+            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`);
6050
+            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
6051
+          }
6052
+        }
6053
+        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
6054
+        if (swiper.params.autoHeight) {
6055
+          swiper.updateAutoHeight();
6056
+        }
6057
+      });
6058
+
6059
+      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
6060
+    });
6061
+  },
6062
+  load() {
6063
+    const swiper = this;
6064
+    const {
6065
+      $wrapperEl, params: swiperParams, slides, activeIndex,
6066
+    } = swiper;
6067
+    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;
6068
+    const params = swiperParams.lazy;
6069
+
6070
+    let slidesPerView = swiperParams.slidesPerView;
6071
+    if (slidesPerView === 'auto') {
6072
+      slidesPerView = 0;
6073
+    }
6074
+
6075
+    function slideExist(index) {
6076
+      if (isVirtual) {
6077
+        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) {
6078
+          return true;
6079
+        }
6080
+      } else if (slides[index]) return true;
6081
+      return false;
6082
+    }
6083
+
6084
+    function slideIndex(slideEl) {
6085
+      if (isVirtual) {
6086
+        return $(slideEl).attr('data-swiper-slide-index');
6087
+      }
6088
+      return $(slideEl).index();
6089
+    }
6090
+
6091
+    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
6092
+    if (swiper.params.watchSlidesVisibility) {
6093
+      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {
6094
+        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
6095
+        swiper.lazy.loadInSlide(index);
6096
+      });
6097
+    } else if (slidesPerView > 1) {
6098
+      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
6099
+        if (slideExist(i)) swiper.lazy.loadInSlide(i);
6100
+      }
6101
+    } else {
6102
+      swiper.lazy.loadInSlide(activeIndex);
6103
+    }
6104
+    if (params.loadPrevNext) {
6105
+      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
6106
+        const amount = params.loadPrevNextAmount;
6107
+        const spv = slidesPerView;
6108
+        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
6109
+        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
6110
+        // Next Slides
6111
+        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {
6112
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6113
+        }
6114
+        // Prev Slides
6115
+        for (let i = minIndex; i < activeIndex; i += 1) {
6116
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
6117
+        }
6118
+      } else {
6119
+        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);
6120
+        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
6121
+
6122
+        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);
6123
+        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
6124
+      }
6125
+    }
6126
+  },
6127
+};
6128
+
6129
+var lazy = {
6130
+  name: 'lazy',
6131
+  params: {
6132
+    lazy: {
6133
+      enabled: false,
6134
+      loadPrevNext: false,
6135
+      loadPrevNextAmount: 1,
6136
+      loadOnTransitionStart: false,
6137
+
6138
+      elementClass: 'swiper-lazy',
6139
+      loadingClass: 'swiper-lazy-loading',
6140
+      loadedClass: 'swiper-lazy-loaded',
6141
+      preloaderClass: 'swiper-lazy-preloader',
6142
+    },
6143
+  },
6144
+  create() {
6145
+    const swiper = this;
6146
+    Utils.extend(swiper, {
6147
+      lazy: {
6148
+        initialImageLoaded: false,
6149
+        load: Lazy.load.bind(swiper),
6150
+        loadInSlide: Lazy.loadInSlide.bind(swiper),
6151
+      },
6152
+    });
6153
+  },
6154
+  on: {
6155
+    beforeInit() {
6156
+      const swiper = this;
6157
+      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
6158
+        swiper.params.preloadImages = false;
6159
+      }
6160
+    },
6161
+    init() {
6162
+      const swiper = this;
6163
+      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
6164
+        swiper.lazy.load();
6165
+      }
6166
+    },
6167
+    scroll() {
6168
+      const swiper = this;
6169
+      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
6170
+        swiper.lazy.load();
6171
+      }
6172
+    },
6173
+    resize() {
6174
+      const swiper = this;
6175
+      if (swiper.params.lazy.enabled) {
6176
+        swiper.lazy.load();
6177
+      }
6178
+    },
6179
+    scrollbarDragMove() {
6180
+      const swiper = this;
6181
+      if (swiper.params.lazy.enabled) {
6182
+        swiper.lazy.load();
6183
+      }
6184
+    },
6185
+    transitionStart() {
6186
+      const swiper = this;
6187
+      if (swiper.params.lazy.enabled) {
6188
+        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
6189
+          swiper.lazy.load();
6190
+        }
6191
+      }
6192
+    },
6193
+    transitionEnd() {
6194
+      const swiper = this;
6195
+      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
6196
+        swiper.lazy.load();
6197
+      }
6198
+    },
6199
+    slideChange() {
6200
+      const swiper = this;
6201
+      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
6202
+        swiper.lazy.load();
6203
+      }
6204
+    },
6205
+  },
6206
+};
6207
+
6208
+/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
6209
+
6210
+const Controller = {
6211
+  LinearSpline: function LinearSpline(x, y) {
6212
+    const binarySearch = (function search() {
6213
+      let maxIndex;
6214
+      let minIndex;
6215
+      let guess;
6216
+      return (array, val) => {
6217
+        minIndex = -1;
6218
+        maxIndex = array.length;
6219
+        while (maxIndex - minIndex > 1) {
6220
+          guess = maxIndex + minIndex >> 1;
6221
+          if (array[guess] <= val) {
6222
+            minIndex = guess;
6223
+          } else {
6224
+            maxIndex = guess;
6225
+          }
6226
+        }
6227
+        return maxIndex;
6228
+      };
6229
+    }());
6230
+    this.x = x;
6231
+    this.y = y;
6232
+    this.lastIndex = x.length - 1;
6233
+    // Given an x value (x2), return the expected y2 value:
6234
+    // (x1,y1) is the known point before given value,
6235
+    // (x3,y3) is the known point after given value.
6236
+    let i1;
6237
+    let i3;
6238
+
6239
+    this.interpolate = function interpolate(x2) {
6240
+      if (!x2) return 0;
6241
+
6242
+      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
6243
+      i3 = binarySearch(this.x, x2);
6244
+      i1 = i3 - 1;
6245
+
6246
+      // We have our indexes i1 & i3, so we can calculate already:
6247
+      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
6248
+      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
6249
+    };
6250
+    return this;
6251
+  },
6252
+  // xxx: for now i will just save one spline function to to
6253
+  getInterpolateFunction(c) {
6254
+    const swiper = this;
6255
+    if (!swiper.controller.spline) {
6256
+      swiper.controller.spline = swiper.params.loop
6257
+        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
6258
+        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
6259
+    }
6260
+  },
6261
+  setTranslate(setTranslate, byController) {
6262
+    const swiper = this;
6263
+    const controlled = swiper.controller.control;
6264
+    let multiplier;
6265
+    let controlledTranslate;
6266
+    function setControlledTranslate(c) {
6267
+      // this will create an Interpolate function based on the snapGrids
6268
+      // x is the Grid of the scrolled scroller and y will be the controlled scroller
6269
+      // it makes sense to create this only once and recall it for the interpolation
6270
+      // the function does a lot of value caching for performance
6271
+      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
6272
+      if (swiper.params.controller.by === 'slide') {
6273
+        swiper.controller.getInterpolateFunction(c);
6274
+        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
6275
+        // but it did not work out
6276
+        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
6277
+      }
6278
+
6279
+      if (!controlledTranslate || swiper.params.controller.by === 'container') {
6280
+        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
6281
+        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
6282
+      }
6283
+
6284
+      if (swiper.params.controller.inverse) {
6285
+        controlledTranslate = c.maxTranslate() - controlledTranslate;
6286
+      }
6287
+      c.updateProgress(controlledTranslate);
6288
+      c.setTranslate(controlledTranslate, swiper);
6289
+      c.updateActiveIndex();
6290
+      c.updateSlidesClasses();
6291
+    }
6292
+    if (Array.isArray(controlled)) {
6293
+      for (let i = 0; i < controlled.length; i += 1) {
6294
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
6295
+          setControlledTranslate(controlled[i]);
6296
+        }
6297
+      }
6298
+    } else if (controlled instanceof Swiper && byController !== controlled) {
6299
+      setControlledTranslate(controlled);
6300
+    }
6301
+  },
6302
+  setTransition(duration, byController) {
6303
+    const swiper = this;
6304
+    const controlled = swiper.controller.control;
6305
+    let i;
6306
+    function setControlledTransition(c) {
6307
+      c.setTransition(duration, swiper);
6308
+      if (duration !== 0) {
6309
+        c.transitionStart();
6310
+        if (c.params.autoHeight) {
6311
+          Utils.nextTick(() => {
6312
+            c.updateAutoHeight();
6313
+          });
6314
+        }
6315
+        c.$wrapperEl.transitionEnd(() => {
6316
+          if (!controlled) return;
6317
+          if (c.params.loop && swiper.params.controller.by === 'slide') {
6318
+            c.loopFix();
6319
+          }
6320
+          c.transitionEnd();
6321
+        });
6322
+      }
6323
+    }
6324
+    if (Array.isArray(controlled)) {
6325
+      for (i = 0; i < controlled.length; i += 1) {
6326
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
6327
+          setControlledTransition(controlled[i]);
6328
+        }
6329
+      }
6330
+    } else if (controlled instanceof Swiper && byController !== controlled) {
6331
+      setControlledTransition(controlled);
6332
+    }
6333
+  },
6334
+};
6335
+var controller = {
6336
+  name: 'controller',
6337
+  params: {
6338
+    controller: {
6339
+      control: undefined,
6340
+      inverse: false,
6341
+      by: 'slide', // or 'container'
6342
+    },
6343
+  },
6344
+  create() {
6345
+    const swiper = this;
6346
+    Utils.extend(swiper, {
6347
+      controller: {
6348
+        control: swiper.params.controller.control,
6349
+        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
6350
+        setTranslate: Controller.setTranslate.bind(swiper),
6351
+        setTransition: Controller.setTransition.bind(swiper),
6352
+      },
6353
+    });
6354
+  },
6355
+  on: {
6356
+    update() {
6357
+      const swiper = this;
6358
+      if (!swiper.controller.control) return;
6359
+      if (swiper.controller.spline) {
6360
+        swiper.controller.spline = undefined;
6361
+        delete swiper.controller.spline;
6362
+      }
6363
+    },
6364
+    resize() {
6365
+      const swiper = this;
6366
+      if (!swiper.controller.control) return;
6367
+      if (swiper.controller.spline) {
6368
+        swiper.controller.spline = undefined;
6369
+        delete swiper.controller.spline;
6370
+      }
6371
+    },
6372
+    observerUpdate() {
6373
+      const swiper = this;
6374
+      if (!swiper.controller.control) return;
6375
+      if (swiper.controller.spline) {
6376
+        swiper.controller.spline = undefined;
6377
+        delete swiper.controller.spline;
6378
+      }
6379
+    },
6380
+    setTranslate(translate, byController) {
6381
+      const swiper = this;
6382
+      if (!swiper.controller.control) return;
6383
+      swiper.controller.setTranslate(translate, byController);
6384
+    },
6385
+    setTransition(duration, byController) {
6386
+      const swiper = this;
6387
+      if (!swiper.controller.control) return;
6388
+      swiper.controller.setTransition(duration, byController);
6389
+    },
6390
+  },
6391
+};
6392
+
6393
+const a11y = {
6394
+  makeElFocusable($el) {
6395
+    $el.attr('tabIndex', '0');
6396
+    return $el;
6397
+  },
6398
+  makeElNotFocusable($el) {
6399
+    $el.attr('tabIndex', '-1');
6400
+    return $el;
6401
+  },
6402
+  addElRole($el, role) {
6403
+    $el.attr('role', role);
6404
+    return $el;
6405
+  },
6406
+  addElLabel($el, label) {
6407
+    $el.attr('aria-label', label);
6408
+    return $el;
6409
+  },
6410
+  disableEl($el) {
6411
+    $el.attr('aria-disabled', true);
6412
+    return $el;
6413
+  },
6414
+  enableEl($el) {
6415
+    $el.attr('aria-disabled', false);
6416
+    return $el;
6417
+  },
6418
+  onEnterKey(e) {
6419
+    const swiper = this;
6420
+    const params = swiper.params.a11y;
6421
+    if (e.keyCode !== 13) return;
6422
+    const $targetEl = $(e.target);
6423
+    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
6424
+      if (!(swiper.isEnd && !swiper.params.loop)) {
6425
+        swiper.slideNext();
6426
+      }
6427
+      if (swiper.isEnd) {
6428
+        swiper.a11y.notify(params.lastSlideMessage);
6429
+      } else {
6430
+        swiper.a11y.notify(params.nextSlideMessage);
6431
+      }
6432
+    }
6433
+    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
6434
+      if (!(swiper.isBeginning && !swiper.params.loop)) {
6435
+        swiper.slidePrev();
6436
+      }
6437
+      if (swiper.isBeginning) {
6438
+        swiper.a11y.notify(params.firstSlideMessage);
6439
+      } else {
6440
+        swiper.a11y.notify(params.prevSlideMessage);
6441
+      }
6442
+    }
6443
+    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {
6444
+      $targetEl[0].click();
6445
+    }
6446
+  },
6447
+  notify(message) {
6448
+    const swiper = this;
6449
+    const notification = swiper.a11y.liveRegion;
6450
+    if (notification.length === 0) return;
6451
+    notification.html('');
6452
+    notification.html(message);
6453
+  },
6454
+  updateNavigation() {
6455
+    const swiper = this;
6456
+
6457
+    if (swiper.params.loop || !swiper.navigation) return;
6458
+    const { $nextEl, $prevEl } = swiper.navigation;
6459
+
6460
+    if ($prevEl && $prevEl.length > 0) {
6461
+      if (swiper.isBeginning) {
6462
+        swiper.a11y.disableEl($prevEl);
6463
+        swiper.a11y.makeElNotFocusable($prevEl);
6464
+      } else {
6465
+        swiper.a11y.enableEl($prevEl);
6466
+        swiper.a11y.makeElFocusable($prevEl);
6467
+      }
6468
+    }
6469
+    if ($nextEl && $nextEl.length > 0) {
6470
+      if (swiper.isEnd) {
6471
+        swiper.a11y.disableEl($nextEl);
6472
+        swiper.a11y.makeElNotFocusable($nextEl);
6473
+      } else {
6474
+        swiper.a11y.enableEl($nextEl);
6475
+        swiper.a11y.makeElFocusable($nextEl);
6476
+      }
6477
+    }
6478
+  },
6479
+  updatePagination() {
6480
+    const swiper = this;
6481
+    const params = swiper.params.a11y;
6482
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6483
+      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {
6484
+        const $bulletEl = $(bulletEl);
6485
+        swiper.a11y.makeElFocusable($bulletEl);
6486
+        swiper.a11y.addElRole($bulletEl, 'button');
6487
+        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
6488
+      });
6489
+    }
6490
+  },
6491
+  init() {
6492
+    const swiper = this;
6493
+
6494
+    swiper.$el.append(swiper.a11y.liveRegion);
6495
+
6496
+    // Navigation
6497
+    const params = swiper.params.a11y;
6498
+    let $nextEl;
6499
+    let $prevEl;
6500
+    if (swiper.navigation && swiper.navigation.$nextEl) {
6501
+      $nextEl = swiper.navigation.$nextEl;
6502
+    }
6503
+    if (swiper.navigation && swiper.navigation.$prevEl) {
6504
+      $prevEl = swiper.navigation.$prevEl;
6505
+    }
6506
+    if ($nextEl) {
6507
+      swiper.a11y.makeElFocusable($nextEl);
6508
+      swiper.a11y.addElRole($nextEl, 'button');
6509
+      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
6510
+      $nextEl.on('keydown', swiper.a11y.onEnterKey);
6511
+    }
6512
+    if ($prevEl) {
6513
+      swiper.a11y.makeElFocusable($prevEl);
6514
+      swiper.a11y.addElRole($prevEl, 'button');
6515
+      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
6516
+      $prevEl.on('keydown', swiper.a11y.onEnterKey);
6517
+    }
6518
+
6519
+    // Pagination
6520
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6521
+      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
6522
+    }
6523
+  },
6524
+  destroy() {
6525
+    const swiper = this;
6526
+    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
6527
+
6528
+    let $nextEl;
6529
+    let $prevEl;
6530
+    if (swiper.navigation && swiper.navigation.$nextEl) {
6531
+      $nextEl = swiper.navigation.$nextEl;
6532
+    }
6533
+    if (swiper.navigation && swiper.navigation.$prevEl) {
6534
+      $prevEl = swiper.navigation.$prevEl;
6535
+    }
6536
+    if ($nextEl) {
6537
+      $nextEl.off('keydown', swiper.a11y.onEnterKey);
6538
+    }
6539
+    if ($prevEl) {
6540
+      $prevEl.off('keydown', swiper.a11y.onEnterKey);
6541
+    }
6542
+
6543
+    // Pagination
6544
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
6545
+      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
6546
+    }
6547
+  },
6548
+};
6549
+var a11y$1 = {
6550
+  name: 'a11y',
6551
+  params: {
6552
+    a11y: {
6553
+      enabled: true,
6554
+      notificationClass: 'swiper-notification',
6555
+      prevSlideMessage: 'Previous slide',
6556
+      nextSlideMessage: 'Next slide',
6557
+      firstSlideMessage: 'This is the first slide',
6558
+      lastSlideMessage: 'This is the last slide',
6559
+      paginationBulletMessage: 'Go to slide {{index}}',
6560
+    },
6561
+  },
6562
+  create() {
6563
+    const swiper = this;
6564
+    Utils.extend(swiper, {
6565
+      a11y: {
6566
+        liveRegion: $(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`),
6567
+      },
6568
+    });
6569
+    Object.keys(a11y).forEach((methodName) => {
6570
+      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
6571
+    });
6572
+  },
6573
+  on: {
6574
+    init() {
6575
+      const swiper = this;
6576
+      if (!swiper.params.a11y.enabled) return;
6577
+      swiper.a11y.init();
6578
+      swiper.a11y.updateNavigation();
6579
+    },
6580
+    toEdge() {
6581
+      const swiper = this;
6582
+      if (!swiper.params.a11y.enabled) return;
6583
+      swiper.a11y.updateNavigation();
6584
+    },
6585
+    fromEdge() {
6586
+      const swiper = this;
6587
+      if (!swiper.params.a11y.enabled) return;
6588
+      swiper.a11y.updateNavigation();
6589
+    },
6590
+    paginationUpdate() {
6591
+      const swiper = this;
6592
+      if (!swiper.params.a11y.enabled) return;
6593
+      swiper.a11y.updatePagination();
6594
+    },
6595
+    destroy() {
6596
+      const swiper = this;
6597
+      if (!swiper.params.a11y.enabled) return;
6598
+      swiper.a11y.destroy();
6599
+    },
6600
+  },
6601
+};
6602
+
6603
+const History = {
6604
+  init() {
6605
+    const swiper = this;
6606
+    if (!swiper.params.history) return;
6607
+    if (!window.history || !window.history.pushState) {
6608
+      swiper.params.history.enabled = false;
6609
+      swiper.params.hashNavigation.enabled = true;
6610
+      return;
6611
+    }
6612
+    const history = swiper.history;
6613
+    history.initialized = true;
6614
+    history.paths = History.getPathValues();
6615
+    if (!history.paths.key && !history.paths.value) return;
6616
+    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
6617
+    if (!swiper.params.history.replaceState) {
6618
+      window.addEventListener('popstate', swiper.history.setHistoryPopState);
6619
+    }
6620
+  },
6621
+  destroy() {
6622
+    const swiper = this;
6623
+    if (!swiper.params.history.replaceState) {
6624
+      window.removeEventListener('popstate', swiper.history.setHistoryPopState);
6625
+    }
6626
+  },
6627
+  setHistoryPopState() {
6628
+    const swiper = this;
6629
+    swiper.history.paths = History.getPathValues();
6630
+    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
6631
+  },
6632
+  getPathValues() {
6633
+    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');
6634
+    const total = pathArray.length;
6635
+    const key = pathArray[total - 2];
6636
+    const value = pathArray[total - 1];
6637
+    return { key, value };
6638
+  },
6639
+  setHistory(key, index) {
6640
+    const swiper = this;
6641
+    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
6642
+    const slide = swiper.slides.eq(index);
6643
+    let value = History.slugify(slide.attr('data-history'));
6644
+    if (!window.location.pathname.includes(key)) {
6645
+      value = `${key}/${value}`;
6646
+    }
6647
+    const currentState = window.history.state;
6648
+    if (currentState && currentState.value === value) {
6649
+      return;
6650
+    }
6651
+    if (swiper.params.history.replaceState) {
6652
+      window.history.replaceState({ value }, null, value);
6653
+    } else {
6654
+      window.history.pushState({ value }, null, value);
6655
+    }
6656
+  },
6657
+  slugify(text) {
6658
+    return text.toString()
6659
+      .replace(/\s+/g, '-')
6660
+      .replace(/[^\w-]+/g, '')
6661
+      .replace(/--+/g, '-')
6662
+      .replace(/^-+/, '')
6663
+      .replace(/-+$/, '');
6664
+  },
6665
+  scrollToSlide(speed, value, runCallbacks) {
6666
+    const swiper = this;
6667
+    if (value) {
6668
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
6669
+        const slide = swiper.slides.eq(i);
6670
+        const slideHistory = History.slugify(slide.attr('data-history'));
6671
+        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
6672
+          const index = slide.index();
6673
+          swiper.slideTo(index, speed, runCallbacks);
6674
+        }
6675
+      }
6676
+    } else {
6677
+      swiper.slideTo(0, speed, runCallbacks);
6678
+    }
6679
+  },
6680
+};
6681
+
6682
+var history = {
6683
+  name: 'history',
6684
+  params: {
6685
+    history: {
6686
+      enabled: false,
6687
+      replaceState: false,
6688
+      key: 'slides',
6689
+    },
6690
+  },
6691
+  create() {
6692
+    const swiper = this;
6693
+    Utils.extend(swiper, {
6694
+      history: {
6695
+        init: History.init.bind(swiper),
6696
+        setHistory: History.setHistory.bind(swiper),
6697
+        setHistoryPopState: History.setHistoryPopState.bind(swiper),
6698
+        scrollToSlide: History.scrollToSlide.bind(swiper),
6699
+        destroy: History.destroy.bind(swiper),
6700
+      },
6701
+    });
6702
+  },
6703
+  on: {
6704
+    init() {
6705
+      const swiper = this;
6706
+      if (swiper.params.history.enabled) {
6707
+        swiper.history.init();
6708
+      }
6709
+    },
6710
+    destroy() {
6711
+      const swiper = this;
6712
+      if (swiper.params.history.enabled) {
6713
+        swiper.history.destroy();
6714
+      }
6715
+    },
6716
+    transitionEnd() {
6717
+      const swiper = this;
6718
+      if (swiper.history.initialized) {
6719
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
6720
+      }
6721
+    },
6722
+    slideChange() {
6723
+      const swiper = this;
6724
+      if (swiper.history.initialized && swiper.params.cssMode) {
6725
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
6726
+      }
6727
+    },
6728
+  },
6729
+};
6730
+
6731
+const HashNavigation = {
6732
+  onHashCange() {
6733
+    const swiper = this;
6734
+    swiper.emit('hashChange');
6735
+    const newHash = document$1.location.hash.replace('#', '');
6736
+    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
6737
+    if (newHash !== activeSlideHash) {
6738
+      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index();
6739
+      if (typeof newIndex === 'undefined') return;
6740
+      swiper.slideTo(newIndex);
6741
+    }
6742
+  },
6743
+  setHash() {
6744
+    const swiper = this;
6745
+    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
6746
+    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
6747
+      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));
6748
+      swiper.emit('hashSet');
6749
+    } else {
6750
+      const slide = swiper.slides.eq(swiper.activeIndex);
6751
+      const hash = slide.attr('data-hash') || slide.attr('data-history');
6752
+      document$1.location.hash = hash || '';
6753
+      swiper.emit('hashSet');
6754
+    }
6755
+  },
6756
+  init() {
6757
+    const swiper = this;
6758
+    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;
6759
+    swiper.hashNavigation.initialized = true;
6760
+    const hash = document$1.location.hash.replace('#', '');
6761
+    if (hash) {
6762
+      const speed = 0;
6763
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
6764
+        const slide = swiper.slides.eq(i);
6765
+        const slideHash = slide.attr('data-hash') || slide.attr('data-history');
6766
+        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
6767
+          const index = slide.index();
6768
+          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
6769
+        }
6770
+      }
6771
+    }
6772
+    if (swiper.params.hashNavigation.watchState) {
6773
+      $(window).on('hashchange', swiper.hashNavigation.onHashCange);
6774
+    }
6775
+  },
6776
+  destroy() {
6777
+    const swiper = this;
6778
+    if (swiper.params.hashNavigation.watchState) {
6779
+      $(window).off('hashchange', swiper.hashNavigation.onHashCange);
6780
+    }
6781
+  },
6782
+};
6783
+var hashNavigation = {
6784
+  name: 'hash-navigation',
6785
+  params: {
6786
+    hashNavigation: {
6787
+      enabled: false,
6788
+      replaceState: false,
6789
+      watchState: false,
6790
+    },
6791
+  },
6792
+  create() {
6793
+    const swiper = this;
6794
+    Utils.extend(swiper, {
6795
+      hashNavigation: {
6796
+        initialized: false,
6797
+        init: HashNavigation.init.bind(swiper),
6798
+        destroy: HashNavigation.destroy.bind(swiper),
6799
+        setHash: HashNavigation.setHash.bind(swiper),
6800
+        onHashCange: HashNavigation.onHashCange.bind(swiper),
6801
+      },
6802
+    });
6803
+  },
6804
+  on: {
6805
+    init() {
6806
+      const swiper = this;
6807
+      if (swiper.params.hashNavigation.enabled) {
6808
+        swiper.hashNavigation.init();
6809
+      }
6810
+    },
6811
+    destroy() {
6812
+      const swiper = this;
6813
+      if (swiper.params.hashNavigation.enabled) {
6814
+        swiper.hashNavigation.destroy();
6815
+      }
6816
+    },
6817
+    transitionEnd() {
6818
+      const swiper = this;
6819
+      if (swiper.hashNavigation.initialized) {
6820
+        swiper.hashNavigation.setHash();
6821
+      }
6822
+    },
6823
+    slideChange() {
6824
+      const swiper = this;
6825
+      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
6826
+        swiper.hashNavigation.setHash();
6827
+      }
6828
+    },
6829
+  },
6830
+};
6831
+
6832
+/* eslint no-underscore-dangle: "off" */
6833
+
6834
+const Autoplay = {
6835
+  run() {
6836
+    const swiper = this;
6837
+    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
6838
+    let delay = swiper.params.autoplay.delay;
6839
+    if ($activeSlideEl.attr('data-swiper-autoplay')) {
6840
+      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
6841
+    }
6842
+    clearTimeout(swiper.autoplay.timeout);
6843
+    swiper.autoplay.timeout = Utils.nextTick(() => {
6844
+      if (swiper.params.autoplay.reverseDirection) {
6845
+        if (swiper.params.loop) {
6846
+          swiper.loopFix();
6847
+          swiper.slidePrev(swiper.params.speed, true, true);
6848
+          swiper.emit('autoplay');
6849
+        } else if (!swiper.isBeginning) {
6850
+          swiper.slidePrev(swiper.params.speed, true, true);
6851
+          swiper.emit('autoplay');
6852
+        } else if (!swiper.params.autoplay.stopOnLastSlide) {
6853
+          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
6854
+          swiper.emit('autoplay');
6855
+        } else {
6856
+          swiper.autoplay.stop();
6857
+        }
6858
+      } else if (swiper.params.loop) {
6859
+        swiper.loopFix();
6860
+        swiper.slideNext(swiper.params.speed, true, true);
6861
+        swiper.emit('autoplay');
6862
+      } else if (!swiper.isEnd) {
6863
+        swiper.slideNext(swiper.params.speed, true, true);
6864
+        swiper.emit('autoplay');
6865
+      } else if (!swiper.params.autoplay.stopOnLastSlide) {
6866
+        swiper.slideTo(0, swiper.params.speed, true, true);
6867
+        swiper.emit('autoplay');
6868
+      } else {
6869
+        swiper.autoplay.stop();
6870
+      }
6871
+      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
6872
+    }, delay);
6873
+  },
6874
+  start() {
6875
+    const swiper = this;
6876
+    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
6877
+    if (swiper.autoplay.running) return false;
6878
+    swiper.autoplay.running = true;
6879
+    swiper.emit('autoplayStart');
6880
+    swiper.autoplay.run();
6881
+    return true;
6882
+  },
6883
+  stop() {
6884
+    const swiper = this;
6885
+    if (!swiper.autoplay.running) return false;
6886
+    if (typeof swiper.autoplay.timeout === 'undefined') return false;
6887
+
6888
+    if (swiper.autoplay.timeout) {
6889
+      clearTimeout(swiper.autoplay.timeout);
6890
+      swiper.autoplay.timeout = undefined;
6891
+    }
6892
+    swiper.autoplay.running = false;
6893
+    swiper.emit('autoplayStop');
6894
+    return true;
6895
+  },
6896
+  pause(speed) {
6897
+    const swiper = this;
6898
+    if (!swiper.autoplay.running) return;
6899
+    if (swiper.autoplay.paused) return;
6900
+    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
6901
+    swiper.autoplay.paused = true;
6902
+    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
6903
+      swiper.autoplay.paused = false;
6904
+      swiper.autoplay.run();
6905
+    } else {
6906
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
6907
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
6908
+    }
6909
+  },
6910
+};
6911
+
6912
+var autoplay = {
6913
+  name: 'autoplay',
6914
+  params: {
6915
+    autoplay: {
6916
+      enabled: false,
6917
+      delay: 3000,
6918
+      waitForTransition: true,
6919
+      disableOnInteraction: true,
6920
+      stopOnLastSlide: false,
6921
+      reverseDirection: false,
6922
+    },
6923
+  },
6924
+  create() {
6925
+    const swiper = this;
6926
+    Utils.extend(swiper, {
6927
+      autoplay: {
6928
+        running: false,
6929
+        paused: false,
6930
+        run: Autoplay.run.bind(swiper),
6931
+        start: Autoplay.start.bind(swiper),
6932
+        stop: Autoplay.stop.bind(swiper),
6933
+        pause: Autoplay.pause.bind(swiper),
6934
+        onVisibilityChange() {
6935
+          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
6936
+            swiper.autoplay.pause();
6937
+          }
6938
+          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
6939
+            swiper.autoplay.run();
6940
+            swiper.autoplay.paused = false;
6941
+          }
6942
+        },
6943
+        onTransitionEnd(e) {
6944
+          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
6945
+          if (e.target !== this) return;
6946
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
6947
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
6948
+          swiper.autoplay.paused = false;
6949
+          if (!swiper.autoplay.running) {
6950
+            swiper.autoplay.stop();
6951
+          } else {
6952
+            swiper.autoplay.run();
6953
+          }
6954
+        },
6955
+      },
6956
+    });
6957
+  },
6958
+  on: {
6959
+    init() {
6960
+      const swiper = this;
6961
+      if (swiper.params.autoplay.enabled) {
6962
+        swiper.autoplay.start();
6963
+        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
6964
+      }
6965
+    },
6966
+    beforeTransitionStart(speed, internal) {
6967
+      const swiper = this;
6968
+      if (swiper.autoplay.running) {
6969
+        if (internal || !swiper.params.autoplay.disableOnInteraction) {
6970
+          swiper.autoplay.pause(speed);
6971
+        } else {
6972
+          swiper.autoplay.stop();
6973
+        }
6974
+      }
6975
+    },
6976
+    sliderFirstMove() {
6977
+      const swiper = this;
6978
+      if (swiper.autoplay.running) {
6979
+        if (swiper.params.autoplay.disableOnInteraction) {
6980
+          swiper.autoplay.stop();
6981
+        } else {
6982
+          swiper.autoplay.pause();
6983
+        }
6984
+      }
6985
+    },
6986
+    touchEnd() {
6987
+      const swiper = this;
6988
+      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
6989
+        swiper.autoplay.run();
6990
+      }
6991
+    },
6992
+    destroy() {
6993
+      const swiper = this;
6994
+      if (swiper.autoplay.running) {
6995
+        swiper.autoplay.stop();
6996
+      }
6997
+      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
6998
+    },
6999
+  },
7000
+};
7001
+
7002
+const Fade = {
7003
+  setTranslate() {
7004
+    const swiper = this;
7005
+    const { slides } = swiper;
7006
+    for (let i = 0; i < slides.length; i += 1) {
7007
+      const $slideEl = swiper.slides.eq(i);
7008
+      const offset = $slideEl[0].swiperSlideOffset;
7009
+      let tx = -offset;
7010
+      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
7011
+      let ty = 0;
7012
+      if (!swiper.isHorizontal()) {
7013
+        ty = tx;
7014
+        tx = 0;
7015
+      }
7016
+      const slideOpacity = swiper.params.fadeEffect.crossFade
7017
+        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
7018
+        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
7019
+      $slideEl
7020
+        .css({
7021
+          opacity: slideOpacity,
7022
+        })
7023
+        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);
7024
+    }
7025
+  },
7026
+  setTransition(duration) {
7027
+    const swiper = this;
7028
+    const { slides, $wrapperEl } = swiper;
7029
+    slides.transition(duration);
7030
+    if (swiper.params.virtualTranslate && duration !== 0) {
7031
+      let eventTriggered = false;
7032
+      slides.transitionEnd(() => {
7033
+        if (eventTriggered) return;
7034
+        if (!swiper || swiper.destroyed) return;
7035
+        eventTriggered = true;
7036
+        swiper.animating = false;
7037
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
7038
+        for (let i = 0; i < triggerEvents.length; i += 1) {
7039
+          $wrapperEl.trigger(triggerEvents[i]);
7040
+        }
7041
+      });
7042
+    }
7043
+  },
7044
+};
7045
+
7046
+var effectFade = {
7047
+  name: 'effect-fade',
7048
+  params: {
7049
+    fadeEffect: {
7050
+      crossFade: false,
7051
+    },
7052
+  },
7053
+  create() {
7054
+    const swiper = this;
7055
+    Utils.extend(swiper, {
7056
+      fadeEffect: {
7057
+        setTranslate: Fade.setTranslate.bind(swiper),
7058
+        setTransition: Fade.setTransition.bind(swiper),
7059
+      },
7060
+    });
7061
+  },
7062
+  on: {
7063
+    beforeInit() {
7064
+      const swiper = this;
7065
+      if (swiper.params.effect !== 'fade') return;
7066
+      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);
7067
+      const overwriteParams = {
7068
+        slidesPerView: 1,
7069
+        slidesPerColumn: 1,
7070
+        slidesPerGroup: 1,
7071
+        watchSlidesProgress: true,
7072
+        spaceBetween: 0,
7073
+        virtualTranslate: true,
7074
+      };
7075
+      Utils.extend(swiper.params, overwriteParams);
7076
+      Utils.extend(swiper.originalParams, overwriteParams);
7077
+    },
7078
+    setTranslate() {
7079
+      const swiper = this;
7080
+      if (swiper.params.effect !== 'fade') return;
7081
+      swiper.fadeEffect.setTranslate();
7082
+    },
7083
+    setTransition(duration) {
7084
+      const swiper = this;
7085
+      if (swiper.params.effect !== 'fade') return;
7086
+      swiper.fadeEffect.setTransition(duration);
7087
+    },
7088
+  },
7089
+};
7090
+
7091
+const Cube = {
7092
+  setTranslate() {
7093
+    const swiper = this;
7094
+    const {
7095
+      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,
7096
+    } = swiper;
7097
+    const params = swiper.params.cubeEffect;
7098
+    const isHorizontal = swiper.isHorizontal();
7099
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
7100
+    let wrapperRotate = 0;
7101
+    let $cubeShadowEl;
7102
+    if (params.shadow) {
7103
+      if (isHorizontal) {
7104
+        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
7105
+        if ($cubeShadowEl.length === 0) {
7106
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7107
+          $wrapperEl.append($cubeShadowEl);
7108
+        }
7109
+        $cubeShadowEl.css({ height: `${swiperWidth}px` });
7110
+      } else {
7111
+        $cubeShadowEl = $el.find('.swiper-cube-shadow');
7112
+        if ($cubeShadowEl.length === 0) {
7113
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
7114
+          $el.append($cubeShadowEl);
7115
+        }
7116
+      }
7117
+    }
7118
+    for (let i = 0; i < slides.length; i += 1) {
7119
+      const $slideEl = slides.eq(i);
7120
+      let slideIndex = i;
7121
+      if (isVirtual) {
7122
+        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
7123
+      }
7124
+      let slideAngle = slideIndex * 90;
7125
+      let round = Math.floor(slideAngle / 360);
7126
+      if (rtl) {
7127
+        slideAngle = -slideAngle;
7128
+        round = Math.floor(-slideAngle / 360);
7129
+      }
7130
+      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
7131
+      let tx = 0;
7132
+      let ty = 0;
7133
+      let tz = 0;
7134
+      if (slideIndex % 4 === 0) {
7135
+        tx = -round * 4 * swiperSize;
7136
+        tz = 0;
7137
+      } else if ((slideIndex - 1) % 4 === 0) {
7138
+        tx = 0;
7139
+        tz = -round * 4 * swiperSize;
7140
+      } else if ((slideIndex - 2) % 4 === 0) {
7141
+        tx = swiperSize + (round * 4 * swiperSize);
7142
+        tz = swiperSize;
7143
+      } else if ((slideIndex - 3) % 4 === 0) {
7144
+        tx = -swiperSize;
7145
+        tz = (3 * swiperSize) + (swiperSize * 4 * round);
7146
+      }
7147
+      if (rtl) {
7148
+        tx = -tx;
7149
+      }
7150
+
7151
+      if (!isHorizontal) {
7152
+        ty = tx;
7153
+        tx = 0;
7154
+      }
7155
+
7156
+      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
7157
+      if (progress <= 1 && progress > -1) {
7158
+        wrapperRotate = (slideIndex * 90) + (progress * 90);
7159
+        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);
7160
+      }
7161
+      $slideEl.transform(transform);
7162
+      if (params.slideShadows) {
7163
+        // Set shadows
7164
+        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7165
+        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7166
+        if (shadowBefore.length === 0) {
7167
+          shadowBefore = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
7168
+          $slideEl.append(shadowBefore);
7169
+        }
7170
+        if (shadowAfter.length === 0) {
7171
+          shadowAfter = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
7172
+          $slideEl.append(shadowAfter);
7173
+        }
7174
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
7175
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
7176
+      }
7177
+    }
7178
+    $wrapperEl.css({
7179
+      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,
7180
+      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,
7181
+      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,
7182
+      'transform-origin': `50% 50% -${swiperSize / 2}px`,
7183
+    });
7184
+
7185
+    if (params.shadow) {
7186
+      if (isHorizontal) {
7187
+        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);
7188
+      } else {
7189
+        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
7190
+        const multiplier = 1.5 - (
7191
+          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
7192
+          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
7193
+        );
7194
+        const scale1 = params.shadowScale;
7195
+        const scale2 = params.shadowScale / multiplier;
7196
+        const offset = params.shadowOffset;
7197
+        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);
7198
+      }
7199
+    }
7200
+    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
7201
+    $wrapperEl
7202
+      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);
7203
+  },
7204
+  setTransition(duration) {
7205
+    const swiper = this;
7206
+    const { $el, slides } = swiper;
7207
+    slides
7208
+      .transition(duration)
7209
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7210
+      .transition(duration);
7211
+    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
7212
+      $el.find('.swiper-cube-shadow').transition(duration);
7213
+    }
7214
+  },
7215
+};
7216
+
7217
+var effectCube = {
7218
+  name: 'effect-cube',
7219
+  params: {
7220
+    cubeEffect: {
7221
+      slideShadows: true,
7222
+      shadow: true,
7223
+      shadowOffset: 20,
7224
+      shadowScale: 0.94,
7225
+    },
7226
+  },
7227
+  create() {
7228
+    const swiper = this;
7229
+    Utils.extend(swiper, {
7230
+      cubeEffect: {
7231
+        setTranslate: Cube.setTranslate.bind(swiper),
7232
+        setTransition: Cube.setTransition.bind(swiper),
7233
+      },
7234
+    });
7235
+  },
7236
+  on: {
7237
+    beforeInit() {
7238
+      const swiper = this;
7239
+      if (swiper.params.effect !== 'cube') return;
7240
+      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);
7241
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7242
+      const overwriteParams = {
7243
+        slidesPerView: 1,
7244
+        slidesPerColumn: 1,
7245
+        slidesPerGroup: 1,
7246
+        watchSlidesProgress: true,
7247
+        resistanceRatio: 0,
7248
+        spaceBetween: 0,
7249
+        centeredSlides: false,
7250
+        virtualTranslate: true,
7251
+      };
7252
+      Utils.extend(swiper.params, overwriteParams);
7253
+      Utils.extend(swiper.originalParams, overwriteParams);
7254
+    },
7255
+    setTranslate() {
7256
+      const swiper = this;
7257
+      if (swiper.params.effect !== 'cube') return;
7258
+      swiper.cubeEffect.setTranslate();
7259
+    },
7260
+    setTransition(duration) {
7261
+      const swiper = this;
7262
+      if (swiper.params.effect !== 'cube') return;
7263
+      swiper.cubeEffect.setTransition(duration);
7264
+    },
7265
+  },
7266
+};
7267
+
7268
+const Flip = {
7269
+  setTranslate() {
7270
+    const swiper = this;
7271
+    const { slides, rtlTranslate: rtl } = swiper;
7272
+    for (let i = 0; i < slides.length; i += 1) {
7273
+      const $slideEl = slides.eq(i);
7274
+      let progress = $slideEl[0].progress;
7275
+      if (swiper.params.flipEffect.limitRotation) {
7276
+        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
7277
+      }
7278
+      const offset = $slideEl[0].swiperSlideOffset;
7279
+      const rotate = -180 * progress;
7280
+      let rotateY = rotate;
7281
+      let rotateX = 0;
7282
+      let tx = -offset;
7283
+      let ty = 0;
7284
+      if (!swiper.isHorizontal()) {
7285
+        ty = tx;
7286
+        tx = 0;
7287
+        rotateX = -rotateY;
7288
+        rotateY = 0;
7289
+      } else if (rtl) {
7290
+        rotateY = -rotateY;
7291
+      }
7292
+
7293
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
7294
+
7295
+      if (swiper.params.flipEffect.slideShadows) {
7296
+        // Set shadows
7297
+        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7298
+        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7299
+        if (shadowBefore.length === 0) {
7300
+          shadowBefore = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`);
7301
+          $slideEl.append(shadowBefore);
7302
+        }
7303
+        if (shadowAfter.length === 0) {
7304
+          shadowAfter = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`);
7305
+          $slideEl.append(shadowAfter);
7306
+        }
7307
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
7308
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
7309
+      }
7310
+      $slideEl
7311
+        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);
7312
+    }
7313
+  },
7314
+  setTransition(duration) {
7315
+    const swiper = this;
7316
+    const { slides, activeIndex, $wrapperEl } = swiper;
7317
+    slides
7318
+      .transition(duration)
7319
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7320
+      .transition(duration);
7321
+    if (swiper.params.virtualTranslate && duration !== 0) {
7322
+      let eventTriggered = false;
7323
+      // eslint-disable-next-line
7324
+      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
7325
+        if (eventTriggered) return;
7326
+        if (!swiper || swiper.destroyed) return;
7327
+        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
7328
+        eventTriggered = true;
7329
+        swiper.animating = false;
7330
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
7331
+        for (let i = 0; i < triggerEvents.length; i += 1) {
7332
+          $wrapperEl.trigger(triggerEvents[i]);
7333
+        }
7334
+      });
7335
+    }
7336
+  },
7337
+};
7338
+
7339
+var effectFlip = {
7340
+  name: 'effect-flip',
7341
+  params: {
7342
+    flipEffect: {
7343
+      slideShadows: true,
7344
+      limitRotation: true,
7345
+    },
7346
+  },
7347
+  create() {
7348
+    const swiper = this;
7349
+    Utils.extend(swiper, {
7350
+      flipEffect: {
7351
+        setTranslate: Flip.setTranslate.bind(swiper),
7352
+        setTransition: Flip.setTransition.bind(swiper),
7353
+      },
7354
+    });
7355
+  },
7356
+  on: {
7357
+    beforeInit() {
7358
+      const swiper = this;
7359
+      if (swiper.params.effect !== 'flip') return;
7360
+      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);
7361
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7362
+      const overwriteParams = {
7363
+        slidesPerView: 1,
7364
+        slidesPerColumn: 1,
7365
+        slidesPerGroup: 1,
7366
+        watchSlidesProgress: true,
7367
+        spaceBetween: 0,
7368
+        virtualTranslate: true,
7369
+      };
7370
+      Utils.extend(swiper.params, overwriteParams);
7371
+      Utils.extend(swiper.originalParams, overwriteParams);
7372
+    },
7373
+    setTranslate() {
7374
+      const swiper = this;
7375
+      if (swiper.params.effect !== 'flip') return;
7376
+      swiper.flipEffect.setTranslate();
7377
+    },
7378
+    setTransition(duration) {
7379
+      const swiper = this;
7380
+      if (swiper.params.effect !== 'flip') return;
7381
+      swiper.flipEffect.setTransition(duration);
7382
+    },
7383
+  },
7384
+};
7385
+
7386
+const Coverflow = {
7387
+  setTranslate() {
7388
+    const swiper = this;
7389
+    const {
7390
+      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,
7391
+    } = swiper;
7392
+    const params = swiper.params.coverflowEffect;
7393
+    const isHorizontal = swiper.isHorizontal();
7394
+    const transform = swiper.translate;
7395
+    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
7396
+    const rotate = isHorizontal ? params.rotate : -params.rotate;
7397
+    const translate = params.depth;
7398
+    // Each slide offset from center
7399
+    for (let i = 0, length = slides.length; i < length; i += 1) {
7400
+      const $slideEl = slides.eq(i);
7401
+      const slideSize = slidesSizesGrid[i];
7402
+      const slideOffset = $slideEl[0].swiperSlideOffset;
7403
+      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
7404
+
7405
+      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
7406
+      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
7407
+      // var rotateZ = 0
7408
+      let translateZ = -translate * Math.abs(offsetMultiplier);
7409
+
7410
+      let stretch = params.stretch;
7411
+      // Allow percentage to make a relative stretch for responsive sliders
7412
+      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
7413
+        stretch = ((parseFloat(params.stretch) / 100) * slideSize);
7414
+      }
7415
+      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
7416
+      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;
7417
+
7418
+      // Fix for ultra small values
7419
+      if (Math.abs(translateX) < 0.001) translateX = 0;
7420
+      if (Math.abs(translateY) < 0.001) translateY = 0;
7421
+      if (Math.abs(translateZ) < 0.001) translateZ = 0;
7422
+      if (Math.abs(rotateY) < 0.001) rotateY = 0;
7423
+      if (Math.abs(rotateX) < 0.001) rotateX = 0;
7424
+
7425
+      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
7426
+
7427
+      $slideEl.transform(slideTransform);
7428
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
7429
+      if (params.slideShadows) {
7430
+        // Set shadows
7431
+        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
7432
+        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
7433
+        if ($shadowBeforeEl.length === 0) {
7434
+          $shadowBeforeEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
7435
+          $slideEl.append($shadowBeforeEl);
7436
+        }
7437
+        if ($shadowAfterEl.length === 0) {
7438
+          $shadowAfterEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
7439
+          $slideEl.append($shadowAfterEl);
7440
+        }
7441
+        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
7442
+        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
7443
+      }
7444
+    }
7445
+
7446
+    // Set correct perspective for IE10
7447
+    if (Support.pointerEvents || Support.prefixedPointerEvents) {
7448
+      const ws = $wrapperEl[0].style;
7449
+      ws.perspectiveOrigin = `${center}px 50%`;
7450
+    }
7451
+  },
7452
+  setTransition(duration) {
7453
+    const swiper = this;
7454
+    swiper.slides
7455
+      .transition(duration)
7456
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
7457
+      .transition(duration);
7458
+  },
7459
+};
7460
+
7461
+var effectCoverflow = {
7462
+  name: 'effect-coverflow',
7463
+  params: {
7464
+    coverflowEffect: {
7465
+      rotate: 50,
7466
+      stretch: 0,
7467
+      depth: 100,
7468
+      modifier: 1,
7469
+      slideShadows: true,
7470
+    },
7471
+  },
7472
+  create() {
7473
+    const swiper = this;
7474
+    Utils.extend(swiper, {
7475
+      coverflowEffect: {
7476
+        setTranslate: Coverflow.setTranslate.bind(swiper),
7477
+        setTransition: Coverflow.setTransition.bind(swiper),
7478
+      },
7479
+    });
7480
+  },
7481
+  on: {
7482
+    beforeInit() {
7483
+      const swiper = this;
7484
+      if (swiper.params.effect !== 'coverflow') return;
7485
+
7486
+      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);
7487
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
7488
+
7489
+      swiper.params.watchSlidesProgress = true;
7490
+      swiper.originalParams.watchSlidesProgress = true;
7491
+    },
7492
+    setTranslate() {
7493
+      const swiper = this;
7494
+      if (swiper.params.effect !== 'coverflow') return;
7495
+      swiper.coverflowEffect.setTranslate();
7496
+    },
7497
+    setTransition(duration) {
7498
+      const swiper = this;
7499
+      if (swiper.params.effect !== 'coverflow') return;
7500
+      swiper.coverflowEffect.setTransition(duration);
7501
+    },
7502
+  },
7503
+};
7504
+
7505
+const Thumbs = {
7506
+  init() {
7507
+    const swiper = this;
7508
+    const { thumbs: thumbsParams } = swiper.params;
7509
+    const SwiperClass = swiper.constructor;
7510
+    if (thumbsParams.swiper instanceof SwiperClass) {
7511
+      swiper.thumbs.swiper = thumbsParams.swiper;
7512
+      Utils.extend(swiper.thumbs.swiper.originalParams, {
7513
+        watchSlidesProgress: true,
7514
+        slideToClickedSlide: false,
7515
+      });
7516
+      Utils.extend(swiper.thumbs.swiper.params, {
7517
+        watchSlidesProgress: true,
7518
+        slideToClickedSlide: false,
7519
+      });
7520
+    } else if (Utils.isObject(thumbsParams.swiper)) {
7521
+      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
7522
+        watchSlidesVisibility: true,
7523
+        watchSlidesProgress: true,
7524
+        slideToClickedSlide: false,
7525
+      }));
7526
+      swiper.thumbs.swiperCreated = true;
7527
+    }
7528
+    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
7529
+    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
7530
+  },
7531
+  onThumbClick() {
7532
+    const swiper = this;
7533
+    const thumbsSwiper = swiper.thumbs.swiper;
7534
+    if (!thumbsSwiper) return;
7535
+    const clickedIndex = thumbsSwiper.clickedIndex;
7536
+    const clickedSlide = thumbsSwiper.clickedSlide;
7537
+    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
7538
+    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
7539
+    let slideToIndex;
7540
+    if (thumbsSwiper.params.loop) {
7541
+      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
7542
+    } else {
7543
+      slideToIndex = clickedIndex;
7544
+    }
7545
+    if (swiper.params.loop) {
7546
+      let currentIndex = swiper.activeIndex;
7547
+      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
7548
+        swiper.loopFix();
7549
+        // eslint-disable-next-line
7550
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
7551
+        currentIndex = swiper.activeIndex;
7552
+      }
7553
+      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
7554
+      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
7555
+      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;
7556
+      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;
7557
+      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;
7558
+      else slideToIndex = prevIndex;
7559
+    }
7560
+    swiper.slideTo(slideToIndex);
7561
+  },
7562
+  update(initial) {
7563
+    const swiper = this;
7564
+    const thumbsSwiper = swiper.thumbs.swiper;
7565
+    if (!thumbsSwiper) return;
7566
+
7567
+    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
7568
+      ? thumbsSwiper.slidesPerViewDynamic()
7569
+      : thumbsSwiper.params.slidesPerView;
7570
+
7571
+    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
7572
+    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
7573
+    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
7574
+      let currentThumbsIndex = thumbsSwiper.activeIndex;
7575
+      let newThumbsIndex;
7576
+      let direction;
7577
+      if (thumbsSwiper.params.loop) {
7578
+        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
7579
+          thumbsSwiper.loopFix();
7580
+          // eslint-disable-next-line
7581
+          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
7582
+          currentThumbsIndex = thumbsSwiper.activeIndex;
7583
+        }
7584
+        // Find actual thumbs index to slide to
7585
+        const prevThumbsIndex = thumbsSwiper.slides
7586
+          .eq(currentThumbsIndex)
7587
+          .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
7588
+          .index();
7589
+        const nextThumbsIndex = thumbsSwiper.slides
7590
+          .eq(currentThumbsIndex)
7591
+          .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
7592
+          .index();
7593
+        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;
7594
+        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;
7595
+        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;
7596
+        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;
7597
+        else newThumbsIndex = prevThumbsIndex;
7598
+        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
7599
+      } else {
7600
+        newThumbsIndex = swiper.realIndex;
7601
+        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
7602
+      }
7603
+      if (useOffset) {
7604
+        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
7605
+      }
7606
+
7607
+      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
7608
+        if (thumbsSwiper.params.centeredSlides) {
7609
+          if (newThumbsIndex > currentThumbsIndex) {
7610
+            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
7611
+          } else {
7612
+            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
7613
+          }
7614
+        } else if (newThumbsIndex > currentThumbsIndex) {
7615
+          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
7616
+        }
7617
+        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
7618
+      }
7619
+    }
7620
+
7621
+    // Activate thumbs
7622
+    let thumbsToActivate = 1;
7623
+    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
7624
+
7625
+    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
7626
+      thumbsToActivate = swiper.params.slidesPerView;
7627
+    }
7628
+
7629
+    if (!swiper.params.thumbs.multipleActiveThumbs) {
7630
+      thumbsToActivate = 1;
7631
+    }
7632
+
7633
+    thumbsToActivate = Math.floor(thumbsToActivate);
7634
+
7635
+    thumbsSwiper.slides.removeClass(thumbActiveClass);
7636
+    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
7637
+      for (let i = 0; i < thumbsToActivate; i += 1) {
7638
+        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass);
7639
+      }
7640
+    } else {
7641
+      for (let i = 0; i < thumbsToActivate; i += 1) {
7642
+        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);
7643
+      }
7644
+    }
7645
+  },
7646
+};
7647
+var thumbs = {
7648
+  name: 'thumbs',
7649
+  params: {
7650
+    thumbs: {
7651
+      swiper: null,
7652
+      multipleActiveThumbs: true,
7653
+      autoScrollOffset: 0,
7654
+      slideThumbActiveClass: 'swiper-slide-thumb-active',
7655
+      thumbsContainerClass: 'swiper-container-thumbs',
7656
+    },
7657
+  },
7658
+  create() {
7659
+    const swiper = this;
7660
+    Utils.extend(swiper, {
7661
+      thumbs: {
7662
+        swiper: null,
7663
+        init: Thumbs.init.bind(swiper),
7664
+        update: Thumbs.update.bind(swiper),
7665
+        onThumbClick: Thumbs.onThumbClick.bind(swiper),
7666
+      },
7667
+    });
7668
+  },
7669
+  on: {
7670
+    beforeInit() {
7671
+      const swiper = this;
7672
+      const { thumbs } = swiper.params;
7673
+      if (!thumbs || !thumbs.swiper) return;
7674
+      swiper.thumbs.init();
7675
+      swiper.thumbs.update(true);
7676
+    },
7677
+    slideChange() {
7678
+      const swiper = this;
7679
+      if (!swiper.thumbs.swiper) return;
7680
+      swiper.thumbs.update();
7681
+    },
7682
+    update() {
7683
+      const swiper = this;
7684
+      if (!swiper.thumbs.swiper) return;
7685
+      swiper.thumbs.update();
7686
+    },
7687
+    resize() {
7688
+      const swiper = this;
7689
+      if (!swiper.thumbs.swiper) return;
7690
+      swiper.thumbs.update();
7691
+    },
7692
+    observerUpdate() {
7693
+      const swiper = this;
7694
+      if (!swiper.thumbs.swiper) return;
7695
+      swiper.thumbs.update();
7696
+    },
7697
+    setTransition(duration) {
7698
+      const swiper = this;
7699
+      const thumbsSwiper = swiper.thumbs.swiper;
7700
+      if (!thumbsSwiper) return;
7701
+      thumbsSwiper.setTransition(duration);
7702
+    },
7703
+    beforeDestroy() {
7704
+      const swiper = this;
7705
+      const thumbsSwiper = swiper.thumbs.swiper;
7706
+      if (!thumbsSwiper) return;
7707
+      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
7708
+        thumbsSwiper.destroy();
7709
+      }
7710
+    },
7711
+  },
7712
+};
7713
+
7714
+// Swiper Class
7715
+
7716
+const components = [
7717
+  Device$1,
7718
+  Support$1,
7719
+  Browser$1,
7720
+  Resize,
7721
+  Observer$1,
7722
+  
7723
+];
7724
+
7725
+if (typeof Swiper.use === 'undefined') {
7726
+  Swiper.use = Swiper.Class.use;
7727
+  Swiper.installModule = Swiper.Class.installModule;
7728
+}
7729
+
7730
+Swiper.use(components);
7731
+
7732
+export { a11y$1 as A11y, autoplay as Autoplay, controller as Controller, effectCoverflow as EffectCoverflow, effectCube as EffectCube, effectFade as EffectFade, effectFlip as EffectFlip, hashNavigation as HashNavigation, history as History, keyboard as Keyboard, lazy as Lazy, mousewheel as Mousewheel, navigation as Navigation, pagination as Pagination, parallax as Parallax, scrollbar as Scrollbar, Swiper, thumbs as Thumbs, virtual as Virtual, zoom as Zoom };
7733
+//# sourceMappingURL=swiper.esm.js.map
0 7734
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"file":"swiper.esm.js.map","sources":["../src/utils/dom.js","../src/utils/utils.js","../src/utils/support.js","../src/utils/class.js","../src/components/core/update/updateSize.js","../src/components/core/update/updateSlides.js","../src/components/core/update/updateAutoHeight.js","../src/components/core/update/updateSlidesOffset.js","../src/components/core/update/updateSlidesProgress.js","../src/components/core/update/updateProgress.js","../src/components/core/update/updateSlidesClasses.js","../src/components/core/update/updateActiveIndex.js","../src/components/core/update/updateClickedSlide.js","../src/components/core/update/index.js","../src/components/core/translate/getTranslate.js","../src/components/core/translate/setTranslate.js","../src/components/core/translate/minTranslate.js","../src/components/core/translate/maxTranslate.js","../src/components/core/translate/translateTo.js","../src/components/core/translate/index.js","../src/components/core/transition/setTransition.js","../src/components/core/transition/transitionStart.js","../src/components/core/transition/transitionEnd.js","../src/components/core/transition/index.js","../src/components/core/slide/slideTo.js","../src/components/core/slide/slideToLoop.js","../src/components/core/slide/slideNext.js","../src/components/core/slide/slidePrev.js","../src/components/core/slide/slideReset.js","../src/components/core/slide/slideToClosest.js","../src/components/core/slide/slideToClickedSlide.js","../src/components/core/slide/index.js","../src/components/core/loop/loopCreate.js","../src/components/core/loop/loopFix.js","../src/components/core/loop/loopDestroy.js","../src/components/core/loop/index.js","../src/components/core/grab-cursor/setGrabCursor.js","../src/components/core/grab-cursor/unsetGrabCursor.js","../src/components/core/grab-cursor/index.js","../src/components/core/manipulation/appendSlide.js","../src/components/core/manipulation/prependSlide.js","../src/components/core/manipulation/addSlide.js","../src/components/core/manipulation/removeSlide.js","../src/components/core/manipulation/removeAllSlides.js","../src/components/core/manipulation/index.js","../src/utils/device.js","../src/components/core/events/onTouchStart.js","../src/components/core/events/onTouchMove.js","../src/components/core/events/onTouchEnd.js","../src/components/core/events/onResize.js","../src/components/core/events/onClick.js","../src/components/core/events/onScroll.js","../src/components/core/events/index.js","../src/components/core/breakpoints/setBreakpoint.js","../src/components/core/breakpoints/getBreakpoint.js","../src/components/core/breakpoints/index.js","../src/components/core/classes/addClasses.js","../src/components/core/classes/removeClasses.js","../src/components/core/classes/index.js","../src/components/core/images/loadImage.js","../src/components/core/images/preloadImages.js","../src/components/core/images/index.js","../src/components/core/check-overflow/index.js","../src/components/core/defaults.js","../src/components/core/core-class.js","../src/modules/device/device.js","../src/modules/support/support.js","../src/utils/browser.js","../src/modules/browser/browser.js","../src/modules/resize/resize.js","../src/modules/observer/observer.js","../src/components/virtual/virtual.js","../src/components/keyboard/keyboard.js","../src/components/mousewheel/mousewheel.js","../src/components/navigation/navigation.js","../src/components/pagination/pagination.js","../src/components/scrollbar/scrollbar.js","../src/components/parallax/parallax.js","../src/components/zoom/zoom.js","../src/components/lazy/lazy.js","../src/components/controller/controller.js","../src/components/a11y/a11y.js","../src/components/history/history.js","../src/components/hash-navigation/hash-navigation.js","../src/components/autoplay/autoplay.js","../src/components/effect-fade/effect-fade.js","../src/components/effect-cube/effect-cube.js","../src/components/effect-flip/effect-flip.js","../src/components/effect-coverflow/effect-coverflow.js","../src/components/thumbs/thumbs.js","../src/swiper.js"],"sourcesContent":["import {\n  $,\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n} from 'dom7/dist/dom7.modular';\n\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n  $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nexport default $;\n","import { window } from 'ssr-window';\n\nconst Utils = {\n  deleteProps(obj) {\n    const object = obj;\n    Object.keys(object).forEach((key) => {\n      try {\n        object[key] = null;\n      } catch (e) {\n        // no getter for object\n      }\n      try {\n        delete object[key];\n      } catch (e) {\n        // something got wrong\n      }\n    });\n  },\n  nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n  },\n  now() {\n    return Date.now();\n  },\n  getTranslate(el, axis = 'x') {\n    let matrix;\n    let curTransform;\n    let transformMatrix;\n\n    const curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n      }\n      // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n      matrix = transformMatrix.toString().split(',');\n    }\n\n    if (axis === 'x') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n    }\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n    }\n    return curTransform || 0;\n  },\n  parseUrlQuery(url) {\n    const query = {};\n    let urlToParse = url || window.location.href;\n    let i;\n    let params;\n    let param;\n    let length;\n    if (typeof urlToParse === 'string' && urlToParse.length) {\n      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n      length = params.length;\n\n      for (i = 0; i < length; i += 1) {\n        param = params[i].replace(/#\\S+/g, '').split('=');\n        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n      }\n    }\n    return query;\n  },\n  isObject(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  },\n  extend(...args) {\n    const to = Object(args[0]);\n    for (let i = 1; i < args.length; i += 1) {\n      const nextSource = args[i];\n      if (nextSource !== undefined && nextSource !== null) {\n        const keysArray = Object.keys(Object(nextSource));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          const nextKey = keysArray[nextIndex];\n          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== undefined && desc.enumerable) {\n            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              to[nextKey] = {};\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n    return to;\n  },\n};\nexport default Utils;\n","import { window, document } from 'ssr-window';\n\nconst Support = (function Support() {\n  return {\n    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n\n    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n    observer: (function checkObserver() {\n      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n    }()),\n\n    passiveListener: (function checkPassiveListener() {\n      let supportsPassive = false;\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          },\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {\n        // No support\n      }\n      return supportsPassive;\n    }()),\n\n    gestures: (function checkGestures() {\n      return 'ongesturestart' in window;\n    }()),\n  };\n}());\n\nexport default Support;\n","import Utils from './utils';\n\nclass SwiperClass {\n  constructor(params = {}) {\n    const self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach((eventName) => {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  }\n\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach((event) => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  }\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  }\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach((event) => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  }\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach((event) => {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        const handlers = [];\n        self.eventsListeners[event].forEach((eventHandler) => {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach((eventHandler) => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n  useModulesParams(instanceParams) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  }\n\n  useModules(modulesParams = {}) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      const moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach((modulePropName) => {\n          const moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach((moduleEventName) => {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n\n  static set components(components) {\n    const Class = this;\n    if (!Class.use) return;\n    Class.use(components);\n  }\n\n  static installModule(module, ...params) {\n    const Class = this;\n    if (!Class.prototype.modules) Class.prototype.modules = {};\n    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach((key) => {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach((key) => {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  }\n\n  static use(module, ...params) {\n    const Class = this;\n    if (Array.isArray(module)) {\n      module.forEach((m) => Class.installModule(m));\n      return Class;\n    }\n    return Class.installModule(module, ...params);\n  }\n}\n\nexport default SwiperClass;\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n  if (typeof swiper.params.width !== 'undefined') {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined') {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n  Utils.extend(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height,\n  });\n}\n","import { window } from 'ssr-window';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const params = swiper.params;\n\n  const {\n    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n\n  function slidesForMargin(slideIndex) {\n    if (!params.cssMode) return true;\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n    return true;\n  }\n\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.snapGrid.length;\n\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n  else slides.css({ marginRight: '', marginBottom: '' });\n\n  let slidesNumberEvenToRows;\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  }\n\n  // Calc slides\n  let slideSize;\n  const slidesPerColumn = params.slidesPerColumn;\n  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      let newSlideOrderIndex;\n      let column;\n      let row;\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        const columnsInGroup = groupIndex === 0\n          ? params.slidesPerGroup\n          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n        slide\n          .css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex,\n          });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - (column * slidesPerColumn);\n        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n          row += 1;\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - (row * slidesPerRow);\n      }\n      slide.css(\n        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n      );\n    }\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      const slideStyles = window.getComputedStyle(slide[0], null);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal()\n          ? slide.outerWidth(true)\n          : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        if (swiper.isHorizontal()) {\n          const width = parseFloat(slideStyles.getPropertyValue('width'));\n          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          const height = parseFloat(slideStyles.getPropertyValue('height'));\n          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\n        }\n      }\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        if (swiper.isHorizontal()) {\n          slides[i].style.width = `${slideSize}px`;\n        } else {\n          slides[i].style.height = `${slideSize}px`;\n        }\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n\n    prevSlideSize = slideSize;\n\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  let newSlidesGrid;\n\n  if (\n    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n  if (params.setWrapperSize) {\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid = newSlidesGrid;\n    }\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map((snap) => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Utils.extend(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid,\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n","export default function (speed) {\n  const swiper = this;\n  const activeSlides = [];\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each((index, slide) => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function () {\n  const swiper = this;\n  const slides = swiper.slides;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (translate = (this && this.translate) || 0) {\n  const swiper = this;\n  const params = swiper.params;\n\n  const { slides, rtlTranslate: rtl } = swiper;\n\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.removeClass(params.slideVisibleClass);\n\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    const slideProgress = (\n      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n    ) / (slide.swiperSlideSize + params.spaceBetween);\n    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                || (slideAfter > 1 && slideAfter <= swiper.size)\n                || (slideBefore <= 0 && slideAfter >= swiper.size);\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let { progress, isBeginning, isEnd } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / (translatesDiff);\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n  Utils.extend(swiper, {\n    progress,\n    isBeginning,\n    isEnd,\n  });\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}\n","export default function () {\n  const swiper = this;\n\n  const {\n    slides, params, $wrapperEl, activeIndex, realIndex,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n  let activeSlide;\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  }\n\n  // Active classes\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    }\n  }\n  // Next Slide\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  }\n  // Prev Slide\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    }\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    }\n  }\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    }\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n\n  // Get real index\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n  Utils.extend(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex,\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\n\nexport default {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function (axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n\n  const {\n    params, rtlTranslate: rtl, translate, $wrapperEl,\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n\n  return currentTranslate || 0;\n}\n","export default function (translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function () {\n  return (-this.snapGrid[0]);\n}\n","export default function () {\n  return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n","export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n\n  const {\n    params,\n    wrapperEl,\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n  else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: -newTranslate,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\n\nexport default {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo,\n};\n","export default function (duration, byController) {\n  const swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, params, previousIndex } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n    swiper.emit('slideChangeTransitionStart');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, previousIndex, params } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n    swiper.emit('slideChangeTransitionEnd');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\n\nexport default {\n  setTransition,\n  transitionStart,\n  transitionEnd,\n};\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n\n  const {\n    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex];\n\n  // Update progress\n  swiper.updateProgress(translate);\n\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';\n  else if (slideIndex < activeIndex) direction = 'prev';\n  else direction = 'reset';\n\n\n  // Update Index\n  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    let t = -translate;\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: t,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const { params, animating } = swiper;\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params, animating, snapGrid, slidesGrid, rtlTranslate,\n  } = swiper;\n\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach((snap) => {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n  let prevIndex;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (\n        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n      ) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n          .eq(0)\n          .index();\n\n        Utils.nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl\n        .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n        .eq(0)\n        .index();\n\n      Utils.nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\n\nexport default {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide,\n};\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n  // Remove duplicated slides\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n  let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $wrapperEl.append(blankNode);\n      }\n      slides = $wrapperEl.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((index, el) => {\n    const slide = $(el);\n    if (index < swiper.loopedSlides) appendSlides.push(el);\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n    slide.attr('data-swiper-slide-index', index);\n  });\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  swiper.emit('beforeLoopFix');\n\n  const {\n    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate();\n\n  // Fix For Negative Oversliding\n  if (activeIndex < loopedSlides) {\n    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  swiper.emit('loopFix');\n}\n","export default function () {\n  const swiper = this;\n  const { $wrapperEl, params, slides } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\n\nexport default {\n  loopCreate,\n  loopFix,\n  loopDestroy,\n};\n","import Support from '../../../utils/support';\n\nexport default function (moving) {\n  const swiper = this;\n  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  const el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","import Support from '../../../utils/support';\n\nexport default function () {\n  const swiper = this;\n  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  swiper.el.style.cursor = '';\n}\n","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\n\nexport default {\n  setGrabCursor,\n  unsetGrabCursor,\n};\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { $wrapperEl, params } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n","import Support from '../../../utils/support';\n\nexport default function (index, slides) {\n  const swiper = this;\n  const { $wrapperEl, params, activeIndex } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    $wrapperEl.append(slidesBuffer[i]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slidesIndexes) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\n\nexport default {\n  appendSlide,\n  prependSlide,\n  addSlide,\n  removeSlide,\n  removeAllSlides,\n};\n","import { window } from 'ssr-window';\nimport Support from './support';\n\nconst Device = (function Device() {\n  const platform = window.navigator.platform;\n  const ua = window.navigator.userAgent;\n\n  const device = {\n    ios: false,\n    android: false,\n    androidChrome: false,\n    desktop: false,\n    iphone: false,\n    ipod: false,\n    ipad: false,\n    edge: false,\n    ie: false,\n    firefox: false,\n    macos: false,\n    windows: false,\n    cordova: !!(window.cordova || window.phonegap),\n    phonegap: !!(window.cordova || window.phonegap),\n    electron: false,\n  };\n\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n  const edge = ua.indexOf('Edge/') >= 0;\n  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n  const windows = platform === 'Win32';\n  const electron = ua.toLowerCase().indexOf('electron') >= 0;\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  if (!ipad\n    && macos\n    && Support.touch\n    && (\n      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n      || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n      || (screenWidth === 768 && screenHeight === 1024) // other\n    )\n  ) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    macos = false;\n  }\n\n  device.ie = ie;\n  device.edge = edge;\n  device.firefox = firefox;\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.osVersion = android[2];\n    device.android = true;\n    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n  // iOS\n  if (iphone && !ipod) {\n    device.osVersion = iphone[2].replace(/_/g, '.');\n    device.iphone = true;\n  }\n  if (ipad) {\n    device.osVersion = ipad[2].replace(/_/g, '.');\n    device.ipad = true;\n  }\n  if (ipod) {\n    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    device.ipod = true;\n  }\n  // iOS 8+ changed UA\n  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n    if (device.osVersion.split('.')[0] === '10') {\n      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n    }\n  }\n\n  // Webview\n  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n  device.webview = device.webView;\n  device.standalone = device.webView;\n\n  // Desktop\n  device.desktop = !(device.ios || device.android) || electron;\n  if (device.desktop) {\n    device.electron = electron;\n    device.macos = macos;\n    device.windows = windows;\n    if (device.macos) {\n      device.os = 'macos';\n    }\n    if (device.windows) {\n      device.os = 'windows';\n    }\n  }\n\n  // Pixel Ratio\n  device.pixelRatio = window.devicePixelRatio || 1;\n\n  // Export object\n  return device;\n}());\n\nexport default Device;\n","import { window, document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n  if (\n    edgeSwipeDetection\n    && ((startX <= edgeSwipeThreshold)\n    || (startX >= window.screen.width - edgeSwipeThreshold))\n  ) {\n    return;\n  }\n\n  Utils.extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined,\n  });\n\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = Utils.now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n    if (\n      document.activeElement\n      && $(document.activeElement).is(data.formElements)\n      && document.activeElement !== $targetEl[0]\n    ) {\n      document.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n  swiper.emit('touchStart', e);\n}\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches, rtlTranslate: rtl } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n    if (data.isTouched) {\n      Utils.extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY,\n      });\n      data.touchStartTime = Utils.now();\n    }\n    return;\n  }\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (\n        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n      ) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (\n      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n    ) {\n      return;\n    }\n  }\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if ((diffX * diffX) + (diffY * diffY) >= 25) {\n        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime,\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: Utils.now(),\n    });\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n\n  const {\n    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n  } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = Utils.now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = Utils.now();\n  Utils.nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeModeMomentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(() => {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(() => {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(() => {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(() => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const { params, el } = swiper;\n\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n\n  swiper.updateSize();\n  swiper.updateSlides();\n\n  swiper.updateSlidesClasses();\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n","export default function (e) {\n  const swiper = this;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n  const { wrapperEl, rtlTranslate } = swiper;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === -0) swiper.translate = 0;\n\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { document } from 'ssr-window';\nimport Device from '../../../utils/device';\nimport Support from '../../../utils/support';\n\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  const swiper = this;\n\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nexport default {\n  attachEvents,\n  detachEvents,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const {\n    activeIndex, initialized, loopedSlides = 0, params, $el,\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n        const paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    const wasMultiRow = params.slidesPerColumn > 1;\n    const isMultiRow = breakpointParams.slidesPerColumn > 1;\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(`${params.containerModifierClass}multirow`);\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(`${params.containerModifierClass}multirow-column`);\n      }\n    }\n\n    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n    if (directionChanged && initialized) {\n      swiper.changeDirection();\n    }\n\n    Utils.extend(swiper.params, breakpointParams);\n\n    Utils.extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n    });\n\n    swiper.currentBreakpoint = breakpoint;\n\n    if (needsReLoop && initialized) {\n      swiper.loopDestroy();\n      swiper.loopCreate();\n      swiper.updateSlides();\n      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n    }\n\n    swiper.emit('breakpoint', breakpointParams);\n  }\n}\n","import { window } from 'ssr-window';\n\nexport default function (breakpoints) {\n  // Get breakpoint for window width\n  if (!breakpoints) return undefined;\n  let breakpoint = false;\n\n  const points = Object.keys(breakpoints).map((point) => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = window.innerHeight * minRatio;\n      return { value, point };\n    }\n    return { value: point, point };\n  });\n\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const { point, value } = points[i];\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\n\nexport default { setBreakpoint, getBreakpoint };\n","import Device from '../../../utils/device';\n\nexport default function () {\n  const swiper = this;\n  const {\n    classNames, params, rtl, $el,\n  } = swiper;\n  const suffixes = [];\n\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n  if (Device.android) {\n    suffixes.push('android');\n  }\n  if (Device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach((suffix) => {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n\n  $el.addClass(classNames.join(' '));\n}\n","export default function () {\n  const swiper = this;\n  const { $el, classNames } = swiper;\n\n  $el.removeClass(classNames.join(' '));\n}\n","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\n\nexport default { addClasses, removeClasses };\n","import { window } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function (imageEl, src, srcset, sizes, checkForComplete, callback) {\n  let image;\n  function onReady() {\n    if (callback) callback();\n  }\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n      if (sizes) {\n        image.sizes = sizes;\n      }\n      if (srcset) {\n        image.srcset = srcset;\n      }\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}\n","export default function () {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(\n      imageEl,\n      imageEl.currentSrc || imageEl.getAttribute('src'),\n      imageEl.srcset || imageEl.getAttribute('srcset'),\n      imageEl.sizes || imageEl.getAttribute('sizes'),\n      true,\n      onReady\n    );\n  }\n}\n","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\n\nexport default {\n  loadImage,\n  preloadImages,\n};\n","\nfunction checkOverflow() {\n  const swiper = this;\n  const params = swiper.params;\n  const wasLocked = swiper.isLocked;\n  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked;\n\n  // events\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    swiper.navigation.update();\n  }\n}\n\nexport default { checkOverflow };\n","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  //\n  preventInteractionOnTransition: false,\n\n  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n\n  // Autoheight\n  autoHeight: false,\n\n  // Set wrapper width\n  setWrapperSize: false,\n\n  // Virtual Translate\n  virtualTranslate: false,\n\n  // Effects\n  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0, // in px\n  slidesOffsetAfter: 0, // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n\n  // Round length\n  roundLengths: false,\n\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n\n  // Cursor\n  grabCursor: false,\n\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null, // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n\n  // Passive Listeners\n  passiveListeners: true,\n\n  // NS\n  containerModifierClass: 'swiper-container-', // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n\n  // Callbacks\n  runCallbacksOnInit: true,\n};\n","/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nimport SwiperClass from '../../utils/class';\n\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\n\nimport defaults from './defaults';\n\nconst prototypes = {\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  manipulation,\n  events,\n  breakpoints,\n  checkOverflow,\n  classes,\n  images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n\n    params = Utils.extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    super(params);\n\n    Object.keys(prototypes).forEach((prototypeGroup) => {\n      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    // Swiper Instance\n    const swiper = this;\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n    Object.keys(swiper.modules).forEach((moduleName) => {\n      const module = swiper.modules[moduleName];\n      if (module.params) {\n        const moduleParamName = Object.keys(module.params)[0];\n        const moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = { enabled: true };\n        }\n        if (\n          typeof params[moduleParamName] === 'object'\n          && !('enabled' in params[moduleParamName])\n        ) {\n          params[moduleParamName].enabled = true;\n        }\n        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n      }\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = Utils.extend({}, defaults);\n    swiper.useModulesParams(swiperParams);\n\n    // Extend defaults with passed params\n    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = Utils.extend({}, swiper.params);\n    swiper.passedParams = Utils.extend({}, params);\n\n    // Save Dom lib\n    swiper.$ = $;\n\n    // Find el\n    const $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      const swipers = [];\n      $el.each((index, containerEl) => {\n        const newParams = Utils.extend({}, params, { el: containerEl });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper;\n    $el.data('swiper', swiper);\n\n    // Find Wrapper\n    let $wrapperEl;\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n      // Children needs to return slot items\n      $wrapperEl.children = (options) => $el.children(options);\n    } else {\n      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n    }\n    // Extend Swiper\n    Utils.extend(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n\n      // Classes\n      classNames: [],\n\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // RTL\n      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n\n      //\n      isBeginning: true,\n      isEnd: false,\n\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n\n      // Touch Events\n      touchEvents: (function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        let desktop = ['mousedown', 'mousemove', 'mouseup'];\n        if (Support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3],\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2],\n        };\n        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }()),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        formElements: 'input, select, option, textarea, button, video, label',\n        // Last click time\n        lastClickTime: Utils.now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined,\n      },\n\n      // Clicks\n      allowClick: true,\n\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0,\n      },\n\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0,\n\n    });\n\n    // Install Modules\n    swiper.useModules();\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    return swiper;\n  }\n\n  slidesPerViewDynamic() {\n    const swiper = this;\n    const {\n      params, slides, slidesGrid, size: swiperSize, activeIndex,\n    } = swiper;\n    let spv = 1;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const { snapGrid, params } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (swiper.params.freeMode) {\n      setTranslate();\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n      return swiper;\n    }\n\n    swiper.$el\n      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n    swiper.params.direction = newDirection;\n\n    swiper.slides.each((slideIndex, slideEl) => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n\n    return swiper;\n  }\n\n  init() {\n    const swiper = this;\n    if (swiper.initialized) return;\n\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n\n    // Init Flag\n    swiper.initialized = true;\n\n    // Emit\n    swiper.emit('init');\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params, $el, $wrapperEl, slides,\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n      if (slides && slides.length) {\n        slides\n          .removeClass([\n            params.slideVisibleClass,\n            params.slideActiveClass,\n            params.slideNextClass,\n            params.slidePrevClass,\n          ].join(' '))\n          .removeAttr('style')\n          .removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach((eventName) => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      swiper.$el.data('swiper', null);\n      Utils.deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    Utils.extend(extendedDefaults, newDefaults);\n  }\n\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n\n  static get defaults() {\n    return defaults;\n  }\n\n  static get Class() {\n    return SwiperClass;\n  }\n\n  static get $() {\n    return $;\n  }\n}\n\nexport default Swiper;\n","import Device from '../../utils/device';\n\nexport default {\n  name: 'device',\n  proto: {\n    device: Device,\n  },\n  static: {\n    device: Device,\n  },\n};\n","import Support from '../../utils/support';\n\nexport default {\n  name: 'support',\n  proto: {\n    support: Support,\n  },\n  static: {\n    support: Support,\n  },\n};\n","import { window } from 'ssr-window';\n\nconst Browser = (function Browser() {\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n  }\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n  };\n}());\n\nexport default Browser;\n","import Browser from '../../utils/browser';\n\nexport default {\n  name: 'browser',\n  proto: {\n    browser: Browser,\n  },\n  static: {\n    browser: Browser,\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nexport default {\n  name: 'resize',\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      resize: {\n        resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      // Emit resize\n      window.addEventListener('resize', swiper.resize.resizeHandler);\n\n      // Emit orientationchange\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy() {\n      const swiper = this;\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Observer = {\n  func: window.MutationObserver || window.WebkitMutationObserver,\n  attach(target, options = {}) {\n    const swiper = this;\n\n    const ObserverFunc = Observer.func;\n    const observer = new ObserverFunc((mutations) => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n    });\n\n    swiper.observer.observers.push(observer);\n  },\n  init() {\n    const swiper = this;\n    if (!Support.observer || !swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n      for (let i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n    // Observe wrapper\n    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n  },\n  destroy() {\n    const swiper = this;\n    swiper.observer.observers.forEach((observer) => {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  },\n};\n\nexport default {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false,\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      observer: {\n        init: Observer.init.bind(swiper),\n        attach: Observer.attach.bind(swiper),\n        destroy: Observer.destroy.bind(swiper),\n        observers: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.observer.init();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.observer.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Virtual = {\n  update(force) {\n    const swiper = this;\n    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      renderSlide,\n      offset: previousOffset,\n    } = swiper.virtual;\n    swiper.updateActiveIndex();\n    const activeIndex = swiper.activeIndex || 0;\n\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';\n    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n      slidesBefore = slidesPerGroup + addSlidesAfter;\n    }\n    const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n    Utils.extend(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, `${offset}px`);\n      }\n      swiper.updateProgress();\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: (function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()),\n      });\n      onRendered();\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    if (force) {\n      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      if (i >= from && i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(i);\n        } else {\n          if (i > previousTo) appendIndexes.push(i);\n          if (i < previousFrom) prependIndexes.push(i);\n        }\n      }\n    }\n    appendIndexes.forEach((index) => {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort((a, b) => b - a).forEach((index) => {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n    onRendered();\n  },\n  renderSlide(slide, index) {\n    const swiper = this;\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    const $slideEl = params.renderSlide\n      ? $(params.renderSlide.call(swiper, slide, index))\n      : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n    if (params.cache) swiper.virtual.cache[index] = $slideEl;\n    return $slideEl;\n  },\n  appendSlide(slides) {\n    const swiper = this;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n    swiper.virtual.update(true);\n  },\n  prependSlide(slides) {\n    const swiper = this;\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach((cachedIndex) => {\n        const $cachedEl = cache[cachedIndex];\n        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide(slidesIndexes) {\n    const swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides() {\n    const swiper = this;\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  },\n};\n\nexport default {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      virtual: {\n        update: Virtual.update.bind(swiper),\n        appendSlide: Virtual.appendSlide.bind(swiper),\n        prependSlide: Virtual.prependSlide.bind(swiper),\n        removeSlide: Virtual.removeSlide.bind(swiper),\n        removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n        renderSlide: Virtual.renderSlide.bind(swiper),\n        slides: swiper.params.virtual.slides,\n        cache: {},\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n      const overwriteParams = {\n        watchSlidesProgress: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Keyboard = {\n  handle(event) {\n    const swiper = this;\n    const { rtlTranslate: rtl } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    // Directions locks\n    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      const swiperCoord = [\n        [swiperOffset.left, swiperOffset.top],\n        [swiperOffset.left + swiper.width, swiperOffset.top],\n        [swiperOffset.left, swiperOffset.top + swiper.height],\n        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n      ];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (\n          point[0] >= 0 && point[0] <= windowWidth\n          && point[1] >= 0 && point[1] <= windowHeight\n        ) {\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();\n      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();\n    } else {\n      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (kc === 34 || kc === 40) swiper.slideNext();\n      if (kc === 33 || kc === 38) swiper.slidePrev();\n    }\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable() {\n    const swiper = this;\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable() {\n    const swiper = this;\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  },\n};\n\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      keyboard: {\n        enabled: false,\n        enable: Keyboard.enable.bind(swiper),\n        disable: Keyboard.disable.bind(swiper),\n        handle: Keyboard.handle.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nfunction isEventSupported() {\n  const eventName = 'onwheel';\n  let isSupported = eventName in document;\n\n  if (!isSupported) {\n    const element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported\n    && document.implementation\n    && document.implementation.hasFeature\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    && document.implementation.hasFeature('', '') !== true\n  ) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\nconst Mousewheel = {\n  lastScrollTime: Utils.now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event() {\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) { // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else { // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = (pX < 1) ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = (pY < 1) ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY,\n    };\n  },\n  handleMouseEnter() {\n    const swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave() {\n    const swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle(event) {\n    let e = event;\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n    const data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n        else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n      else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n\n    if (params.invert) delta = -delta;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: Utils.now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event,\n      };\n\n      // Keep the most recent events\n      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n      const { lastEventBeforeSnap } = swiper.mousewheel;\n      const ignoreWheelEvents = lastEventBeforeSnap\n        && newEvent.time < lastEventBeforeSnap.time + 500\n        && newEvent.delta <= lastEventBeforeSnap.delta\n        && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        let position = swiper.getTranslate() + (delta * params.sensitivity);\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            recentWheelEvents.splice(0);\n          } else if (recentWheelEvents.length >= 15\n              && newEvent.time - firstEvent.time < 500\n              && firstEvent.delta - newEvent.delta >= 1\n              && newEvent.delta <= 6\n          ) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              const snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    return false;\n  },\n  animateSlider(newEvent) {\n    const swiper = this;\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n    // Return false as a default\n    return false;\n  },\n  releaseScroll(newEvent) {\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  },\n  enable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  },\n};\n\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarged: 'container',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      mousewheel: {\n        enabled: false,\n        enable: Mousewheel.enable.bind(swiper),\n        disable: Mousewheel.disable.bind(swiper),\n        handle: Mousewheel.handle.bind(swiper),\n        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n        animateSlider: Mousewheel.animateSlider.bind(swiper),\n        releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n        lastScrollTime: Utils.now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Navigation = {\n  update() {\n    // Update Navigation Buttons\n    const swiper = this;\n    const params = swiper.params.navigation;\n\n    if (swiper.params.loop) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n\n    let $nextEl;\n    let $prevEl;\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.nextEl === 'string'\n        && $nextEl.length > 1\n        && swiper.$el.find(params.nextEl).length === 1\n      ) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.prevEl === 'string'\n        && $prevEl.length > 1\n        && swiper.$el.find(params.prevEl).length === 1\n      ) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    Utils.extend(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const { $nextEl, $prevEl } = swiper.navigation;\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  },\n};\n\nexport default {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      navigation: {\n        init: Navigation.init.bind(swiper),\n        update: Navigation.update.bind(swiper),\n        destroy: Navigation.destroy.bind(swiper),\n        onNextClick: Navigation.onNextClick.bind(swiper),\n        onPrevClick: Navigation.onPrevClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    fromEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.navigation.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      const { $nextEl, $prevEl } = swiper.navigation;\n      if (\n        swiper.params.navigation.hideOnClick\n        && !$(e.target).is($prevEl)\n        && !$(e.target).is($nextEl)\n      ) {\n        let isHidden;\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n        if (isHidden === true) {\n          swiper.emit('navigationShow', swiper);\n        } else {\n          swiper.emit('navigationHide', swiper);\n        }\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Pagination = {\n  update() {\n    // Render || Update Pagination bullets/items\n    const swiper = this;\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    // Current/Total\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n        current -= (slidesLength - (swiper.loopedSlides * 2));\n      }\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n      if ($el.length > 1) {\n        bullets.each((index, bullet) => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n            if (bulletIndex === firstIndex) {\n              $bullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n            }\n            if (bulletIndex === lastIndex) {\n              $bullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n              $lastDisplayedBullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          } else {\n            $firstDisplayedBullet\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev`)\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev-prev`);\n            $lastDisplayedBullet\n              .next()\n              .addClass(`${params.bulletActiveClass}-next`)\n              .next()\n              .addClass(`${params.bulletActiveClass}-next-next`);\n          }\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n    if (params.type === 'fraction') {\n      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n    }\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', swiper, $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', swiper, $el[0]);\n    }\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render() {\n    // Render Container\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>`\n        + ' / '\n        + `<span class=\"${params.totalClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (\n      swiper.params.uniqueNavElements\n      && typeof params.el === 'string'\n      && $el.length > 1\n      && swiper.$el.find(params.el).length === 1\n    ) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      swiper.pagination.dynamicBulletIndex = 0;\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n        e.preventDefault();\n        let index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    Utils.extend(swiper.pagination, {\n      $el,\n      el: $el[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const $el = swiper.pagination.$el;\n\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n    if (params.clickable) {\n      $el.off('click', `.${params.bulletClass}`);\n    }\n  },\n};\n\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: (number) => number,\n      formatFractionTotal: (number) => number,\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-', // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable', // NEW\n      lockClass: 'swiper-pagination-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      pagination: {\n        init: Pagination.init.bind(swiper),\n        render: Pagination.render.bind(swiper),\n        update: Pagination.update.bind(swiper),\n        destroy: Pagination.destroy.bind(swiper),\n        dynamicBulletIndex: 0,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.pagination.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      if (\n        swiper.params.pagination.el\n        && swiper.params.pagination.hideOnClick\n        && swiper.pagination.$el.length > 0\n        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n      ) {\n        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n        if (isHidden === true) {\n          swiper.emit('paginationShow', swiper);\n        } else {\n          swiper.emit('paginationHide', swiper);\n        }\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    },\n  },\n};\n","import { document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Scrollbar = {\n  setTranslate() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n    const {\n      dragSize, trackSize, $dragEl, $el,\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n      $dragEl[0].style.width = `${newSize}px`;\n    } else {\n      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n      $dragEl[0].style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(() => {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n    const { scrollbar } = swiper;\n    const { $dragEl, $el } = scrollbar;\n\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n    const divider = swiper.size / swiper.virtualSize;\n    const moveDivider = divider * (trackSize / swiper.size);\n    let dragSize;\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = `${dragSize}px`;\n    } else {\n      $dragEl[0].style.height = `${dragSize}px`;\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n    Utils.extend(scrollbar, {\n      trackSize,\n      divider,\n      moveDivider,\n      dragSize,\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition(e) {\n    const swiper = this;\n    if (swiper.isHorizontal()) {\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n    }\n    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n  },\n  setDragPosition(e) {\n    const swiper = this;\n    const { scrollbar, rtlTranslate: rtl } = swiper;\n    const {\n      $el,\n      dragSize,\n      trackSize,\n      dragStartPos,\n    } = scrollbar;\n\n    let positionRatio;\n    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart(e) {\n    const swiper = this;\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n\n    clearTimeout(swiper.scrollbar.dragTimeout);\n\n    $el.transition(0);\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove(e) {\n    const swiper = this;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd(e) {\n    const swiper = this;\n\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n    swiper.emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const { scrollbar, $el: $swiperEl } = swiper;\n    const params = swiper.params.scrollbar;\n\n    let $el = $(params.el);\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n      $el = $swiperEl.find(params.el);\n    }\n\n    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n    if ($dragEl.length === 0) {\n      $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n      $el.append($dragEl);\n    }\n\n    Utils.extend(scrollbar, {\n      $el,\n      el: $el[0],\n      $dragEl,\n      dragEl: $dragEl[0],\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy() {\n    const swiper = this;\n    swiper.scrollbar.disableDraggable();\n  },\n};\n\nexport default {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      scrollbar: {\n        init: Scrollbar.init.bind(swiper),\n        destroy: Scrollbar.destroy.bind(swiper),\n        updateSize: Scrollbar.updateSize.bind(swiper),\n        setTranslate: Scrollbar.setTranslate.bind(swiper),\n        setTransition: Scrollbar.setTransition.bind(swiper),\n        enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n        disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n        setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n        onDragStart: Scrollbar.onDragStart.bind(swiper),\n        onDragMove: Scrollbar.onDragMove.bind(swiper),\n        onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    resize() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate() {\n      const swiper = this;\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy() {\n      const swiper = this;\n      swiper.scrollbar.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Parallax = {\n  setTransform(el, progress) {\n    const swiper = this;\n    const { rtl } = swiper;\n\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if ((x).indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if ((y).indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n      $el[0].style.opacity = currentOpacity;\n    }\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  },\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, slides, progress, snapGrid,\n    } = swiper;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, el) => {\n        swiper.parallax.setTransform(el, progress);\n      });\n    slides.each((slideIndex, slideEl) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each((index, el) => {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n    });\n  },\n  setTransition(duration = this.params.speed) {\n    const swiper = this;\n    const { $el } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, parallaxEl) => {\n        const $parallaxEl = $(parallaxEl);\n        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n        if (duration === 0) parallaxDuration = 0;\n        $parallaxEl.transition(parallaxDuration);\n      });\n  },\n};\n\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      parallax: {\n        setTransform: Parallax.setTransform.bind(swiper),\n        setTranslate: Parallax.setTranslate.bind(swiper),\n        setTransition: Parallax.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Device from '../../utils/device';\nimport Support from '../../utils/support';\n\nconst Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    const x1 = e.targetTouches[0].pageX;\n    const y1 = e.targetTouches[0].pageY;\n    const x2 = e.targetTouches[1].pageX;\n    const y2 = e.targetTouches[1].pageY;\n    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n    return distance;\n  },\n  // Events\n  onGestureStart(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n    if (!Support.gestures) {\n      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (Support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n    }\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n    }\n    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  onGestureEnd(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n        return;\n      }\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (image.isTouched) return;\n    if (Device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  },\n  onTouchMove(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    swiper.allowClick = false;\n    if (!image.isTouched || !gesture.$slideEl) return;\n\n    if (!image.isMoved) {\n      image.width = gesture.$imageEl[0].offsetWidth;\n      image.height = gesture.$imageEl[0].offsetHeight;\n      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n      gesture.$imageWrapEl.transition(0);\n      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (\n        swiper.isHorizontal()\n        && (\n          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      } if (\n        !swiper.isHorizontal()\n        && (\n          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n\n    image.isMoved = true;\n    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n\n    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTouchEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTransitionEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in(e) {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture, image } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left;\n      offsetY = gesture.$slideEl.offset().top;\n      diffX = (offsetX + (slideWidth / 2)) - touchX;\n      diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n\n      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  out() {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n    gesture.$slideEl = undefined;\n  },\n  // Attach/Detach Events\n  enable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n\n    swiper.zoom.enabled = false;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n};\n\nexport default {\n  name: 'zoom',\n  params: {\n    zoom: {\n      enabled: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed',\n    },\n  },\n  create() {\n    const swiper = this;\n    const zoom = {\n      enabled: false,\n      scale: 1,\n      currentScale: 1,\n      isScaling: false,\n      gesture: {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3,\n      },\n      image: {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {},\n      },\n      velocity: {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n      },\n    };\n\n    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n      zoom[methodName] = Zoom[methodName].bind(swiper);\n    });\n    Utils.extend(swiper, {\n      zoom,\n    });\n\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get() {\n        return scale;\n      },\n      set(value) {\n        if (scale !== value) {\n          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n        scale = value;\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.zoom.disable();\n    },\n    touchStart(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap(e) {\n      const swiper = this;\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Lazy = {\n  loadInSlide(index, loadInDuplicate = true) {\n    const swiper = this;\n    const params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n    const $slideEl = isVirtual\n      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n      : swiper.slides.eq(index);\n\n    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images = $images.add($slideEl[0]);\n    }\n    if ($images.length === 0) return;\n\n    $images.each((imageIndex, imageEl) => {\n      const $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n\n      const background = $imageEl.attr('data-background');\n      const src = $imageEl.attr('data-src');\n      const srcset = $imageEl.attr('data-srcset');\n      const sizes = $imageEl.attr('data-sizes');\n      const $pictureEl = $imageEl.parent('picture');\n\n      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n        if (background) {\n          $imageEl.css('background-image', `url(\"${background}\")`);\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n              const $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(`.${params.preloaderClass}`).remove();\n        if (swiper.params.loop && loadInDuplicate) {\n          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load() {\n    const swiper = this;\n    const {\n      $wrapperEl, params: swiperParams, slides, activeIndex,\n    } = swiper;\n    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    const params = swiperParams.lazy;\n\n    let slidesPerView = swiperParams.slidesPerView;\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n        const amount = params.loadPrevNextAmount;\n        const spv = slidesPerView;\n        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n        // Next Slides\n        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n        // Prev Slides\n        for (let i = minIndex; i < activeIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n};\n\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      lazy: {\n        initialImageLoaded: false,\n        load: Lazy.load.bind(swiper),\n        loadInSlide: Lazy.loadInSlide.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll() {\n      const swiper = this;\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    },\n  },\n};\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport Swiper from '../core/core-class';\nimport Utils from '../../utils/utils';\n\nconst Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    const binarySearch = (function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }());\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n    };\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction(c) {\n    const swiper = this;\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop\n        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate(setTranslate, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition(duration, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          Utils.nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        c.$wrapperEl.transitionEnd(() => {\n          if (!controlled) return;\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  },\n};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide', // or 'container'\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      controller: {\n        control: swiper.params.controller.control,\n        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n        setTranslate: Controller.setTranslate.bind(swiper),\n        setTransition: Controller.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    update() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate(translate, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition(duration, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst a11y = {\n  makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey(e) {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    const $targetEl = $(e.target);\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n      $targetEl[0].click();\n    }\n  },\n  notify(message) {\n    const swiper = this;\n    const notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation() {\n    const swiper = this;\n\n    if (swiper.params.loop || !swiper.navigation) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination() {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n        const $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init() {\n    const swiper = this;\n\n    swiper.$el.append(swiper.a11y.liveRegion);\n\n    // Navigation\n    const params = swiper.params.a11y;\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      a11y: {\n        liveRegion: $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`),\n      },\n    });\n    Object.keys(a11y).forEach((methodName) => {\n      swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nconst History = {\n  init() {\n    const swiper = this;\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    const history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues();\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState() {\n    const swiper = this;\n    swiper.history.paths = History.getPathValues();\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues() {\n    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');\n    const total = pathArray.length;\n    const key = pathArray[total - 2];\n    const value = pathArray[total - 1];\n    return { key, value };\n  },\n  setHistory(key, index) {\n    const swiper = this;\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    const slide = swiper.slides.eq(index);\n    let value = History.slugify(slide.attr('data-history'));\n    if (!window.location.pathname.includes(key)) {\n      value = `${key}/${value}`;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({ value }, null, value);\n    } else {\n      window.history.pushState({ value }, null, value);\n    }\n  },\n  slugify(text) {\n    return text.toString()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w-]+/g, '')\n      .replace(/--+/g, '-')\n      .replace(/^-+/, '')\n      .replace(/-+$/, '');\n  },\n  scrollToSlide(speed, value, runCallbacks) {\n    const swiper = this;\n    if (value) {\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHistory = History.slugify(slide.attr('data-history'));\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  },\n};\n\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      history: {\n        init: History.init.bind(swiper),\n        setHistory: History.setHistory.bind(swiper),\n        setHistoryPopState: History.setHistoryPopState.bind(swiper),\n        scrollToSlide: History.scrollToSlide.bind(swiper),\n        destroy: History.destroy.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst HashNavigation = {\n  onHashCange() {\n    const swiper = this;\n    swiper.emit('hashChange');\n    const newHash = document.location.hash.replace('#', '');\n    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n    if (newHash !== activeSlideHash) {\n      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash() {\n    const swiper = this;\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n      swiper.emit('hashSet');\n    } else {\n      const slide = swiper.slides.eq(swiper.activeIndex);\n      const hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n    swiper.hashNavigation.initialized = true;\n    const hash = document.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      hashNavigation: {\n        initialized: false,\n        init: HashNavigation.init.bind(swiper),\n        destroy: HashNavigation.destroy.bind(swiper),\n        setHash: HashNavigation.setHash.bind(swiper),\n        onHashCange: HashNavigation.onHashCange.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n  },\n};\n","/* eslint no-underscore-dangle: \"off\" */\nimport Utils from '../../utils/utils';\n\nconst Autoplay = {\n  run() {\n    const swiper = this;\n    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    let delay = swiper.params.autoplay.delay;\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = Utils.nextTick(() => {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start() {\n    const swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop() {\n    const swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause(speed) {\n    const swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n};\n\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      autoplay: {\n        running: false,\n        paused: false,\n        run: Autoplay.run.bind(swiper),\n        start: Autoplay.start.bind(swiper),\n        stop: Autoplay.stop.bind(swiper),\n        pause: Autoplay.pause.bind(swiper),\n        onVisibilityChange() {\n          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n            swiper.autoplay.pause();\n          }\n          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n            swiper.autoplay.run();\n            swiper.autoplay.paused = false;\n          }\n        },\n        onTransitionEnd(e) {\n          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n          swiper.autoplay.paused = false;\n          if (!swiper.autoplay.running) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.run();\n          }\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart(speed, internal) {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd() {\n      const swiper = this;\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\n\nconst Fade = {\n  setTranslate() {\n    const swiper = this;\n    const { slides } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade\n        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl\n        .css({\n          opacity: slideOpacity,\n        })\n        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, $wrapperEl } = swiper;\n    slides.transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      slides.transitionEnd(() => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      fadeEffect: {\n        setTranslate: Fade.setTranslate.bind(swiper),\n        setTransition: Fade.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Browser from '../../utils/browser';\n\nconst Cube = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n    } = swiper;\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let $cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n        $cubeShadowEl.css({ height: `${swiperWidth}px` });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + (round * 4 * swiperSize);\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = (3 * swiperSize) + (swiperSize * 4 * round);\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = (slideIndex * 90) + (progress * 90);\n        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n      }\n      $slideEl.transform(transform);\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n    $wrapperEl.css({\n      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      'transform-origin': `50% 50% -${swiperSize / 2}px`,\n    });\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n      } else {\n        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n        const multiplier = 1.5 - (\n          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n        );\n        const scale1 = params.shadowScale;\n        const scale2 = params.shadowScale / multiplier;\n        const offset = params.shadowOffset;\n        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n      }\n    }\n    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n    $wrapperEl\n      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { $el, slides } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  },\n};\n\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      cubeEffect: {\n        setTranslate: Cube.setTranslate.bind(swiper),\n        setTransition: Cube.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Flip = {\n  setTranslate() {\n    const swiper = this;\n    const { slides, rtlTranslate: rtl } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let progress = $slideEl[0].progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n      const offset = $slideEl[0].swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n      $slideEl\n        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, activeIndex, $wrapperEl } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      // eslint-disable-next-line\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      flipEffect: {\n        setTranslate: Flip.setTranslate.bind(swiper),\n        setTransition: Flip.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Support from '../../utils/support';\nimport Utils from '../../utils/utils';\n\nconst Coverflow = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n    } = swiper;\n    const params = swiper.params.coverflowEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const transform = swiper.translate;\n    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\n    const translate = params.depth;\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const $slideEl = slides.eq(i);\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = $slideEl[0].swiperSlideOffset;\n      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n      }\n      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n      if (params.slideShadows) {\n        // Set shadows\n        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append($shadowBeforeEl);\n        }\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append($shadowAfterEl);\n        }\n        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n      }\n    }\n\n    // Set correct perspective for IE10\n    if (Support.pointerEvents || Support.prefixedPointerEvents) {\n      const ws = $wrapperEl[0].style;\n      ws.perspectiveOrigin = `${center}px 50%`;\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    swiper.slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n  },\n};\n\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      modifier: 1,\n      slideShadows: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      coverflowEffect: {\n        setTranslate: Coverflow.setTranslate.bind(swiper),\n        setTransition: Coverflow.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n\n      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\nimport $ from '../../utils/dom';\n\nconst Thumbs = {\n  init() {\n    const swiper = this;\n    const { thumbs: thumbsParams } = swiper.params;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Utils.extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n      Utils.extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n    } else if (Utils.isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n  },\n  onThumbClick() {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      let currentIndex = swiper.activeIndex;\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix();\n        // eslint-disable-next-line\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n      else slideToIndex = prevIndex;\n    }\n    swiper.slideTo(slideToIndex);\n  },\n  update(initial) {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n      ? thumbsSwiper.slidesPerViewDynamic()\n      : thumbsSwiper.params.slidesPerView;\n\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      let currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix();\n          // eslint-disable-next-line\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        }\n        // Find actual thumbs index to slide to\n        const prevThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        const nextThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n        else newThumbsIndex = prevThumbsIndex;\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n      }\n    }\n  },\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      thumbs: {\n        swiper: null,\n        init: Thumbs.init.bind(swiper),\n        update: Thumbs.update.bind(swiper),\n        onThumbClick: Thumbs.onThumbClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      const { thumbs } = swiper.params;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy() {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    },\n  },\n};\n","// Swiper Class\nimport Swiper from './components/core/core-class';\n\n// Core Modules\nimport Device from './modules/device/device';\nimport Support from './modules/support/support';\nimport Browser from './modules/browser/browser';\nimport Resize from './modules/resize/resize';\nimport Observer from './modules/observer/observer';\n\n//IMPORT_COMPONENTS\n\nconst components = [\n  Device,\n  Support,\n  Browser,\n  Resize,\n  Observer,\n  //INSTALL_COMPONENTS\n];\n\nif (typeof Swiper.use === 'undefined') {\n  Swiper.use = Swiper.Class.use;\n  Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\n//EXPORT\n"],"names":["transition","transitionEnd","document","checkOverflow","Device","Support","Browser","Observer"],"mappings":"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"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,8791 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+(function (global, factory) {
14
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
15
+    typeof define === 'function' && define.amd ? define(factory) :
16
+    (global = global || self, global.Swiper = factory());
17
+}(this, (function () { 'use strict';
18
+
19
+    /**
20
+     * SSR Window 2.0.0
21
+     * Better handling for window object in SSR environment
22
+     * https://github.com/nolimits4web/ssr-window
23
+     *
24
+     * Copyright 2020, Vladimir Kharlampidi
25
+     *
26
+     * Licensed under MIT
27
+     *
28
+     * Released on: May 12, 2020
29
+     */
30
+    /* eslint-disable no-param-reassign */
31
+    function isObject(obj) {
32
+        return (obj !== null &&
33
+            typeof obj === 'object' &&
34
+            'constructor' in obj &&
35
+            obj.constructor === Object);
36
+    }
37
+    function extend(target, src) {
38
+        if (target === void 0) { target = {}; }
39
+        if (src === void 0) { src = {}; }
40
+        Object.keys(src).forEach(function (key) {
41
+            if (typeof target[key] === 'undefined')
42
+                { target[key] = src[key]; }
43
+            else if (isObject(src[key]) &&
44
+                isObject(target[key]) &&
45
+                Object.keys(src[key]).length > 0) {
46
+                extend(target[key], src[key]);
47
+            }
48
+        });
49
+    }
50
+
51
+    var doc = typeof document !== 'undefined' ? document : {};
52
+    var ssrDocument = {
53
+        body: {},
54
+        addEventListener: function () { },
55
+        removeEventListener: function () { },
56
+        activeElement: {
57
+            blur: function () { },
58
+            nodeName: '',
59
+        },
60
+        querySelector: function () {
61
+            return null;
62
+        },
63
+        querySelectorAll: function () {
64
+            return [];
65
+        },
66
+        getElementById: function () {
67
+            return null;
68
+        },
69
+        createEvent: function () {
70
+            return {
71
+                initEvent: function () { },
72
+            };
73
+        },
74
+        createElement: function () {
75
+            return {
76
+                children: [],
77
+                childNodes: [],
78
+                style: {},
79
+                setAttribute: function () { },
80
+                getElementsByTagName: function () {
81
+                    return [];
82
+                },
83
+            };
84
+        },
85
+        createElementNS: function () {
86
+            return {};
87
+        },
88
+        importNode: function () {
89
+            return null;
90
+        },
91
+        location: {
92
+            hash: '',
93
+            host: '',
94
+            hostname: '',
95
+            href: '',
96
+            origin: '',
97
+            pathname: '',
98
+            protocol: '',
99
+            search: '',
100
+        },
101
+    };
102
+    extend(doc, ssrDocument);
103
+
104
+    var win = typeof window !== 'undefined' ? window : {};
105
+    var ssrWindow = {
106
+        document: ssrDocument,
107
+        navigator: {
108
+            userAgent: '',
109
+        },
110
+        location: {
111
+            hash: '',
112
+            host: '',
113
+            hostname: '',
114
+            href: '',
115
+            origin: '',
116
+            pathname: '',
117
+            protocol: '',
118
+            search: '',
119
+        },
120
+        history: {
121
+            replaceState: function () { },
122
+            pushState: function () { },
123
+            go: function () { },
124
+            back: function () { },
125
+        },
126
+        CustomEvent: function CustomEvent() {
127
+            return this;
128
+        },
129
+        addEventListener: function () { },
130
+        removeEventListener: function () { },
131
+        getComputedStyle: function () {
132
+            return {
133
+                getPropertyValue: function () {
134
+                    return '';
135
+                },
136
+            };
137
+        },
138
+        Image: function () { },
139
+        Date: function () { },
140
+        screen: {},
141
+        setTimeout: function () { },
142
+        clearTimeout: function () { },
143
+        matchMedia: function () {
144
+            return {};
145
+        },
146
+    };
147
+    extend(win, ssrWindow);
148
+
149
+    /**
150
+     * Dom7 2.1.5
151
+     * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
152
+     * http://framework7.io/docs/dom.html
153
+     *
154
+     * Copyright 2020, Vladimir Kharlampidi
155
+     * The iDangero.us
156
+     * http://www.idangero.us/
157
+     *
158
+     * Licensed under MIT
159
+     *
160
+     * Released on: May 15, 2020
161
+     */
162
+
163
+    var Dom7 = function Dom7(arr) {
164
+      var self = this;
165
+      // Create array-like object
166
+      for (var i = 0; i < arr.length; i += 1) {
167
+        self[i] = arr[i];
168
+      }
169
+      self.length = arr.length;
170
+      // Return collection with methods
171
+      return this;
172
+    };
173
+
174
+    function $(selector, context) {
175
+      var arr = [];
176
+      var i = 0;
177
+      if (selector && !context) {
178
+        if (selector instanceof Dom7) {
179
+          return selector;
180
+        }
181
+      }
182
+      if (selector) {
183
+          // String
184
+        if (typeof selector === 'string') {
185
+          var els;
186
+          var tempParent;
187
+          var html = selector.trim();
188
+          if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
189
+            var toCreate = 'div';
190
+            if (html.indexOf('<li') === 0) { toCreate = 'ul'; }
191
+            if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }
192
+            if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }
193
+            if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }
194
+            if (html.indexOf('<option') === 0) { toCreate = 'select'; }
195
+            tempParent = doc.createElement(toCreate);
196
+            tempParent.innerHTML = html;
197
+            for (i = 0; i < tempParent.childNodes.length; i += 1) {
198
+              arr.push(tempParent.childNodes[i]);
199
+            }
200
+          } else {
201
+            if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
202
+              // Pure ID selector
203
+              els = [doc.getElementById(selector.trim().split('#')[1])];
204
+            } else {
205
+              // Other selectors
206
+              els = (context || doc).querySelectorAll(selector.trim());
207
+            }
208
+            for (i = 0; i < els.length; i += 1) {
209
+              if (els[i]) { arr.push(els[i]); }
210
+            }
211
+          }
212
+        } else if (selector.nodeType || selector === win || selector === doc) {
213
+          // Node/element
214
+          arr.push(selector);
215
+        } else if (selector.length > 0 && selector[0].nodeType) {
216
+          // Array of elements or instance of Dom
217
+          for (i = 0; i < selector.length; i += 1) {
218
+            arr.push(selector[i]);
219
+          }
220
+        }
221
+      }
222
+      return new Dom7(arr);
223
+    }
224
+
225
+    $.fn = Dom7.prototype;
226
+    $.Class = Dom7;
227
+    $.Dom7 = Dom7;
228
+
229
+    function unique(arr) {
230
+      var uniqueArray = [];
231
+      for (var i = 0; i < arr.length; i += 1) {
232
+        if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }
233
+      }
234
+      return uniqueArray;
235
+    }
236
+
237
+    // Classes and attributes
238
+    function addClass(className) {
239
+      if (typeof className === 'undefined') {
240
+        return this;
241
+      }
242
+      var classes = className.split(' ');
243
+      for (var i = 0; i < classes.length; i += 1) {
244
+        for (var j = 0; j < this.length; j += 1) {
245
+          if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }
246
+        }
247
+      }
248
+      return this;
249
+    }
250
+    function removeClass(className) {
251
+      var classes = className.split(' ');
252
+      for (var i = 0; i < classes.length; i += 1) {
253
+        for (var j = 0; j < this.length; j += 1) {
254
+          if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }
255
+        }
256
+      }
257
+      return this;
258
+    }
259
+    function hasClass(className) {
260
+      if (!this[0]) { return false; }
261
+      return this[0].classList.contains(className);
262
+    }
263
+    function toggleClass(className) {
264
+      var classes = className.split(' ');
265
+      for (var i = 0; i < classes.length; i += 1) {
266
+        for (var j = 0; j < this.length; j += 1) {
267
+          if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }
268
+        }
269
+      }
270
+      return this;
271
+    }
272
+    function attr(attrs, value) {
273
+      var arguments$1 = arguments;
274
+
275
+      if (arguments.length === 1 && typeof attrs === 'string') {
276
+        // Get attr
277
+        if (this[0]) { return this[0].getAttribute(attrs); }
278
+        return undefined;
279
+      }
280
+
281
+      // Set attrs
282
+      for (var i = 0; i < this.length; i += 1) {
283
+        if (arguments$1.length === 2) {
284
+          // String
285
+          this[i].setAttribute(attrs, value);
286
+        } else {
287
+          // Object
288
+          // eslint-disable-next-line
289
+          for (var attrName in attrs) {
290
+            this[i][attrName] = attrs[attrName];
291
+            this[i].setAttribute(attrName, attrs[attrName]);
292
+          }
293
+        }
294
+      }
295
+      return this;
296
+    }
297
+    // eslint-disable-next-line
298
+    function removeAttr(attr) {
299
+      for (var i = 0; i < this.length; i += 1) {
300
+        this[i].removeAttribute(attr);
301
+      }
302
+      return this;
303
+    }
304
+    function data(key, value) {
305
+      var el;
306
+      if (typeof value === 'undefined') {
307
+        el = this[0];
308
+        // Get value
309
+        if (el) {
310
+          if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {
311
+            return el.dom7ElementDataStorage[key];
312
+          }
313
+
314
+          var dataKey = el.getAttribute(("data-" + key));
315
+          if (dataKey) {
316
+            return dataKey;
317
+          }
318
+          return undefined;
319
+        }
320
+        return undefined;
321
+      }
322
+
323
+      // Set value
324
+      for (var i = 0; i < this.length; i += 1) {
325
+        el = this[i];
326
+        if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }
327
+        el.dom7ElementDataStorage[key] = value;
328
+      }
329
+      return this;
330
+    }
331
+    // Transforms
332
+    // eslint-disable-next-line
333
+    function transform(transform) {
334
+      for (var i = 0; i < this.length; i += 1) {
335
+        var elStyle = this[i].style;
336
+        elStyle.webkitTransform = transform;
337
+        elStyle.transform = transform;
338
+      }
339
+      return this;
340
+    }
341
+    function transition(duration) {
342
+      if (typeof duration !== 'string') {
343
+        duration = duration + "ms"; // eslint-disable-line
344
+      }
345
+      for (var i = 0; i < this.length; i += 1) {
346
+        var elStyle = this[i].style;
347
+        elStyle.webkitTransitionDuration = duration;
348
+        elStyle.transitionDuration = duration;
349
+      }
350
+      return this;
351
+    }
352
+    // Events
353
+    function on() {
354
+      var assign;
355
+
356
+      var args = [], len = arguments.length;
357
+      while ( len-- ) args[ len ] = arguments[ len ];
358
+      var eventType = args[0];
359
+      var targetSelector = args[1];
360
+      var listener = args[2];
361
+      var capture = args[3];
362
+      if (typeof args[1] === 'function') {
363
+        (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
364
+        targetSelector = undefined;
365
+      }
366
+      if (!capture) { capture = false; }
367
+
368
+      function handleLiveEvent(e) {
369
+        var target = e.target;
370
+        if (!target) { return; }
371
+        var eventData = e.target.dom7EventData || [];
372
+        if (eventData.indexOf(e) < 0) {
373
+          eventData.unshift(e);
374
+        }
375
+        if ($(target).is(targetSelector)) { listener.apply(target, eventData); }
376
+        else {
377
+          var parents = $(target).parents(); // eslint-disable-line
378
+          for (var k = 0; k < parents.length; k += 1) {
379
+            if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }
380
+          }
381
+        }
382
+      }
383
+      function handleEvent(e) {
384
+        var eventData = e && e.target ? e.target.dom7EventData || [] : [];
385
+        if (eventData.indexOf(e) < 0) {
386
+          eventData.unshift(e);
387
+        }
388
+        listener.apply(this, eventData);
389
+      }
390
+      var events = eventType.split(' ');
391
+      var j;
392
+      for (var i = 0; i < this.length; i += 1) {
393
+        var el = this[i];
394
+        if (!targetSelector) {
395
+          for (j = 0; j < events.length; j += 1) {
396
+            var event = events[j];
397
+            if (!el.dom7Listeners) { el.dom7Listeners = {}; }
398
+            if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }
399
+            el.dom7Listeners[event].push({
400
+              listener: listener,
401
+              proxyListener: handleEvent,
402
+            });
403
+            el.addEventListener(event, handleEvent, capture);
404
+          }
405
+        } else {
406
+          // Live events
407
+          for (j = 0; j < events.length; j += 1) {
408
+            var event$1 = events[j];
409
+            if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }
410
+            if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }
411
+            el.dom7LiveListeners[event$1].push({
412
+              listener: listener,
413
+              proxyListener: handleLiveEvent,
414
+            });
415
+            el.addEventListener(event$1, handleLiveEvent, capture);
416
+          }
417
+        }
418
+      }
419
+      return this;
420
+    }
421
+    function off() {
422
+      var assign;
423
+
424
+      var args = [], len = arguments.length;
425
+      while ( len-- ) args[ len ] = arguments[ len ];
426
+      var eventType = args[0];
427
+      var targetSelector = args[1];
428
+      var listener = args[2];
429
+      var capture = args[3];
430
+      if (typeof args[1] === 'function') {
431
+        (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
432
+        targetSelector = undefined;
433
+      }
434
+      if (!capture) { capture = false; }
435
+
436
+      var events = eventType.split(' ');
437
+      for (var i = 0; i < events.length; i += 1) {
438
+        var event = events[i];
439
+        for (var j = 0; j < this.length; j += 1) {
440
+          var el = this[j];
441
+          var handlers = (void 0);
442
+          if (!targetSelector && el.dom7Listeners) {
443
+            handlers = el.dom7Listeners[event];
444
+          } else if (targetSelector && el.dom7LiveListeners) {
445
+            handlers = el.dom7LiveListeners[event];
446
+          }
447
+          if (handlers && handlers.length) {
448
+            for (var k = handlers.length - 1; k >= 0; k -= 1) {
449
+              var handler = handlers[k];
450
+              if (listener && handler.listener === listener) {
451
+                el.removeEventListener(event, handler.proxyListener, capture);
452
+                handlers.splice(k, 1);
453
+              } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
454
+                el.removeEventListener(event, handler.proxyListener, capture);
455
+                handlers.splice(k, 1);
456
+              } else if (!listener) {
457
+                el.removeEventListener(event, handler.proxyListener, capture);
458
+                handlers.splice(k, 1);
459
+              }
460
+            }
461
+          }
462
+        }
463
+      }
464
+      return this;
465
+    }
466
+    function trigger() {
467
+      var args = [], len = arguments.length;
468
+      while ( len-- ) args[ len ] = arguments[ len ];
469
+
470
+      var events = args[0].split(' ');
471
+      var eventData = args[1];
472
+      for (var i = 0; i < events.length; i += 1) {
473
+        var event = events[i];
474
+        for (var j = 0; j < this.length; j += 1) {
475
+          var el = this[j];
476
+          var evt = (void 0);
477
+          try {
478
+            evt = new win.CustomEvent(event, {
479
+              detail: eventData,
480
+              bubbles: true,
481
+              cancelable: true,
482
+            });
483
+          } catch (e) {
484
+            evt = doc.createEvent('Event');
485
+            evt.initEvent(event, true, true);
486
+            evt.detail = eventData;
487
+          }
488
+          // eslint-disable-next-line
489
+          el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });
490
+          el.dispatchEvent(evt);
491
+          el.dom7EventData = [];
492
+          delete el.dom7EventData;
493
+        }
494
+      }
495
+      return this;
496
+    }
497
+    function transitionEnd(callback) {
498
+      var events = ['webkitTransitionEnd', 'transitionend'];
499
+      var dom = this;
500
+      var i;
501
+      function fireCallBack(e) {
502
+        /* jshint validthis:true */
503
+        if (e.target !== this) { return; }
504
+        callback.call(this, e);
505
+        for (i = 0; i < events.length; i += 1) {
506
+          dom.off(events[i], fireCallBack);
507
+        }
508
+      }
509
+      if (callback) {
510
+        for (i = 0; i < events.length; i += 1) {
511
+          dom.on(events[i], fireCallBack);
512
+        }
513
+      }
514
+      return this;
515
+    }
516
+    function outerWidth(includeMargins) {
517
+      if (this.length > 0) {
518
+        if (includeMargins) {
519
+          // eslint-disable-next-line
520
+          var styles = this.styles();
521
+          return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
522
+        }
523
+        return this[0].offsetWidth;
524
+      }
525
+      return null;
526
+    }
527
+    function outerHeight(includeMargins) {
528
+      if (this.length > 0) {
529
+        if (includeMargins) {
530
+          // eslint-disable-next-line
531
+          var styles = this.styles();
532
+          return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
533
+        }
534
+        return this[0].offsetHeight;
535
+      }
536
+      return null;
537
+    }
538
+    function offset() {
539
+      if (this.length > 0) {
540
+        var el = this[0];
541
+        var box = el.getBoundingClientRect();
542
+        var body = doc.body;
543
+        var clientTop = el.clientTop || body.clientTop || 0;
544
+        var clientLeft = el.clientLeft || body.clientLeft || 0;
545
+        var scrollTop = el === win ? win.scrollY : el.scrollTop;
546
+        var scrollLeft = el === win ? win.scrollX : el.scrollLeft;
547
+        return {
548
+          top: (box.top + scrollTop) - clientTop,
549
+          left: (box.left + scrollLeft) - clientLeft,
550
+        };
551
+      }
552
+
553
+      return null;
554
+    }
555
+    function styles() {
556
+      if (this[0]) { return win.getComputedStyle(this[0], null); }
557
+      return {};
558
+    }
559
+    function css(props, value) {
560
+      var i;
561
+      if (arguments.length === 1) {
562
+        if (typeof props === 'string') {
563
+          if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }
564
+        } else {
565
+          for (i = 0; i < this.length; i += 1) {
566
+            // eslint-disable-next-line
567
+            for (var prop in props) {
568
+              this[i].style[prop] = props[prop];
569
+            }
570
+          }
571
+          return this;
572
+        }
573
+      }
574
+      if (arguments.length === 2 && typeof props === 'string') {
575
+        for (i = 0; i < this.length; i += 1) {
576
+          this[i].style[props] = value;
577
+        }
578
+        return this;
579
+      }
580
+      return this;
581
+    }
582
+    // Iterate over the collection passing elements to `callback`
583
+    function each(callback) {
584
+      // Don't bother continuing without a callback
585
+      if (!callback) { return this; }
586
+      // Iterate over the current collection
587
+      for (var i = 0; i < this.length; i += 1) {
588
+        // If the callback returns false
589
+        if (callback.call(this[i], i, this[i]) === false) {
590
+          // End the loop early
591
+          return this;
592
+        }
593
+      }
594
+      // Return `this` to allow chained DOM operations
595
+      return this;
596
+    }
597
+    function filter(callback) {
598
+      var matchedItems = [];
599
+      var dom = this;
600
+      for (var i = 0; i < dom.length; i += 1) {
601
+        if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }
602
+      }
603
+      return new Dom7(matchedItems);
604
+    }
605
+    // eslint-disable-next-line
606
+    function html(html) {
607
+      if (typeof html === 'undefined') {
608
+        return this[0] ? this[0].innerHTML : undefined;
609
+      }
610
+
611
+      for (var i = 0; i < this.length; i += 1) {
612
+        this[i].innerHTML = html;
613
+      }
614
+      return this;
615
+    }
616
+    // eslint-disable-next-line
617
+    function text(text) {
618
+      if (typeof text === 'undefined') {
619
+        if (this[0]) {
620
+          return this[0].textContent.trim();
621
+        }
622
+        return null;
623
+      }
624
+
625
+      for (var i = 0; i < this.length; i += 1) {
626
+        this[i].textContent = text;
627
+      }
628
+      return this;
629
+    }
630
+    function is(selector) {
631
+      var el = this[0];
632
+      var compareWith;
633
+      var i;
634
+      if (!el || typeof selector === 'undefined') { return false; }
635
+      if (typeof selector === 'string') {
636
+        if (el.matches) { return el.matches(selector); }
637
+        else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }
638
+        else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }
639
+
640
+        compareWith = $(selector);
641
+        for (i = 0; i < compareWith.length; i += 1) {
642
+          if (compareWith[i] === el) { return true; }
643
+        }
644
+        return false;
645
+      } else if (selector === doc) { return el === doc; }
646
+      else if (selector === win) { return el === win; }
647
+
648
+      if (selector.nodeType || selector instanceof Dom7) {
649
+        compareWith = selector.nodeType ? [selector] : selector;
650
+        for (i = 0; i < compareWith.length; i += 1) {
651
+          if (compareWith[i] === el) { return true; }
652
+        }
653
+        return false;
654
+      }
655
+      return false;
656
+    }
657
+    function index() {
658
+      var child = this[0];
659
+      var i;
660
+      if (child) {
661
+        i = 0;
662
+        // eslint-disable-next-line
663
+        while ((child = child.previousSibling) !== null) {
664
+          if (child.nodeType === 1) { i += 1; }
665
+        }
666
+        return i;
667
+      }
668
+      return undefined;
669
+    }
670
+    // eslint-disable-next-line
671
+    function eq(index) {
672
+      if (typeof index === 'undefined') { return this; }
673
+      var length = this.length;
674
+      var returnIndex;
675
+      if (index > length - 1) {
676
+        return new Dom7([]);
677
+      }
678
+      if (index < 0) {
679
+        returnIndex = length + index;
680
+        if (returnIndex < 0) { return new Dom7([]); }
681
+        return new Dom7([this[returnIndex]]);
682
+      }
683
+      return new Dom7([this[index]]);
684
+    }
685
+    function append() {
686
+      var args = [], len = arguments.length;
687
+      while ( len-- ) args[ len ] = arguments[ len ];
688
+
689
+      var newChild;
690
+
691
+      for (var k = 0; k < args.length; k += 1) {
692
+        newChild = args[k];
693
+        for (var i = 0; i < this.length; i += 1) {
694
+          if (typeof newChild === 'string') {
695
+            var tempDiv = doc.createElement('div');
696
+            tempDiv.innerHTML = newChild;
697
+            while (tempDiv.firstChild) {
698
+              this[i].appendChild(tempDiv.firstChild);
699
+            }
700
+          } else if (newChild instanceof Dom7) {
701
+            for (var j = 0; j < newChild.length; j += 1) {
702
+              this[i].appendChild(newChild[j]);
703
+            }
704
+          } else {
705
+            this[i].appendChild(newChild);
706
+          }
707
+        }
708
+      }
709
+
710
+      return this;
711
+    }
712
+    function prepend(newChild) {
713
+      var i;
714
+      var j;
715
+      for (i = 0; i < this.length; i += 1) {
716
+        if (typeof newChild === 'string') {
717
+          var tempDiv = doc.createElement('div');
718
+          tempDiv.innerHTML = newChild;
719
+          for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
720
+            this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
721
+          }
722
+        } else if (newChild instanceof Dom7) {
723
+          for (j = 0; j < newChild.length; j += 1) {
724
+            this[i].insertBefore(newChild[j], this[i].childNodes[0]);
725
+          }
726
+        } else {
727
+          this[i].insertBefore(newChild, this[i].childNodes[0]);
728
+        }
729
+      }
730
+      return this;
731
+    }
732
+    function next(selector) {
733
+      if (this.length > 0) {
734
+        if (selector) {
735
+          if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
736
+            return new Dom7([this[0].nextElementSibling]);
737
+          }
738
+          return new Dom7([]);
739
+        }
740
+
741
+        if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }
742
+        return new Dom7([]);
743
+      }
744
+      return new Dom7([]);
745
+    }
746
+    function nextAll(selector) {
747
+      var nextEls = [];
748
+      var el = this[0];
749
+      if (!el) { return new Dom7([]); }
750
+      while (el.nextElementSibling) {
751
+        var next = el.nextElementSibling; // eslint-disable-line
752
+        if (selector) {
753
+          if ($(next).is(selector)) { nextEls.push(next); }
754
+        } else { nextEls.push(next); }
755
+        el = next;
756
+      }
757
+      return new Dom7(nextEls);
758
+    }
759
+    function prev(selector) {
760
+      if (this.length > 0) {
761
+        var el = this[0];
762
+        if (selector) {
763
+          if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
764
+            return new Dom7([el.previousElementSibling]);
765
+          }
766
+          return new Dom7([]);
767
+        }
768
+
769
+        if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }
770
+        return new Dom7([]);
771
+      }
772
+      return new Dom7([]);
773
+    }
774
+    function prevAll(selector) {
775
+      var prevEls = [];
776
+      var el = this[0];
777
+      if (!el) { return new Dom7([]); }
778
+      while (el.previousElementSibling) {
779
+        var prev = el.previousElementSibling; // eslint-disable-line
780
+        if (selector) {
781
+          if ($(prev).is(selector)) { prevEls.push(prev); }
782
+        } else { prevEls.push(prev); }
783
+        el = prev;
784
+      }
785
+      return new Dom7(prevEls);
786
+    }
787
+    function parent(selector) {
788
+      var parents = []; // eslint-disable-line
789
+      for (var i = 0; i < this.length; i += 1) {
790
+        if (this[i].parentNode !== null) {
791
+          if (selector) {
792
+            if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }
793
+          } else {
794
+            parents.push(this[i].parentNode);
795
+          }
796
+        }
797
+      }
798
+      return $(unique(parents));
799
+    }
800
+    function parents(selector) {
801
+      var parents = []; // eslint-disable-line
802
+      for (var i = 0; i < this.length; i += 1) {
803
+        var parent = this[i].parentNode; // eslint-disable-line
804
+        while (parent) {
805
+          if (selector) {
806
+            if ($(parent).is(selector)) { parents.push(parent); }
807
+          } else {
808
+            parents.push(parent);
809
+          }
810
+          parent = parent.parentNode;
811
+        }
812
+      }
813
+      return $(unique(parents));
814
+    }
815
+    function closest(selector) {
816
+      var closest = this; // eslint-disable-line
817
+      if (typeof selector === 'undefined') {
818
+        return new Dom7([]);
819
+      }
820
+      if (!closest.is(selector)) {
821
+        closest = closest.parents(selector).eq(0);
822
+      }
823
+      return closest;
824
+    }
825
+    function find(selector) {
826
+      var foundElements = [];
827
+      for (var i = 0; i < this.length; i += 1) {
828
+        var found = this[i].querySelectorAll(selector);
829
+        for (var j = 0; j < found.length; j += 1) {
830
+          foundElements.push(found[j]);
831
+        }
832
+      }
833
+      return new Dom7(foundElements);
834
+    }
835
+    function children(selector) {
836
+      var children = []; // eslint-disable-line
837
+      for (var i = 0; i < this.length; i += 1) {
838
+        var childNodes = this[i].childNodes;
839
+
840
+        for (var j = 0; j < childNodes.length; j += 1) {
841
+          if (!selector) {
842
+            if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }
843
+          } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
844
+            children.push(childNodes[j]);
845
+          }
846
+        }
847
+      }
848
+      return new Dom7(unique(children));
849
+    }
850
+    function remove() {
851
+      for (var i = 0; i < this.length; i += 1) {
852
+        if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }
853
+      }
854
+      return this;
855
+    }
856
+    function add() {
857
+      var args = [], len = arguments.length;
858
+      while ( len-- ) args[ len ] = arguments[ len ];
859
+
860
+      var dom = this;
861
+      var i;
862
+      var j;
863
+      for (i = 0; i < args.length; i += 1) {
864
+        var toAdd = $(args[i]);
865
+        for (j = 0; j < toAdd.length; j += 1) {
866
+          dom[dom.length] = toAdd[j];
867
+          dom.length += 1;
868
+        }
869
+      }
870
+      return dom;
871
+    }
872
+
873
+    var Methods = {
874
+      addClass: addClass,
875
+      removeClass: removeClass,
876
+      hasClass: hasClass,
877
+      toggleClass: toggleClass,
878
+      attr: attr,
879
+      removeAttr: removeAttr,
880
+      data: data,
881
+      transform: transform,
882
+      transition: transition,
883
+      on: on,
884
+      off: off,
885
+      trigger: trigger,
886
+      transitionEnd: transitionEnd,
887
+      outerWidth: outerWidth,
888
+      outerHeight: outerHeight,
889
+      offset: offset,
890
+      css: css,
891
+      each: each,
892
+      html: html,
893
+      text: text,
894
+      is: is,
895
+      index: index,
896
+      eq: eq,
897
+      append: append,
898
+      prepend: prepend,
899
+      next: next,
900
+      nextAll: nextAll,
901
+      prev: prev,
902
+      prevAll: prevAll,
903
+      parent: parent,
904
+      parents: parents,
905
+      closest: closest,
906
+      find: find,
907
+      children: children,
908
+      filter: filter,
909
+      remove: remove,
910
+      add: add,
911
+      styles: styles,
912
+    };
913
+
914
+    Object.keys(Methods).forEach(function (methodName) {
915
+      $.fn[methodName] = $.fn[methodName] || Methods[methodName];
916
+    });
917
+
918
+    var Utils = {
919
+      deleteProps: function deleteProps(obj) {
920
+        var object = obj;
921
+        Object.keys(object).forEach(function (key) {
922
+          try {
923
+            object[key] = null;
924
+          } catch (e) {
925
+            // no getter for object
926
+          }
927
+          try {
928
+            delete object[key];
929
+          } catch (e) {
930
+            // something got wrong
931
+          }
932
+        });
933
+      },
934
+      nextTick: function nextTick(callback, delay) {
935
+        if ( delay === void 0 ) delay = 0;
936
+
937
+        return setTimeout(callback, delay);
938
+      },
939
+      now: function now() {
940
+        return Date.now();
941
+      },
942
+      getTranslate: function getTranslate(el, axis) {
943
+        if ( axis === void 0 ) axis = 'x';
944
+
945
+        var matrix;
946
+        var curTransform;
947
+        var transformMatrix;
948
+
949
+        var curStyle = win.getComputedStyle(el, null);
950
+
951
+        if (win.WebKitCSSMatrix) {
952
+          curTransform = curStyle.transform || curStyle.webkitTransform;
953
+          if (curTransform.split(',').length > 6) {
954
+            curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');
955
+          }
956
+          // Some old versions of Webkit choke when 'none' is passed; pass
957
+          // empty string instead in this case
958
+          transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
959
+        } else {
960
+          transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
961
+          matrix = transformMatrix.toString().split(',');
962
+        }
963
+
964
+        if (axis === 'x') {
965
+          // Latest Chrome and webkits Fix
966
+          if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }
967
+          // Crazy IE10 Matrix
968
+          else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }
969
+          // Normal Browsers
970
+          else { curTransform = parseFloat(matrix[4]); }
971
+        }
972
+        if (axis === 'y') {
973
+          // Latest Chrome and webkits Fix
974
+          if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }
975
+          // Crazy IE10 Matrix
976
+          else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }
977
+          // Normal Browsers
978
+          else { curTransform = parseFloat(matrix[5]); }
979
+        }
980
+        return curTransform || 0;
981
+      },
982
+      parseUrlQuery: function parseUrlQuery(url) {
983
+        var query = {};
984
+        var urlToParse = url || win.location.href;
985
+        var i;
986
+        var params;
987
+        var param;
988
+        var length;
989
+        if (typeof urlToParse === 'string' && urlToParse.length) {
990
+          urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
991
+          params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });
992
+          length = params.length;
993
+
994
+          for (i = 0; i < length; i += 1) {
995
+            param = params[i].replace(/#\S+/g, '').split('=');
996
+            query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
997
+          }
998
+        }
999
+        return query;
1000
+      },
1001
+      isObject: function isObject(o) {
1002
+        return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
1003
+      },
1004
+      extend: function extend() {
1005
+        var args = [], len$1 = arguments.length;
1006
+        while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];
1007
+
1008
+        var to = Object(args[0]);
1009
+        for (var i = 1; i < args.length; i += 1) {
1010
+          var nextSource = args[i];
1011
+          if (nextSource !== undefined && nextSource !== null) {
1012
+            var keysArray = Object.keys(Object(nextSource));
1013
+            for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
1014
+              var nextKey = keysArray[nextIndex];
1015
+              var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
1016
+              if (desc !== undefined && desc.enumerable) {
1017
+                if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
1018
+                  Utils.extend(to[nextKey], nextSource[nextKey]);
1019
+                } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
1020
+                  to[nextKey] = {};
1021
+                  Utils.extend(to[nextKey], nextSource[nextKey]);
1022
+                } else {
1023
+                  to[nextKey] = nextSource[nextKey];
1024
+                }
1025
+              }
1026
+            }
1027
+          }
1028
+        }
1029
+        return to;
1030
+      },
1031
+    };
1032
+
1033
+    var Support = (function Support() {
1034
+      return {
1035
+        touch: !!(('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch)),
1036
+
1037
+        pointerEvents: !!win.PointerEvent && ('maxTouchPoints' in win.navigator) && win.navigator.maxTouchPoints >= 0,
1038
+
1039
+        observer: (function checkObserver() {
1040
+          return ('MutationObserver' in win || 'WebkitMutationObserver' in win);
1041
+        }()),
1042
+
1043
+        passiveListener: (function checkPassiveListener() {
1044
+          var supportsPassive = false;
1045
+          try {
1046
+            var opts = Object.defineProperty({}, 'passive', {
1047
+              // eslint-disable-next-line
1048
+              get: function get() {
1049
+                supportsPassive = true;
1050
+              },
1051
+            });
1052
+            win.addEventListener('testPassiveListener', null, opts);
1053
+          } catch (e) {
1054
+            // No support
1055
+          }
1056
+          return supportsPassive;
1057
+        }()),
1058
+
1059
+        gestures: (function checkGestures() {
1060
+          return 'ongesturestart' in win;
1061
+        }()),
1062
+      };
1063
+    }());
1064
+
1065
+    var SwiperClass = function SwiperClass(params) {
1066
+      if ( params === void 0 ) params = {};
1067
+
1068
+      var self = this;
1069
+      self.params = params;
1070
+
1071
+      // Events
1072
+      self.eventsListeners = {};
1073
+
1074
+      if (self.params && self.params.on) {
1075
+        Object.keys(self.params.on).forEach(function (eventName) {
1076
+          self.on(eventName, self.params.on[eventName]);
1077
+        });
1078
+      }
1079
+    };
1080
+
1081
+    var staticAccessors = { components: { configurable: true } };
1082
+
1083
+    SwiperClass.prototype.on = function on (events, handler, priority) {
1084
+      var self = this;
1085
+      if (typeof handler !== 'function') { return self; }
1086
+      var method = priority ? 'unshift' : 'push';
1087
+      events.split(' ').forEach(function (event) {
1088
+        if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }
1089
+        self.eventsListeners[event][method](handler);
1090
+      });
1091
+      return self;
1092
+    };
1093
+
1094
+    SwiperClass.prototype.once = function once (events, handler, priority) {
1095
+      var self = this;
1096
+      if (typeof handler !== 'function') { return self; }
1097
+      function onceHandler() {
1098
+          var args = [], len = arguments.length;
1099
+          while ( len-- ) args[ len ] = arguments[ len ];
1100
+
1101
+        self.off(events, onceHandler);
1102
+        if (onceHandler.f7proxy) {
1103
+          delete onceHandler.f7proxy;
1104
+        }
1105
+        handler.apply(self, args);
1106
+      }
1107
+      onceHandler.f7proxy = handler;
1108
+      return self.on(events, onceHandler, priority);
1109
+    };
1110
+
1111
+    SwiperClass.prototype.off = function off (events, handler) {
1112
+      var self = this;
1113
+      if (!self.eventsListeners) { return self; }
1114
+      events.split(' ').forEach(function (event) {
1115
+        if (typeof handler === 'undefined') {
1116
+          self.eventsListeners[event] = [];
1117
+        } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
1118
+          self.eventsListeners[event].forEach(function (eventHandler, index) {
1119
+            if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
1120
+              self.eventsListeners[event].splice(index, 1);
1121
+            }
1122
+          });
1123
+        }
1124
+      });
1125
+      return self;
1126
+    };
1127
+
1128
+    SwiperClass.prototype.emit = function emit () {
1129
+        var args = [], len = arguments.length;
1130
+        while ( len-- ) args[ len ] = arguments[ len ];
1131
+
1132
+      var self = this;
1133
+      if (!self.eventsListeners) { return self; }
1134
+      var events;
1135
+      var data;
1136
+      var context;
1137
+      if (typeof args[0] === 'string' || Array.isArray(args[0])) {
1138
+        events = args[0];
1139
+        data = args.slice(1, args.length);
1140
+        context = self;
1141
+      } else {
1142
+        events = args[0].events;
1143
+        data = args[0].data;
1144
+        context = args[0].context || self;
1145
+      }
1146
+      var eventsArray = Array.isArray(events) ? events : events.split(' ');
1147
+      eventsArray.forEach(function (event) {
1148
+        if (self.eventsListeners && self.eventsListeners[event]) {
1149
+          var handlers = [];
1150
+          self.eventsListeners[event].forEach(function (eventHandler) {
1151
+            handlers.push(eventHandler);
1152
+          });
1153
+          handlers.forEach(function (eventHandler) {
1154
+            eventHandler.apply(context, data);
1155
+          });
1156
+        }
1157
+      });
1158
+      return self;
1159
+    };
1160
+
1161
+    SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {
1162
+      var instance = this;
1163
+      if (!instance.modules) { return; }
1164
+      Object.keys(instance.modules).forEach(function (moduleName) {
1165
+        var module = instance.modules[moduleName];
1166
+        // Extend params
1167
+        if (module.params) {
1168
+          Utils.extend(instanceParams, module.params);
1169
+        }
1170
+      });
1171
+    };
1172
+
1173
+    SwiperClass.prototype.useModules = function useModules (modulesParams) {
1174
+        if ( modulesParams === void 0 ) modulesParams = {};
1175
+
1176
+      var instance = this;
1177
+      if (!instance.modules) { return; }
1178
+      Object.keys(instance.modules).forEach(function (moduleName) {
1179
+        var module = instance.modules[moduleName];
1180
+        var moduleParams = modulesParams[moduleName] || {};
1181
+        // Extend instance methods and props
1182
+        if (module.instance) {
1183
+          Object.keys(module.instance).forEach(function (modulePropName) {
1184
+            var moduleProp = module.instance[modulePropName];
1185
+            if (typeof moduleProp === 'function') {
1186
+              instance[modulePropName] = moduleProp.bind(instance);
1187
+            } else {
1188
+              instance[modulePropName] = moduleProp;
1189
+            }
1190
+          });
1191
+        }
1192
+        // Add event listeners
1193
+        if (module.on && instance.on) {
1194
+          Object.keys(module.on).forEach(function (moduleEventName) {
1195
+            instance.on(moduleEventName, module.on[moduleEventName]);
1196
+          });
1197
+        }
1198
+
1199
+        // Module create callback
1200
+        if (module.create) {
1201
+          module.create.bind(instance)(moduleParams);
1202
+        }
1203
+      });
1204
+    };
1205
+
1206
+    staticAccessors.components.set = function (components) {
1207
+      var Class = this;
1208
+      if (!Class.use) { return; }
1209
+      Class.use(components);
1210
+    };
1211
+
1212
+    SwiperClass.installModule = function installModule (module) {
1213
+        var params = [], len = arguments.length - 1;
1214
+        while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
1215
+
1216
+      var Class = this;
1217
+      if (!Class.prototype.modules) { Class.prototype.modules = {}; }
1218
+      var name = module.name || (((Object.keys(Class.prototype.modules).length) + "_" + (Utils.now())));
1219
+      Class.prototype.modules[name] = module;
1220
+      // Prototype
1221
+      if (module.proto) {
1222
+        Object.keys(module.proto).forEach(function (key) {
1223
+          Class.prototype[key] = module.proto[key];
1224
+        });
1225
+      }
1226
+      // Class
1227
+      if (module.static) {
1228
+        Object.keys(module.static).forEach(function (key) {
1229
+          Class[key] = module.static[key];
1230
+        });
1231
+      }
1232
+      // Callback
1233
+      if (module.install) {
1234
+        module.install.apply(Class, params);
1235
+      }
1236
+      return Class;
1237
+    };
1238
+
1239
+    SwiperClass.use = function use (module) {
1240
+        var params = [], len = arguments.length - 1;
1241
+        while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
1242
+
1243
+      var Class = this;
1244
+      if (Array.isArray(module)) {
1245
+        module.forEach(function (m) { return Class.installModule(m); });
1246
+        return Class;
1247
+      }
1248
+      return Class.installModule.apply(Class, [ module ].concat( params ));
1249
+    };
1250
+
1251
+    Object.defineProperties( SwiperClass, staticAccessors );
1252
+
1253
+    function updateSize () {
1254
+      var swiper = this;
1255
+      var width;
1256
+      var height;
1257
+      var $el = swiper.$el;
1258
+      if (typeof swiper.params.width !== 'undefined') {
1259
+        width = swiper.params.width;
1260
+      } else {
1261
+        width = $el[0].clientWidth;
1262
+      }
1263
+      if (typeof swiper.params.height !== 'undefined') {
1264
+        height = swiper.params.height;
1265
+      } else {
1266
+        height = $el[0].clientHeight;
1267
+      }
1268
+      if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
1269
+        return;
1270
+      }
1271
+
1272
+      // Subtract paddings
1273
+      width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
1274
+      height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
1275
+
1276
+      Utils.extend(swiper, {
1277
+        width: width,
1278
+        height: height,
1279
+        size: swiper.isHorizontal() ? width : height,
1280
+      });
1281
+    }
1282
+
1283
+    function updateSlides () {
1284
+      var swiper = this;
1285
+      var params = swiper.params;
1286
+
1287
+      var $wrapperEl = swiper.$wrapperEl;
1288
+      var swiperSize = swiper.size;
1289
+      var rtl = swiper.rtlTranslate;
1290
+      var wrongRTL = swiper.wrongRTL;
1291
+      var isVirtual = swiper.virtual && params.virtual.enabled;
1292
+      var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
1293
+      var slides = $wrapperEl.children(("." + (swiper.params.slideClass)));
1294
+      var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
1295
+      var snapGrid = [];
1296
+      var slidesGrid = [];
1297
+      var slidesSizesGrid = [];
1298
+
1299
+      function slidesForMargin(slideIndex) {
1300
+        if (!params.cssMode) { return true; }
1301
+        if (slideIndex === slides.length - 1) {
1302
+          return false;
1303
+        }
1304
+        return true;
1305
+      }
1306
+
1307
+      var offsetBefore = params.slidesOffsetBefore;
1308
+      if (typeof offsetBefore === 'function') {
1309
+        offsetBefore = params.slidesOffsetBefore.call(swiper);
1310
+      }
1311
+
1312
+      var offsetAfter = params.slidesOffsetAfter;
1313
+      if (typeof offsetAfter === 'function') {
1314
+        offsetAfter = params.slidesOffsetAfter.call(swiper);
1315
+      }
1316
+
1317
+      var previousSnapGridLength = swiper.snapGrid.length;
1318
+      var previousSlidesGridLength = swiper.snapGrid.length;
1319
+
1320
+      var spaceBetween = params.spaceBetween;
1321
+      var slidePosition = -offsetBefore;
1322
+      var prevSlideSize = 0;
1323
+      var index = 0;
1324
+      if (typeof swiperSize === 'undefined') {
1325
+        return;
1326
+      }
1327
+      if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1328
+        spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
1329
+      }
1330
+
1331
+      swiper.virtualSize = -spaceBetween;
1332
+
1333
+      // reset margins
1334
+      if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }
1335
+      else { slides.css({ marginRight: '', marginBottom: '' }); }
1336
+
1337
+      var slidesNumberEvenToRows;
1338
+      if (params.slidesPerColumn > 1) {
1339
+        if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
1340
+          slidesNumberEvenToRows = slidesLength;
1341
+        } else {
1342
+          slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
1343
+        }
1344
+        if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
1345
+          slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
1346
+        }
1347
+      }
1348
+
1349
+      // Calc slides
1350
+      var slideSize;
1351
+      var slidesPerColumn = params.slidesPerColumn;
1352
+      var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
1353
+      var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
1354
+      for (var i = 0; i < slidesLength; i += 1) {
1355
+        slideSize = 0;
1356
+        var slide = slides.eq(i);
1357
+        if (params.slidesPerColumn > 1) {
1358
+          // Set slides order
1359
+          var newSlideOrderIndex = (void 0);
1360
+          var column = (void 0);
1361
+          var row = (void 0);
1362
+          if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
1363
+            var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
1364
+            var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
1365
+            var columnsInGroup = groupIndex === 0
1366
+              ? params.slidesPerGroup
1367
+              : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
1368
+            row = Math.floor(slideIndexInGroup / columnsInGroup);
1369
+            column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;
1370
+
1371
+            newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
1372
+            slide
1373
+              .css({
1374
+                '-webkit-box-ordinal-group': newSlideOrderIndex,
1375
+                '-moz-box-ordinal-group': newSlideOrderIndex,
1376
+                '-ms-flex-order': newSlideOrderIndex,
1377
+                '-webkit-order': newSlideOrderIndex,
1378
+                order: newSlideOrderIndex,
1379
+              });
1380
+          } else if (params.slidesPerColumnFill === 'column') {
1381
+            column = Math.floor(i / slidesPerColumn);
1382
+            row = i - (column * slidesPerColumn);
1383
+            if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
1384
+              row += 1;
1385
+              if (row >= slidesPerColumn) {
1386
+                row = 0;
1387
+                column += 1;
1388
+              }
1389
+            }
1390
+          } else {
1391
+            row = Math.floor(i / slidesPerRow);
1392
+            column = i - (row * slidesPerRow);
1393
+          }
1394
+          slide.css(
1395
+            ("margin-" + (swiper.isHorizontal() ? 'top' : 'left')),
1396
+            (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + "px"))
1397
+          );
1398
+        }
1399
+        if (slide.css('display') === 'none') { continue; } // eslint-disable-line
1400
+
1401
+        if (params.slidesPerView === 'auto') {
1402
+          var slideStyles = win.getComputedStyle(slide[0], null);
1403
+          var currentTransform = slide[0].style.transform;
1404
+          var currentWebKitTransform = slide[0].style.webkitTransform;
1405
+          if (currentTransform) {
1406
+            slide[0].style.transform = 'none';
1407
+          }
1408
+          if (currentWebKitTransform) {
1409
+            slide[0].style.webkitTransform = 'none';
1410
+          }
1411
+          if (params.roundLengths) {
1412
+            slideSize = swiper.isHorizontal()
1413
+              ? slide.outerWidth(true)
1414
+              : slide.outerHeight(true);
1415
+          } else {
1416
+            // eslint-disable-next-line
1417
+            if (swiper.isHorizontal()) {
1418
+              var width = parseFloat(slideStyles.getPropertyValue('width'));
1419
+              var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
1420
+              var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
1421
+              var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
1422
+              var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
1423
+              var boxSizing = slideStyles.getPropertyValue('box-sizing');
1424
+              if (boxSizing && boxSizing === 'border-box') {
1425
+                slideSize = width + marginLeft + marginRight;
1426
+              } else {
1427
+                slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
1428
+              }
1429
+            } else {
1430
+              var height = parseFloat(slideStyles.getPropertyValue('height'));
1431
+              var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
1432
+              var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
1433
+              var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
1434
+              var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
1435
+              var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');
1436
+              if (boxSizing$1 && boxSizing$1 === 'border-box') {
1437
+                slideSize = height + marginTop + marginBottom;
1438
+              } else {
1439
+                slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
1440
+              }
1441
+            }
1442
+          }
1443
+          if (currentTransform) {
1444
+            slide[0].style.transform = currentTransform;
1445
+          }
1446
+          if (currentWebKitTransform) {
1447
+            slide[0].style.webkitTransform = currentWebKitTransform;
1448
+          }
1449
+          if (params.roundLengths) { slideSize = Math.floor(slideSize); }
1450
+        } else {
1451
+          slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
1452
+          if (params.roundLengths) { slideSize = Math.floor(slideSize); }
1453
+
1454
+          if (slides[i]) {
1455
+            if (swiper.isHorizontal()) {
1456
+              slides[i].style.width = slideSize + "px";
1457
+            } else {
1458
+              slides[i].style.height = slideSize + "px";
1459
+            }
1460
+          }
1461
+        }
1462
+        if (slides[i]) {
1463
+          slides[i].swiperSlideSize = slideSize;
1464
+        }
1465
+        slidesSizesGrid.push(slideSize);
1466
+
1467
+
1468
+        if (params.centeredSlides) {
1469
+          slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
1470
+          if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
1471
+          if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
1472
+          if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }
1473
+          if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
1474
+          if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
1475
+          slidesGrid.push(slidePosition);
1476
+        } else {
1477
+          if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
1478
+          if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
1479
+          slidesGrid.push(slidePosition);
1480
+          slidePosition = slidePosition + slideSize + spaceBetween;
1481
+        }
1482
+
1483
+        swiper.virtualSize += slideSize + spaceBetween;
1484
+
1485
+        prevSlideSize = slideSize;
1486
+
1487
+        index += 1;
1488
+      }
1489
+      swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
1490
+      var newSlidesGrid;
1491
+
1492
+      if (
1493
+        rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
1494
+        $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") });
1495
+      }
1496
+      if (params.setWrapperSize) {
1497
+        if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
1498
+        else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
1499
+      }
1500
+
1501
+      if (params.slidesPerColumn > 1) {
1502
+        swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
1503
+        swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
1504
+        if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
1505
+        else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
1506
+        if (params.centeredSlides) {
1507
+          newSlidesGrid = [];
1508
+          for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {
1509
+            var slidesGridItem = snapGrid[i$1];
1510
+            if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }
1511
+            if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }
1512
+          }
1513
+          snapGrid = newSlidesGrid;
1514
+        }
1515
+      }
1516
+
1517
+      // Remove last grid elements depending on width
1518
+      if (!params.centeredSlides) {
1519
+        newSlidesGrid = [];
1520
+        for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {
1521
+          var slidesGridItem$1 = snapGrid[i$2];
1522
+          if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }
1523
+          if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {
1524
+            newSlidesGrid.push(slidesGridItem$1);
1525
+          }
1526
+        }
1527
+        snapGrid = newSlidesGrid;
1528
+        if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
1529
+          snapGrid.push(swiper.virtualSize - swiperSize);
1530
+        }
1531
+      }
1532
+      if (snapGrid.length === 0) { snapGrid = [0]; }
1533
+
1534
+      if (params.spaceBetween !== 0) {
1535
+        if (swiper.isHorizontal()) {
1536
+          if (rtl) { slides.filter(slidesForMargin).css({ marginLeft: (spaceBetween + "px") }); }
1537
+          else { slides.filter(slidesForMargin).css({ marginRight: (spaceBetween + "px") }); }
1538
+        } else { slides.filter(slidesForMargin).css({ marginBottom: (spaceBetween + "px") }); }
1539
+      }
1540
+
1541
+      if (params.centeredSlides && params.centeredSlidesBounds) {
1542
+        var allSlidesSize = 0;
1543
+        slidesSizesGrid.forEach(function (slideSizeValue) {
1544
+          allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
1545
+        });
1546
+        allSlidesSize -= params.spaceBetween;
1547
+        var maxSnap = allSlidesSize - swiperSize;
1548
+        snapGrid = snapGrid.map(function (snap) {
1549
+          if (snap < 0) { return -offsetBefore; }
1550
+          if (snap > maxSnap) { return maxSnap + offsetAfter; }
1551
+          return snap;
1552
+        });
1553
+      }
1554
+
1555
+      if (params.centerInsufficientSlides) {
1556
+        var allSlidesSize$1 = 0;
1557
+        slidesSizesGrid.forEach(function (slideSizeValue) {
1558
+          allSlidesSize$1 += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
1559
+        });
1560
+        allSlidesSize$1 -= params.spaceBetween;
1561
+        if (allSlidesSize$1 < swiperSize) {
1562
+          var allSlidesOffset = (swiperSize - allSlidesSize$1) / 2;
1563
+          snapGrid.forEach(function (snap, snapIndex) {
1564
+            snapGrid[snapIndex] = snap - allSlidesOffset;
1565
+          });
1566
+          slidesGrid.forEach(function (snap, snapIndex) {
1567
+            slidesGrid[snapIndex] = snap + allSlidesOffset;
1568
+          });
1569
+        }
1570
+      }
1571
+
1572
+      Utils.extend(swiper, {
1573
+        slides: slides,
1574
+        snapGrid: snapGrid,
1575
+        slidesGrid: slidesGrid,
1576
+        slidesSizesGrid: slidesSizesGrid,
1577
+      });
1578
+
1579
+      if (slidesLength !== previousSlidesLength) {
1580
+        swiper.emit('slidesLengthChange');
1581
+      }
1582
+      if (snapGrid.length !== previousSnapGridLength) {
1583
+        if (swiper.params.watchOverflow) { swiper.checkOverflow(); }
1584
+        swiper.emit('snapGridLengthChange');
1585
+      }
1586
+      if (slidesGrid.length !== previousSlidesGridLength) {
1587
+        swiper.emit('slidesGridLengthChange');
1588
+      }
1589
+
1590
+      if (params.watchSlidesProgress || params.watchSlidesVisibility) {
1591
+        swiper.updateSlidesOffset();
1592
+      }
1593
+    }
1594
+
1595
+    function updateAutoHeight (speed) {
1596
+      var swiper = this;
1597
+      var activeSlides = [];
1598
+      var newHeight = 0;
1599
+      var i;
1600
+      if (typeof speed === 'number') {
1601
+        swiper.setTransition(speed);
1602
+      } else if (speed === true) {
1603
+        swiper.setTransition(swiper.params.speed);
1604
+      }
1605
+      // Find slides currently in view
1606
+      if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
1607
+        if (swiper.params.centeredSlides) {
1608
+          swiper.visibleSlides.each(function (index, slide) {
1609
+            activeSlides.push(slide);
1610
+          });
1611
+        } else {
1612
+          for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
1613
+            var index = swiper.activeIndex + i;
1614
+            if (index > swiper.slides.length) { break; }
1615
+            activeSlides.push(swiper.slides.eq(index)[0]);
1616
+          }
1617
+        }
1618
+      } else {
1619
+        activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
1620
+      }
1621
+
1622
+      // Find new height from highest slide in view
1623
+      for (i = 0; i < activeSlides.length; i += 1) {
1624
+        if (typeof activeSlides[i] !== 'undefined') {
1625
+          var height = activeSlides[i].offsetHeight;
1626
+          newHeight = height > newHeight ? height : newHeight;
1627
+        }
1628
+      }
1629
+
1630
+      // Update Height
1631
+      if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + "px")); }
1632
+    }
1633
+
1634
+    function updateSlidesOffset () {
1635
+      var swiper = this;
1636
+      var slides = swiper.slides;
1637
+      for (var i = 0; i < slides.length; i += 1) {
1638
+        slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
1639
+      }
1640
+    }
1641
+
1642
+    function updateSlidesProgress (translate) {
1643
+      if ( translate === void 0 ) translate = (this && this.translate) || 0;
1644
+
1645
+      var swiper = this;
1646
+      var params = swiper.params;
1647
+
1648
+      var slides = swiper.slides;
1649
+      var rtl = swiper.rtlTranslate;
1650
+
1651
+      if (slides.length === 0) { return; }
1652
+      if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }
1653
+
1654
+      var offsetCenter = -translate;
1655
+      if (rtl) { offsetCenter = translate; }
1656
+
1657
+      // Visible Slides
1658
+      slides.removeClass(params.slideVisibleClass);
1659
+
1660
+      swiper.visibleSlidesIndexes = [];
1661
+      swiper.visibleSlides = [];
1662
+
1663
+      for (var i = 0; i < slides.length; i += 1) {
1664
+        var slide = slides[i];
1665
+        var slideProgress = (
1666
+          (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
1667
+        ) / (slide.swiperSlideSize + params.spaceBetween);
1668
+        if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
1669
+          var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
1670
+          var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
1671
+          var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
1672
+                    || (slideAfter > 1 && slideAfter <= swiper.size)
1673
+                    || (slideBefore <= 0 && slideAfter >= swiper.size);
1674
+          if (isVisible) {
1675
+            swiper.visibleSlides.push(slide);
1676
+            swiper.visibleSlidesIndexes.push(i);
1677
+            slides.eq(i).addClass(params.slideVisibleClass);
1678
+          }
1679
+        }
1680
+        slide.progress = rtl ? -slideProgress : slideProgress;
1681
+      }
1682
+      swiper.visibleSlides = $(swiper.visibleSlides);
1683
+    }
1684
+
1685
+    function updateProgress (translate) {
1686
+      var swiper = this;
1687
+      if (typeof translate === 'undefined') {
1688
+        var multiplier = swiper.rtlTranslate ? -1 : 1;
1689
+        // eslint-disable-next-line
1690
+        translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
1691
+      }
1692
+      var params = swiper.params;
1693
+      var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1694
+      var progress = swiper.progress;
1695
+      var isBeginning = swiper.isBeginning;
1696
+      var isEnd = swiper.isEnd;
1697
+      var wasBeginning = isBeginning;
1698
+      var wasEnd = isEnd;
1699
+      if (translatesDiff === 0) {
1700
+        progress = 0;
1701
+        isBeginning = true;
1702
+        isEnd = true;
1703
+      } else {
1704
+        progress = (translate - swiper.minTranslate()) / (translatesDiff);
1705
+        isBeginning = progress <= 0;
1706
+        isEnd = progress >= 1;
1707
+      }
1708
+      Utils.extend(swiper, {
1709
+        progress: progress,
1710
+        isBeginning: isBeginning,
1711
+        isEnd: isEnd,
1712
+      });
1713
+
1714
+      if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) { swiper.updateSlidesProgress(translate); }
1715
+
1716
+      if (isBeginning && !wasBeginning) {
1717
+        swiper.emit('reachBeginning toEdge');
1718
+      }
1719
+      if (isEnd && !wasEnd) {
1720
+        swiper.emit('reachEnd toEdge');
1721
+      }
1722
+      if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
1723
+        swiper.emit('fromEdge');
1724
+      }
1725
+
1726
+      swiper.emit('progress', progress);
1727
+    }
1728
+
1729
+    function updateSlidesClasses () {
1730
+      var swiper = this;
1731
+
1732
+      var slides = swiper.slides;
1733
+      var params = swiper.params;
1734
+      var $wrapperEl = swiper.$wrapperEl;
1735
+      var activeIndex = swiper.activeIndex;
1736
+      var realIndex = swiper.realIndex;
1737
+      var isVirtual = swiper.virtual && params.virtual.enabled;
1738
+
1739
+      slides.removeClass(((params.slideActiveClass) + " " + (params.slideNextClass) + " " + (params.slidePrevClass) + " " + (params.slideDuplicateActiveClass) + " " + (params.slideDuplicateNextClass) + " " + (params.slideDuplicatePrevClass)));
1740
+
1741
+      var activeSlide;
1742
+      if (isVirtual) {
1743
+        activeSlide = swiper.$wrapperEl.find(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + activeIndex + "\"]"));
1744
+      } else {
1745
+        activeSlide = slides.eq(activeIndex);
1746
+      }
1747
+
1748
+      // Active classes
1749
+      activeSlide.addClass(params.slideActiveClass);
1750
+
1751
+      if (params.loop) {
1752
+        // Duplicate to all looped slides
1753
+        if (activeSlide.hasClass(params.slideDuplicateClass)) {
1754
+          $wrapperEl
1755
+            .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + realIndex + "\"]"))
1756
+            .addClass(params.slideDuplicateActiveClass);
1757
+        } else {
1758
+          $wrapperEl
1759
+            .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]"))
1760
+            .addClass(params.slideDuplicateActiveClass);
1761
+        }
1762
+      }
1763
+      // Next Slide
1764
+      var nextSlide = activeSlide.nextAll(("." + (params.slideClass))).eq(0).addClass(params.slideNextClass);
1765
+      if (params.loop && nextSlide.length === 0) {
1766
+        nextSlide = slides.eq(0);
1767
+        nextSlide.addClass(params.slideNextClass);
1768
+      }
1769
+      // Prev Slide
1770
+      var prevSlide = activeSlide.prevAll(("." + (params.slideClass))).eq(0).addClass(params.slidePrevClass);
1771
+      if (params.loop && prevSlide.length === 0) {
1772
+        prevSlide = slides.eq(-1);
1773
+        prevSlide.addClass(params.slidePrevClass);
1774
+      }
1775
+      if (params.loop) {
1776
+        // Duplicate to all looped slides
1777
+        if (nextSlide.hasClass(params.slideDuplicateClass)) {
1778
+          $wrapperEl
1779
+            .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
1780
+            .addClass(params.slideDuplicateNextClass);
1781
+        } else {
1782
+          $wrapperEl
1783
+            .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
1784
+            .addClass(params.slideDuplicateNextClass);
1785
+        }
1786
+        if (prevSlide.hasClass(params.slideDuplicateClass)) {
1787
+          $wrapperEl
1788
+            .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
1789
+            .addClass(params.slideDuplicatePrevClass);
1790
+        } else {
1791
+          $wrapperEl
1792
+            .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
1793
+            .addClass(params.slideDuplicatePrevClass);
1794
+        }
1795
+      }
1796
+    }
1797
+
1798
+    function updateActiveIndex (newActiveIndex) {
1799
+      var swiper = this;
1800
+      var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1801
+      var slidesGrid = swiper.slidesGrid;
1802
+      var snapGrid = swiper.snapGrid;
1803
+      var params = swiper.params;
1804
+      var previousIndex = swiper.activeIndex;
1805
+      var previousRealIndex = swiper.realIndex;
1806
+      var previousSnapIndex = swiper.snapIndex;
1807
+      var activeIndex = newActiveIndex;
1808
+      var snapIndex;
1809
+      if (typeof activeIndex === 'undefined') {
1810
+        for (var i = 0; i < slidesGrid.length; i += 1) {
1811
+          if (typeof slidesGrid[i + 1] !== 'undefined') {
1812
+            if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
1813
+              activeIndex = i;
1814
+            } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
1815
+              activeIndex = i + 1;
1816
+            }
1817
+          } else if (translate >= slidesGrid[i]) {
1818
+            activeIndex = i;
1819
+          }
1820
+        }
1821
+        // Normalize slideIndex
1822
+        if (params.normalizeSlideIndex) {
1823
+          if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }
1824
+        }
1825
+      }
1826
+      if (snapGrid.indexOf(translate) >= 0) {
1827
+        snapIndex = snapGrid.indexOf(translate);
1828
+      } else {
1829
+        var skip = Math.min(params.slidesPerGroupSkip, activeIndex);
1830
+        snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
1831
+      }
1832
+      if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
1833
+      if (activeIndex === previousIndex) {
1834
+        if (snapIndex !== previousSnapIndex) {
1835
+          swiper.snapIndex = snapIndex;
1836
+          swiper.emit('snapIndexChange');
1837
+        }
1838
+        return;
1839
+      }
1840
+
1841
+      // Get real index
1842
+      var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
1843
+
1844
+      Utils.extend(swiper, {
1845
+        snapIndex: snapIndex,
1846
+        realIndex: realIndex,
1847
+        previousIndex: previousIndex,
1848
+        activeIndex: activeIndex,
1849
+      });
1850
+      swiper.emit('activeIndexChange');
1851
+      swiper.emit('snapIndexChange');
1852
+      if (previousRealIndex !== realIndex) {
1853
+        swiper.emit('realIndexChange');
1854
+      }
1855
+      if (swiper.initialized || swiper.params.runCallbacksOnInit) {
1856
+        swiper.emit('slideChange');
1857
+      }
1858
+    }
1859
+
1860
+    function updateClickedSlide (e) {
1861
+      var swiper = this;
1862
+      var params = swiper.params;
1863
+      var slide = $(e.target).closest(("." + (params.slideClass)))[0];
1864
+      var slideFound = false;
1865
+      if (slide) {
1866
+        for (var i = 0; i < swiper.slides.length; i += 1) {
1867
+          if (swiper.slides[i] === slide) { slideFound = true; }
1868
+        }
1869
+      }
1870
+
1871
+      if (slide && slideFound) {
1872
+        swiper.clickedSlide = slide;
1873
+        if (swiper.virtual && swiper.params.virtual.enabled) {
1874
+          swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
1875
+        } else {
1876
+          swiper.clickedIndex = $(slide).index();
1877
+        }
1878
+      } else {
1879
+        swiper.clickedSlide = undefined;
1880
+        swiper.clickedIndex = undefined;
1881
+        return;
1882
+      }
1883
+      if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
1884
+        swiper.slideToClickedSlide();
1885
+      }
1886
+    }
1887
+
1888
+    var update = {
1889
+      updateSize: updateSize,
1890
+      updateSlides: updateSlides,
1891
+      updateAutoHeight: updateAutoHeight,
1892
+      updateSlidesOffset: updateSlidesOffset,
1893
+      updateSlidesProgress: updateSlidesProgress,
1894
+      updateProgress: updateProgress,
1895
+      updateSlidesClasses: updateSlidesClasses,
1896
+      updateActiveIndex: updateActiveIndex,
1897
+      updateClickedSlide: updateClickedSlide,
1898
+    };
1899
+
1900
+    function getTranslate (axis) {
1901
+      if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';
1902
+
1903
+      var swiper = this;
1904
+
1905
+      var params = swiper.params;
1906
+      var rtl = swiper.rtlTranslate;
1907
+      var translate = swiper.translate;
1908
+      var $wrapperEl = swiper.$wrapperEl;
1909
+
1910
+      if (params.virtualTranslate) {
1911
+        return rtl ? -translate : translate;
1912
+      }
1913
+      if (params.cssMode) {
1914
+        return translate;
1915
+      }
1916
+
1917
+      var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
1918
+      if (rtl) { currentTranslate = -currentTranslate; }
1919
+
1920
+      return currentTranslate || 0;
1921
+    }
1922
+
1923
+    function setTranslate (translate, byController) {
1924
+      var swiper = this;
1925
+      var rtl = swiper.rtlTranslate;
1926
+      var params = swiper.params;
1927
+      var $wrapperEl = swiper.$wrapperEl;
1928
+      var wrapperEl = swiper.wrapperEl;
1929
+      var progress = swiper.progress;
1930
+      var x = 0;
1931
+      var y = 0;
1932
+      var z = 0;
1933
+
1934
+      if (swiper.isHorizontal()) {
1935
+        x = rtl ? -translate : translate;
1936
+      } else {
1937
+        y = translate;
1938
+      }
1939
+
1940
+      if (params.roundLengths) {
1941
+        x = Math.floor(x);
1942
+        y = Math.floor(y);
1943
+      }
1944
+
1945
+      if (params.cssMode) {
1946
+        wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1947
+      } else if (!params.virtualTranslate) {
1948
+        $wrapperEl.transform(("translate3d(" + x + "px, " + y + "px, " + z + "px)"));
1949
+      }
1950
+      swiper.previousTranslate = swiper.translate;
1951
+      swiper.translate = swiper.isHorizontal() ? x : y;
1952
+
1953
+      // Check if we need to update progress
1954
+      var newProgress;
1955
+      var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1956
+      if (translatesDiff === 0) {
1957
+        newProgress = 0;
1958
+      } else {
1959
+        newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
1960
+      }
1961
+      if (newProgress !== progress) {
1962
+        swiper.updateProgress(translate);
1963
+      }
1964
+
1965
+      swiper.emit('setTranslate', swiper.translate, byController);
1966
+    }
1967
+
1968
+    function minTranslate () {
1969
+      return (-this.snapGrid[0]);
1970
+    }
1971
+
1972
+    function maxTranslate () {
1973
+      return (-this.snapGrid[this.snapGrid.length - 1]);
1974
+    }
1975
+
1976
+    function translateTo (translate, speed, runCallbacks, translateBounds, internal) {
1977
+      var obj;
1978
+
1979
+      if ( translate === void 0 ) translate = 0;
1980
+      if ( speed === void 0 ) speed = this.params.speed;
1981
+      if ( runCallbacks === void 0 ) runCallbacks = true;
1982
+      if ( translateBounds === void 0 ) translateBounds = true;
1983
+      var swiper = this;
1984
+
1985
+      var params = swiper.params;
1986
+      var wrapperEl = swiper.wrapperEl;
1987
+
1988
+      if (swiper.animating && params.preventInteractionOnTransition) {
1989
+        return false;
1990
+      }
1991
+
1992
+      var minTranslate = swiper.minTranslate();
1993
+      var maxTranslate = swiper.maxTranslate();
1994
+      var newTranslate;
1995
+      if (translateBounds && translate > minTranslate) { newTranslate = minTranslate; }
1996
+      else if (translateBounds && translate < maxTranslate) { newTranslate = maxTranslate; }
1997
+      else { newTranslate = translate; }
1998
+
1999
+      // Update progress
2000
+      swiper.updateProgress(newTranslate);
2001
+
2002
+      if (params.cssMode) {
2003
+        var isH = swiper.isHorizontal();
2004
+        if (speed === 0) {
2005
+          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
2006
+        } else {
2007
+          // eslint-disable-next-line
2008
+          if (wrapperEl.scrollTo) {
2009
+            wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -newTranslate, obj.behavior = 'smooth', obj ));
2010
+          } else {
2011
+            wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
2012
+          }
2013
+        }
2014
+        return true;
2015
+      }
2016
+
2017
+      if (speed === 0) {
2018
+        swiper.setTransition(0);
2019
+        swiper.setTranslate(newTranslate);
2020
+        if (runCallbacks) {
2021
+          swiper.emit('beforeTransitionStart', speed, internal);
2022
+          swiper.emit('transitionEnd');
2023
+        }
2024
+      } else {
2025
+        swiper.setTransition(speed);
2026
+        swiper.setTranslate(newTranslate);
2027
+        if (runCallbacks) {
2028
+          swiper.emit('beforeTransitionStart', speed, internal);
2029
+          swiper.emit('transitionStart');
2030
+        }
2031
+        if (!swiper.animating) {
2032
+          swiper.animating = true;
2033
+          if (!swiper.onTranslateToWrapperTransitionEnd) {
2034
+            swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
2035
+              if (!swiper || swiper.destroyed) { return; }
2036
+              if (e.target !== this) { return; }
2037
+              swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
2038
+              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
2039
+              swiper.onTranslateToWrapperTransitionEnd = null;
2040
+              delete swiper.onTranslateToWrapperTransitionEnd;
2041
+              if (runCallbacks) {
2042
+                swiper.emit('transitionEnd');
2043
+              }
2044
+            };
2045
+          }
2046
+          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
2047
+          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
2048
+        }
2049
+      }
2050
+
2051
+      return true;
2052
+    }
2053
+
2054
+    var translate = {
2055
+      getTranslate: getTranslate,
2056
+      setTranslate: setTranslate,
2057
+      minTranslate: minTranslate,
2058
+      maxTranslate: maxTranslate,
2059
+      translateTo: translateTo,
2060
+    };
2061
+
2062
+    function setTransition (duration, byController) {
2063
+      var swiper = this;
2064
+
2065
+      if (!swiper.params.cssMode) {
2066
+        swiper.$wrapperEl.transition(duration);
2067
+      }
2068
+
2069
+      swiper.emit('setTransition', duration, byController);
2070
+    }
2071
+
2072
+    function transitionStart (runCallbacks, direction) {
2073
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2074
+
2075
+      var swiper = this;
2076
+      var activeIndex = swiper.activeIndex;
2077
+      var params = swiper.params;
2078
+      var previousIndex = swiper.previousIndex;
2079
+      if (params.cssMode) { return; }
2080
+      if (params.autoHeight) {
2081
+        swiper.updateAutoHeight();
2082
+      }
2083
+
2084
+      var dir = direction;
2085
+      if (!dir) {
2086
+        if (activeIndex > previousIndex) { dir = 'next'; }
2087
+        else if (activeIndex < previousIndex) { dir = 'prev'; }
2088
+        else { dir = 'reset'; }
2089
+      }
2090
+
2091
+      swiper.emit('transitionStart');
2092
+
2093
+      if (runCallbacks && activeIndex !== previousIndex) {
2094
+        if (dir === 'reset') {
2095
+          swiper.emit('slideResetTransitionStart');
2096
+          return;
2097
+        }
2098
+        swiper.emit('slideChangeTransitionStart');
2099
+        if (dir === 'next') {
2100
+          swiper.emit('slideNextTransitionStart');
2101
+        } else {
2102
+          swiper.emit('slidePrevTransitionStart');
2103
+        }
2104
+      }
2105
+    }
2106
+
2107
+    function transitionEnd$1 (runCallbacks, direction) {
2108
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2109
+
2110
+      var swiper = this;
2111
+      var activeIndex = swiper.activeIndex;
2112
+      var previousIndex = swiper.previousIndex;
2113
+      var params = swiper.params;
2114
+      swiper.animating = false;
2115
+      if (params.cssMode) { return; }
2116
+      swiper.setTransition(0);
2117
+
2118
+      var dir = direction;
2119
+      if (!dir) {
2120
+        if (activeIndex > previousIndex) { dir = 'next'; }
2121
+        else if (activeIndex < previousIndex) { dir = 'prev'; }
2122
+        else { dir = 'reset'; }
2123
+      }
2124
+
2125
+      swiper.emit('transitionEnd');
2126
+
2127
+      if (runCallbacks && activeIndex !== previousIndex) {
2128
+        if (dir === 'reset') {
2129
+          swiper.emit('slideResetTransitionEnd');
2130
+          return;
2131
+        }
2132
+        swiper.emit('slideChangeTransitionEnd');
2133
+        if (dir === 'next') {
2134
+          swiper.emit('slideNextTransitionEnd');
2135
+        } else {
2136
+          swiper.emit('slidePrevTransitionEnd');
2137
+        }
2138
+      }
2139
+    }
2140
+
2141
+    var transition$1 = {
2142
+      setTransition: setTransition,
2143
+      transitionStart: transitionStart,
2144
+      transitionEnd: transitionEnd$1,
2145
+    };
2146
+
2147
+    function slideTo (index, speed, runCallbacks, internal) {
2148
+      var obj;
2149
+
2150
+      if ( index === void 0 ) index = 0;
2151
+      if ( speed === void 0 ) speed = this.params.speed;
2152
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2153
+      var swiper = this;
2154
+      var slideIndex = index;
2155
+      if (slideIndex < 0) { slideIndex = 0; }
2156
+
2157
+      var params = swiper.params;
2158
+      var snapGrid = swiper.snapGrid;
2159
+      var slidesGrid = swiper.slidesGrid;
2160
+      var previousIndex = swiper.previousIndex;
2161
+      var activeIndex = swiper.activeIndex;
2162
+      var rtl = swiper.rtlTranslate;
2163
+      var wrapperEl = swiper.wrapperEl;
2164
+      if (swiper.animating && params.preventInteractionOnTransition) {
2165
+        return false;
2166
+      }
2167
+
2168
+      var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
2169
+      var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
2170
+      if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
2171
+
2172
+      if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
2173
+        swiper.emit('beforeSlideChangeStart');
2174
+      }
2175
+
2176
+      var translate = -snapGrid[snapIndex];
2177
+
2178
+      // Update progress
2179
+      swiper.updateProgress(translate);
2180
+
2181
+      // Normalize slideIndex
2182
+      if (params.normalizeSlideIndex) {
2183
+        for (var i = 0; i < slidesGrid.length; i += 1) {
2184
+          if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
2185
+            slideIndex = i;
2186
+          }
2187
+        }
2188
+      }
2189
+      // Directions locks
2190
+      if (swiper.initialized && slideIndex !== activeIndex) {
2191
+        if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
2192
+          return false;
2193
+        }
2194
+        if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
2195
+          if ((activeIndex || 0) !== slideIndex) { return false; }
2196
+        }
2197
+      }
2198
+
2199
+      var direction;
2200
+      if (slideIndex > activeIndex) { direction = 'next'; }
2201
+      else if (slideIndex < activeIndex) { direction = 'prev'; }
2202
+      else { direction = 'reset'; }
2203
+
2204
+
2205
+      // Update Index
2206
+      if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
2207
+        swiper.updateActiveIndex(slideIndex);
2208
+        // Update Height
2209
+        if (params.autoHeight) {
2210
+          swiper.updateAutoHeight();
2211
+        }
2212
+        swiper.updateSlidesClasses();
2213
+        if (params.effect !== 'slide') {
2214
+          swiper.setTranslate(translate);
2215
+        }
2216
+        if (direction !== 'reset') {
2217
+          swiper.transitionStart(runCallbacks, direction);
2218
+          swiper.transitionEnd(runCallbacks, direction);
2219
+        }
2220
+        return false;
2221
+      }
2222
+      if (params.cssMode) {
2223
+        var isH = swiper.isHorizontal();
2224
+        var t = -translate;
2225
+        if (rtl) {
2226
+          t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
2227
+        }
2228
+        if (speed === 0) {
2229
+          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2230
+        } else {
2231
+          // eslint-disable-next-line
2232
+          if (wrapperEl.scrollTo) {
2233
+            wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = t, obj.behavior = 'smooth', obj ));
2234
+          } else {
2235
+            wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
2236
+          }
2237
+        }
2238
+        return true;
2239
+      }
2240
+
2241
+      if (speed === 0) {
2242
+        swiper.setTransition(0);
2243
+        swiper.setTranslate(translate);
2244
+        swiper.updateActiveIndex(slideIndex);
2245
+        swiper.updateSlidesClasses();
2246
+        swiper.emit('beforeTransitionStart', speed, internal);
2247
+        swiper.transitionStart(runCallbacks, direction);
2248
+        swiper.transitionEnd(runCallbacks, direction);
2249
+      } else {
2250
+        swiper.setTransition(speed);
2251
+        swiper.setTranslate(translate);
2252
+        swiper.updateActiveIndex(slideIndex);
2253
+        swiper.updateSlidesClasses();
2254
+        swiper.emit('beforeTransitionStart', speed, internal);
2255
+        swiper.transitionStart(runCallbacks, direction);
2256
+        if (!swiper.animating) {
2257
+          swiper.animating = true;
2258
+          if (!swiper.onSlideToWrapperTransitionEnd) {
2259
+            swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
2260
+              if (!swiper || swiper.destroyed) { return; }
2261
+              if (e.target !== this) { return; }
2262
+              swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2263
+              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2264
+              swiper.onSlideToWrapperTransitionEnd = null;
2265
+              delete swiper.onSlideToWrapperTransitionEnd;
2266
+              swiper.transitionEnd(runCallbacks, direction);
2267
+            };
2268
+          }
2269
+          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
2270
+          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
2271
+        }
2272
+      }
2273
+
2274
+      return true;
2275
+    }
2276
+
2277
+    function slideToLoop (index, speed, runCallbacks, internal) {
2278
+      if ( index === void 0 ) index = 0;
2279
+      if ( speed === void 0 ) speed = this.params.speed;
2280
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2281
+
2282
+      var swiper = this;
2283
+      var newIndex = index;
2284
+      if (swiper.params.loop) {
2285
+        newIndex += swiper.loopedSlides;
2286
+      }
2287
+
2288
+      return swiper.slideTo(newIndex, speed, runCallbacks, internal);
2289
+    }
2290
+
2291
+    /* eslint no-unused-vars: "off" */
2292
+    function slideNext (speed, runCallbacks, internal) {
2293
+      if ( speed === void 0 ) speed = this.params.speed;
2294
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2295
+
2296
+      var swiper = this;
2297
+      var params = swiper.params;
2298
+      var animating = swiper.animating;
2299
+      var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
2300
+      if (params.loop) {
2301
+        if (animating) { return false; }
2302
+        swiper.loopFix();
2303
+        // eslint-disable-next-line
2304
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2305
+      }
2306
+      return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2307
+    }
2308
+
2309
+    /* eslint no-unused-vars: "off" */
2310
+    function slidePrev (speed, runCallbacks, internal) {
2311
+      if ( speed === void 0 ) speed = this.params.speed;
2312
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2313
+
2314
+      var swiper = this;
2315
+      var params = swiper.params;
2316
+      var animating = swiper.animating;
2317
+      var snapGrid = swiper.snapGrid;
2318
+      var slidesGrid = swiper.slidesGrid;
2319
+      var rtlTranslate = swiper.rtlTranslate;
2320
+
2321
+      if (params.loop) {
2322
+        if (animating) { return false; }
2323
+        swiper.loopFix();
2324
+        // eslint-disable-next-line
2325
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
2326
+      }
2327
+      var translate = rtlTranslate ? swiper.translate : -swiper.translate;
2328
+      function normalize(val) {
2329
+        if (val < 0) { return -Math.floor(Math.abs(val)); }
2330
+        return Math.floor(val);
2331
+      }
2332
+      var normalizedTranslate = normalize(translate);
2333
+      var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });
2334
+      var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });
2335
+
2336
+      var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
2337
+      var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
2338
+      if (typeof prevSnap === 'undefined' && params.cssMode) {
2339
+        snapGrid.forEach(function (snap) {
2340
+          if (!prevSnap && normalizedTranslate >= snap) { prevSnap = snap; }
2341
+        });
2342
+      }
2343
+      var prevIndex;
2344
+      if (typeof prevSnap !== 'undefined') {
2345
+        prevIndex = slidesGrid.indexOf(prevSnap);
2346
+        if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }
2347
+      }
2348
+      return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2349
+    }
2350
+
2351
+    /* eslint no-unused-vars: "off" */
2352
+    function slideReset (speed, runCallbacks, internal) {
2353
+      if ( speed === void 0 ) speed = this.params.speed;
2354
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2355
+
2356
+      var swiper = this;
2357
+      return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
2358
+    }
2359
+
2360
+    /* eslint no-unused-vars: "off" */
2361
+    function slideToClosest (speed, runCallbacks, internal, threshold) {
2362
+      if ( speed === void 0 ) speed = this.params.speed;
2363
+      if ( runCallbacks === void 0 ) runCallbacks = true;
2364
+      if ( threshold === void 0 ) threshold = 0.5;
2365
+
2366
+      var swiper = this;
2367
+      var index = swiper.activeIndex;
2368
+      var skip = Math.min(swiper.params.slidesPerGroupSkip, index);
2369
+      var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
2370
+
2371
+      var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
2372
+
2373
+      if (translate >= swiper.snapGrid[snapIndex]) {
2374
+        // The current translate is on or after the current snap index, so the choice
2375
+        // is between the current index and the one after it.
2376
+        var currentSnap = swiper.snapGrid[snapIndex];
2377
+        var nextSnap = swiper.snapGrid[snapIndex + 1];
2378
+        if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
2379
+          index += swiper.params.slidesPerGroup;
2380
+        }
2381
+      } else {
2382
+        // The current translate is before the current snap index, so the choice
2383
+        // is between the current index and the one before it.
2384
+        var prevSnap = swiper.snapGrid[snapIndex - 1];
2385
+        var currentSnap$1 = swiper.snapGrid[snapIndex];
2386
+        if ((translate - prevSnap) <= (currentSnap$1 - prevSnap) * threshold) {
2387
+          index -= swiper.params.slidesPerGroup;
2388
+        }
2389
+      }
2390
+      index = Math.max(index, 0);
2391
+      index = Math.min(index, swiper.slidesGrid.length - 1);
2392
+
2393
+      return swiper.slideTo(index, speed, runCallbacks, internal);
2394
+    }
2395
+
2396
+    function slideToClickedSlide () {
2397
+      var swiper = this;
2398
+      var params = swiper.params;
2399
+      var $wrapperEl = swiper.$wrapperEl;
2400
+
2401
+      var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
2402
+      var slideToIndex = swiper.clickedIndex;
2403
+      var realIndex;
2404
+      if (params.loop) {
2405
+        if (swiper.animating) { return; }
2406
+        realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
2407
+        if (params.centeredSlides) {
2408
+          if (
2409
+            (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
2410
+            || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
2411
+          ) {
2412
+            swiper.loopFix();
2413
+            slideToIndex = $wrapperEl
2414
+              .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
2415
+              .eq(0)
2416
+              .index();
2417
+
2418
+            Utils.nextTick(function () {
2419
+              swiper.slideTo(slideToIndex);
2420
+            });
2421
+          } else {
2422
+            swiper.slideTo(slideToIndex);
2423
+          }
2424
+        } else if (slideToIndex > swiper.slides.length - slidesPerView) {
2425
+          swiper.loopFix();
2426
+          slideToIndex = $wrapperEl
2427
+            .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
2428
+            .eq(0)
2429
+            .index();
2430
+
2431
+          Utils.nextTick(function () {
2432
+            swiper.slideTo(slideToIndex);
2433
+          });
2434
+        } else {
2435
+          swiper.slideTo(slideToIndex);
2436
+        }
2437
+      } else {
2438
+        swiper.slideTo(slideToIndex);
2439
+      }
2440
+    }
2441
+
2442
+    var slide = {
2443
+      slideTo: slideTo,
2444
+      slideToLoop: slideToLoop,
2445
+      slideNext: slideNext,
2446
+      slidePrev: slidePrev,
2447
+      slideReset: slideReset,
2448
+      slideToClosest: slideToClosest,
2449
+      slideToClickedSlide: slideToClickedSlide,
2450
+    };
2451
+
2452
+    function loopCreate () {
2453
+      var swiper = this;
2454
+      var params = swiper.params;
2455
+      var $wrapperEl = swiper.$wrapperEl;
2456
+      // Remove duplicated slides
2457
+      $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove();
2458
+
2459
+      var slides = $wrapperEl.children(("." + (params.slideClass)));
2460
+
2461
+      if (params.loopFillGroupWithBlank) {
2462
+        var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
2463
+        if (blankSlidesNum !== params.slidesPerGroup) {
2464
+          for (var i = 0; i < blankSlidesNum; i += 1) {
2465
+            var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + " " + (params.slideBlankClass)));
2466
+            $wrapperEl.append(blankNode);
2467
+          }
2468
+          slides = $wrapperEl.children(("." + (params.slideClass)));
2469
+        }
2470
+      }
2471
+
2472
+      if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }
2473
+
2474
+      swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
2475
+      swiper.loopedSlides += params.loopAdditionalSlides;
2476
+      if (swiper.loopedSlides > slides.length) {
2477
+        swiper.loopedSlides = slides.length;
2478
+      }
2479
+
2480
+      var prependSlides = [];
2481
+      var appendSlides = [];
2482
+      slides.each(function (index, el) {
2483
+        var slide = $(el);
2484
+        if (index < swiper.loopedSlides) { appendSlides.push(el); }
2485
+        if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }
2486
+        slide.attr('data-swiper-slide-index', index);
2487
+      });
2488
+      for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {
2489
+        $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));
2490
+      }
2491
+      for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {
2492
+        $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));
2493
+      }
2494
+    }
2495
+
2496
+    function loopFix () {
2497
+      var swiper = this;
2498
+
2499
+      swiper.emit('beforeLoopFix');
2500
+
2501
+      var activeIndex = swiper.activeIndex;
2502
+      var slides = swiper.slides;
2503
+      var loopedSlides = swiper.loopedSlides;
2504
+      var allowSlidePrev = swiper.allowSlidePrev;
2505
+      var allowSlideNext = swiper.allowSlideNext;
2506
+      var snapGrid = swiper.snapGrid;
2507
+      var rtl = swiper.rtlTranslate;
2508
+      var newIndex;
2509
+      swiper.allowSlidePrev = true;
2510
+      swiper.allowSlideNext = true;
2511
+
2512
+      var snapTranslate = -snapGrid[activeIndex];
2513
+      var diff = snapTranslate - swiper.getTranslate();
2514
+
2515
+      // Fix For Negative Oversliding
2516
+      if (activeIndex < loopedSlides) {
2517
+        newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
2518
+        newIndex += loopedSlides;
2519
+        var slideChanged = swiper.slideTo(newIndex, 0, false, true);
2520
+        if (slideChanged && diff !== 0) {
2521
+          swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
2522
+        }
2523
+      } else if (activeIndex >= slides.length - loopedSlides) {
2524
+        // Fix For Positive Oversliding
2525
+        newIndex = -slides.length + activeIndex + loopedSlides;
2526
+        newIndex += loopedSlides;
2527
+        var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);
2528
+        if (slideChanged$1 && diff !== 0) {
2529
+          swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
2530
+        }
2531
+      }
2532
+      swiper.allowSlidePrev = allowSlidePrev;
2533
+      swiper.allowSlideNext = allowSlideNext;
2534
+
2535
+      swiper.emit('loopFix');
2536
+    }
2537
+
2538
+    function loopDestroy () {
2539
+      var swiper = this;
2540
+      var $wrapperEl = swiper.$wrapperEl;
2541
+      var params = swiper.params;
2542
+      var slides = swiper.slides;
2543
+      $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + ",." + (params.slideClass) + "." + (params.slideBlankClass))).remove();
2544
+      slides.removeAttr('data-swiper-slide-index');
2545
+    }
2546
+
2547
+    var loop = {
2548
+      loopCreate: loopCreate,
2549
+      loopFix: loopFix,
2550
+      loopDestroy: loopDestroy,
2551
+    };
2552
+
2553
+    function setGrabCursor (moving) {
2554
+      var swiper = this;
2555
+      if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }
2556
+      var el = swiper.el;
2557
+      el.style.cursor = 'move';
2558
+      el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
2559
+      el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
2560
+      el.style.cursor = moving ? 'grabbing' : 'grab';
2561
+    }
2562
+
2563
+    function unsetGrabCursor () {
2564
+      var swiper = this;
2565
+      if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }
2566
+      swiper.el.style.cursor = '';
2567
+    }
2568
+
2569
+    var grabCursor = {
2570
+      setGrabCursor: setGrabCursor,
2571
+      unsetGrabCursor: unsetGrabCursor,
2572
+    };
2573
+
2574
+    function appendSlide (slides) {
2575
+      var swiper = this;
2576
+      var $wrapperEl = swiper.$wrapperEl;
2577
+      var params = swiper.params;
2578
+      if (params.loop) {
2579
+        swiper.loopDestroy();
2580
+      }
2581
+      if (typeof slides === 'object' && 'length' in slides) {
2582
+        for (var i = 0; i < slides.length; i += 1) {
2583
+          if (slides[i]) { $wrapperEl.append(slides[i]); }
2584
+        }
2585
+      } else {
2586
+        $wrapperEl.append(slides);
2587
+      }
2588
+      if (params.loop) {
2589
+        swiper.loopCreate();
2590
+      }
2591
+      if (!(params.observer && Support.observer)) {
2592
+        swiper.update();
2593
+      }
2594
+    }
2595
+
2596
+    function prependSlide (slides) {
2597
+      var swiper = this;
2598
+      var params = swiper.params;
2599
+      var $wrapperEl = swiper.$wrapperEl;
2600
+      var activeIndex = swiper.activeIndex;
2601
+
2602
+      if (params.loop) {
2603
+        swiper.loopDestroy();
2604
+      }
2605
+      var newActiveIndex = activeIndex + 1;
2606
+      if (typeof slides === 'object' && 'length' in slides) {
2607
+        for (var i = 0; i < slides.length; i += 1) {
2608
+          if (slides[i]) { $wrapperEl.prepend(slides[i]); }
2609
+        }
2610
+        newActiveIndex = activeIndex + slides.length;
2611
+      } else {
2612
+        $wrapperEl.prepend(slides);
2613
+      }
2614
+      if (params.loop) {
2615
+        swiper.loopCreate();
2616
+      }
2617
+      if (!(params.observer && Support.observer)) {
2618
+        swiper.update();
2619
+      }
2620
+      swiper.slideTo(newActiveIndex, 0, false);
2621
+    }
2622
+
2623
+    function addSlide (index, slides) {
2624
+      var swiper = this;
2625
+      var $wrapperEl = swiper.$wrapperEl;
2626
+      var params = swiper.params;
2627
+      var activeIndex = swiper.activeIndex;
2628
+      var activeIndexBuffer = activeIndex;
2629
+      if (params.loop) {
2630
+        activeIndexBuffer -= swiper.loopedSlides;
2631
+        swiper.loopDestroy();
2632
+        swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
2633
+      }
2634
+      var baseLength = swiper.slides.length;
2635
+      if (index <= 0) {
2636
+        swiper.prependSlide(slides);
2637
+        return;
2638
+      }
2639
+      if (index >= baseLength) {
2640
+        swiper.appendSlide(slides);
2641
+        return;
2642
+      }
2643
+      var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
2644
+
2645
+      var slidesBuffer = [];
2646
+      for (var i = baseLength - 1; i >= index; i -= 1) {
2647
+        var currentSlide = swiper.slides.eq(i);
2648
+        currentSlide.remove();
2649
+        slidesBuffer.unshift(currentSlide);
2650
+      }
2651
+
2652
+      if (typeof slides === 'object' && 'length' in slides) {
2653
+        for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
2654
+          if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }
2655
+        }
2656
+        newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
2657
+      } else {
2658
+        $wrapperEl.append(slides);
2659
+      }
2660
+
2661
+      for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {
2662
+        $wrapperEl.append(slidesBuffer[i$2]);
2663
+      }
2664
+
2665
+      if (params.loop) {
2666
+        swiper.loopCreate();
2667
+      }
2668
+      if (!(params.observer && Support.observer)) {
2669
+        swiper.update();
2670
+      }
2671
+      if (params.loop) {
2672
+        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
2673
+      } else {
2674
+        swiper.slideTo(newActiveIndex, 0, false);
2675
+      }
2676
+    }
2677
+
2678
+    function removeSlide (slidesIndexes) {
2679
+      var swiper = this;
2680
+      var params = swiper.params;
2681
+      var $wrapperEl = swiper.$wrapperEl;
2682
+      var activeIndex = swiper.activeIndex;
2683
+
2684
+      var activeIndexBuffer = activeIndex;
2685
+      if (params.loop) {
2686
+        activeIndexBuffer -= swiper.loopedSlides;
2687
+        swiper.loopDestroy();
2688
+        swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
2689
+      }
2690
+      var newActiveIndex = activeIndexBuffer;
2691
+      var indexToRemove;
2692
+
2693
+      if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
2694
+        for (var i = 0; i < slidesIndexes.length; i += 1) {
2695
+          indexToRemove = slidesIndexes[i];
2696
+          if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
2697
+          if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
2698
+        }
2699
+        newActiveIndex = Math.max(newActiveIndex, 0);
2700
+      } else {
2701
+        indexToRemove = slidesIndexes;
2702
+        if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
2703
+        if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
2704
+        newActiveIndex = Math.max(newActiveIndex, 0);
2705
+      }
2706
+
2707
+      if (params.loop) {
2708
+        swiper.loopCreate();
2709
+      }
2710
+
2711
+      if (!(params.observer && Support.observer)) {
2712
+        swiper.update();
2713
+      }
2714
+      if (params.loop) {
2715
+        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
2716
+      } else {
2717
+        swiper.slideTo(newActiveIndex, 0, false);
2718
+      }
2719
+    }
2720
+
2721
+    function removeAllSlides () {
2722
+      var swiper = this;
2723
+
2724
+      var slidesIndexes = [];
2725
+      for (var i = 0; i < swiper.slides.length; i += 1) {
2726
+        slidesIndexes.push(i);
2727
+      }
2728
+      swiper.removeSlide(slidesIndexes);
2729
+    }
2730
+
2731
+    var manipulation = {
2732
+      appendSlide: appendSlide,
2733
+      prependSlide: prependSlide,
2734
+      addSlide: addSlide,
2735
+      removeSlide: removeSlide,
2736
+      removeAllSlides: removeAllSlides,
2737
+    };
2738
+
2739
+    var Device = (function Device() {
2740
+      var platform = win.navigator.platform;
2741
+      var ua = win.navigator.userAgent;
2742
+
2743
+      var device = {
2744
+        ios: false,
2745
+        android: false,
2746
+        androidChrome: false,
2747
+        desktop: false,
2748
+        iphone: false,
2749
+        ipod: false,
2750
+        ipad: false,
2751
+        edge: false,
2752
+        ie: false,
2753
+        firefox: false,
2754
+        macos: false,
2755
+        windows: false,
2756
+        cordova: !!(win.cordova || win.phonegap),
2757
+        phonegap: !!(win.cordova || win.phonegap),
2758
+        electron: false,
2759
+      };
2760
+
2761
+      var screenWidth = win.screen.width;
2762
+      var screenHeight = win.screen.height;
2763
+
2764
+      var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
2765
+      var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
2766
+      var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
2767
+      var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
2768
+      var ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
2769
+      var edge = ua.indexOf('Edge/') >= 0;
2770
+      var firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
2771
+      var windows = platform === 'Win32';
2772
+      var electron = ua.toLowerCase().indexOf('electron') >= 0;
2773
+      var macos = platform === 'MacIntel';
2774
+
2775
+      // iPadOs 13 fix
2776
+      if (!ipad
2777
+        && macos
2778
+        && Support.touch
2779
+        && (
2780
+          (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
2781
+          || (screenWidth === 834 && screenHeight === 1194) // Pro 11
2782
+          || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
2783
+          || (screenWidth === 768 && screenHeight === 1024) // other
2784
+        )
2785
+      ) {
2786
+        ipad = ua.match(/(Version)\/([\d.]+)/);
2787
+        macos = false;
2788
+      }
2789
+
2790
+      device.ie = ie;
2791
+      device.edge = edge;
2792
+      device.firefox = firefox;
2793
+
2794
+      // Android
2795
+      if (android && !windows) {
2796
+        device.os = 'android';
2797
+        device.osVersion = android[2];
2798
+        device.android = true;
2799
+        device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
2800
+      }
2801
+      if (ipad || iphone || ipod) {
2802
+        device.os = 'ios';
2803
+        device.ios = true;
2804
+      }
2805
+      // iOS
2806
+      if (iphone && !ipod) {
2807
+        device.osVersion = iphone[2].replace(/_/g, '.');
2808
+        device.iphone = true;
2809
+      }
2810
+      if (ipad) {
2811
+        device.osVersion = ipad[2].replace(/_/g, '.');
2812
+        device.ipad = true;
2813
+      }
2814
+      if (ipod) {
2815
+        device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
2816
+        device.ipod = true;
2817
+      }
2818
+      // iOS 8+ changed UA
2819
+      if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
2820
+        if (device.osVersion.split('.')[0] === '10') {
2821
+          device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
2822
+        }
2823
+      }
2824
+
2825
+      // Webview
2826
+      device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))
2827
+        || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);
2828
+      device.webview = device.webView;
2829
+      device.standalone = device.webView;
2830
+
2831
+      // Desktop
2832
+      device.desktop = !(device.ios || device.android) || electron;
2833
+      if (device.desktop) {
2834
+        device.electron = electron;
2835
+        device.macos = macos;
2836
+        device.windows = windows;
2837
+        if (device.macos) {
2838
+          device.os = 'macos';
2839
+        }
2840
+        if (device.windows) {
2841
+          device.os = 'windows';
2842
+        }
2843
+      }
2844
+
2845
+      // Pixel Ratio
2846
+      device.pixelRatio = win.devicePixelRatio || 1;
2847
+
2848
+      // Export object
2849
+      return device;
2850
+    }());
2851
+
2852
+    function onTouchStart (event) {
2853
+      var swiper = this;
2854
+      var data = swiper.touchEventsData;
2855
+      var params = swiper.params;
2856
+      var touches = swiper.touches;
2857
+
2858
+      if (swiper.animating && params.preventInteractionOnTransition) {
2859
+        return;
2860
+      }
2861
+      var e = event;
2862
+      if (e.originalEvent) { e = e.originalEvent; }
2863
+      var $targetEl = $(e.target);
2864
+
2865
+      if (params.touchEventsTarget === 'wrapper') {
2866
+        if (!$targetEl.closest(swiper.wrapperEl).length) { return; }
2867
+      }
2868
+      data.isTouchEvent = e.type === 'touchstart';
2869
+      if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }
2870
+      if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }
2871
+      if (data.isTouched && data.isMoved) { return; }
2872
+      if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : ("." + (params.noSwipingClass)))[0]) {
2873
+        swiper.allowClick = true;
2874
+        return;
2875
+      }
2876
+      if (params.swipeHandler) {
2877
+        if (!$targetEl.closest(params.swipeHandler)[0]) { return; }
2878
+      }
2879
+
2880
+      touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
2881
+      touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
2882
+      var startX = touches.currentX;
2883
+      var startY = touches.currentY;
2884
+
2885
+      // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
2886
+
2887
+      var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
2888
+      var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
2889
+      if (
2890
+        edgeSwipeDetection
2891
+        && ((startX <= edgeSwipeThreshold)
2892
+        || (startX >= win.screen.width - edgeSwipeThreshold))
2893
+      ) {
2894
+        return;
2895
+      }
2896
+
2897
+      Utils.extend(data, {
2898
+        isTouched: true,
2899
+        isMoved: false,
2900
+        allowTouchCallbacks: true,
2901
+        isScrolling: undefined,
2902
+        startMoving: undefined,
2903
+      });
2904
+
2905
+      touches.startX = startX;
2906
+      touches.startY = startY;
2907
+      data.touchStartTime = Utils.now();
2908
+      swiper.allowClick = true;
2909
+      swiper.updateSize();
2910
+      swiper.swipeDirection = undefined;
2911
+      if (params.threshold > 0) { data.allowThresholdMove = false; }
2912
+      if (e.type !== 'touchstart') {
2913
+        var preventDefault = true;
2914
+        if ($targetEl.is(data.formElements)) { preventDefault = false; }
2915
+        if (
2916
+          doc.activeElement
2917
+          && $(doc.activeElement).is(data.formElements)
2918
+          && doc.activeElement !== $targetEl[0]
2919
+        ) {
2920
+          doc.activeElement.blur();
2921
+        }
2922
+
2923
+        var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
2924
+        if (params.touchStartForcePreventDefault || shouldPreventDefault) {
2925
+          e.preventDefault();
2926
+        }
2927
+      }
2928
+      swiper.emit('touchStart', e);
2929
+    }
2930
+
2931
+    function onTouchMove (event) {
2932
+      var swiper = this;
2933
+      var data = swiper.touchEventsData;
2934
+      var params = swiper.params;
2935
+      var touches = swiper.touches;
2936
+      var rtl = swiper.rtlTranslate;
2937
+      var e = event;
2938
+      if (e.originalEvent) { e = e.originalEvent; }
2939
+      if (!data.isTouched) {
2940
+        if (data.startMoving && data.isScrolling) {
2941
+          swiper.emit('touchMoveOpposite', e);
2942
+        }
2943
+        return;
2944
+      }
2945
+      if (data.isTouchEvent && e.type !== 'touchmove') { return; }
2946
+      var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
2947
+      var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
2948
+      var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
2949
+      if (e.preventedByNestedSwiper) {
2950
+        touches.startX = pageX;
2951
+        touches.startY = pageY;
2952
+        return;
2953
+      }
2954
+      if (!swiper.allowTouchMove) {
2955
+        // isMoved = true;
2956
+        swiper.allowClick = false;
2957
+        if (data.isTouched) {
2958
+          Utils.extend(touches, {
2959
+            startX: pageX,
2960
+            startY: pageY,
2961
+            currentX: pageX,
2962
+            currentY: pageY,
2963
+          });
2964
+          data.touchStartTime = Utils.now();
2965
+        }
2966
+        return;
2967
+      }
2968
+      if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
2969
+        if (swiper.isVertical()) {
2970
+          // Vertical
2971
+          if (
2972
+            (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
2973
+            || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
2974
+          ) {
2975
+            data.isTouched = false;
2976
+            data.isMoved = false;
2977
+            return;
2978
+          }
2979
+        } else if (
2980
+          (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
2981
+          || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
2982
+        ) {
2983
+          return;
2984
+        }
2985
+      }
2986
+      if (data.isTouchEvent && doc.activeElement) {
2987
+        if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
2988
+          data.isMoved = true;
2989
+          swiper.allowClick = false;
2990
+          return;
2991
+        }
2992
+      }
2993
+      if (data.allowTouchCallbacks) {
2994
+        swiper.emit('touchMove', e);
2995
+      }
2996
+      if (e.targetTouches && e.targetTouches.length > 1) { return; }
2997
+
2998
+      touches.currentX = pageX;
2999
+      touches.currentY = pageY;
3000
+
3001
+      var diffX = touches.currentX - touches.startX;
3002
+      var diffY = touches.currentY - touches.startY;
3003
+      if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }
3004
+
3005
+      if (typeof data.isScrolling === 'undefined') {
3006
+        var touchAngle;
3007
+        if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
3008
+          data.isScrolling = false;
3009
+        } else {
3010
+          // eslint-disable-next-line
3011
+          if ((diffX * diffX) + (diffY * diffY) >= 25) {
3012
+            touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
3013
+            data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
3014
+          }
3015
+        }
3016
+      }
3017
+      if (data.isScrolling) {
3018
+        swiper.emit('touchMoveOpposite', e);
3019
+      }
3020
+      if (typeof data.startMoving === 'undefined') {
3021
+        if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
3022
+          data.startMoving = true;
3023
+        }
3024
+      }
3025
+      if (data.isScrolling) {
3026
+        data.isTouched = false;
3027
+        return;
3028
+      }
3029
+      if (!data.startMoving) {
3030
+        return;
3031
+      }
3032
+      swiper.allowClick = false;
3033
+      if (!params.cssMode && e.cancelable) {
3034
+        e.preventDefault();
3035
+      }
3036
+      if (params.touchMoveStopPropagation && !params.nested) {
3037
+        e.stopPropagation();
3038
+      }
3039
+
3040
+      if (!data.isMoved) {
3041
+        if (params.loop) {
3042
+          swiper.loopFix();
3043
+        }
3044
+        data.startTranslate = swiper.getTranslate();
3045
+        swiper.setTransition(0);
3046
+        if (swiper.animating) {
3047
+          swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
3048
+        }
3049
+        data.allowMomentumBounce = false;
3050
+        // Grab Cursor
3051
+        if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3052
+          swiper.setGrabCursor(true);
3053
+        }
3054
+        swiper.emit('sliderFirstMove', e);
3055
+      }
3056
+      swiper.emit('sliderMove', e);
3057
+      data.isMoved = true;
3058
+
3059
+      var diff = swiper.isHorizontal() ? diffX : diffY;
3060
+      touches.diff = diff;
3061
+
3062
+      diff *= params.touchRatio;
3063
+      if (rtl) { diff = -diff; }
3064
+
3065
+      swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
3066
+      data.currentTranslate = diff + data.startTranslate;
3067
+
3068
+      var disableParentSwiper = true;
3069
+      var resistanceRatio = params.resistanceRatio;
3070
+      if (params.touchReleaseOnEdges) {
3071
+        resistanceRatio = 0;
3072
+      }
3073
+      if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
3074
+        disableParentSwiper = false;
3075
+        if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }
3076
+      } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
3077
+        disableParentSwiper = false;
3078
+        if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }
3079
+      }
3080
+
3081
+      if (disableParentSwiper) {
3082
+        e.preventedByNestedSwiper = true;
3083
+      }
3084
+
3085
+      // Directions locks
3086
+      if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
3087
+        data.currentTranslate = data.startTranslate;
3088
+      }
3089
+      if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
3090
+        data.currentTranslate = data.startTranslate;
3091
+      }
3092
+
3093
+
3094
+      // Threshold
3095
+      if (params.threshold > 0) {
3096
+        if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
3097
+          if (!data.allowThresholdMove) {
3098
+            data.allowThresholdMove = true;
3099
+            touches.startX = touches.currentX;
3100
+            touches.startY = touches.currentY;
3101
+            data.currentTranslate = data.startTranslate;
3102
+            touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
3103
+            return;
3104
+          }
3105
+        } else {
3106
+          data.currentTranslate = data.startTranslate;
3107
+          return;
3108
+        }
3109
+      }
3110
+
3111
+      if (!params.followFinger || params.cssMode) { return; }
3112
+
3113
+      // Update active index in free mode
3114
+      if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
3115
+        swiper.updateActiveIndex();
3116
+        swiper.updateSlidesClasses();
3117
+      }
3118
+      if (params.freeMode) {
3119
+        // Velocity
3120
+        if (data.velocities.length === 0) {
3121
+          data.velocities.push({
3122
+            position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
3123
+            time: data.touchStartTime,
3124
+          });
3125
+        }
3126
+        data.velocities.push({
3127
+          position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
3128
+          time: Utils.now(),
3129
+        });
3130
+      }
3131
+      // Update progress
3132
+      swiper.updateProgress(data.currentTranslate);
3133
+      // Update translate
3134
+      swiper.setTranslate(data.currentTranslate);
3135
+    }
3136
+
3137
+    function onTouchEnd (event) {
3138
+      var swiper = this;
3139
+      var data = swiper.touchEventsData;
3140
+
3141
+      var params = swiper.params;
3142
+      var touches = swiper.touches;
3143
+      var rtl = swiper.rtlTranslate;
3144
+      var $wrapperEl = swiper.$wrapperEl;
3145
+      var slidesGrid = swiper.slidesGrid;
3146
+      var snapGrid = swiper.snapGrid;
3147
+      var e = event;
3148
+      if (e.originalEvent) { e = e.originalEvent; }
3149
+      if (data.allowTouchCallbacks) {
3150
+        swiper.emit('touchEnd', e);
3151
+      }
3152
+      data.allowTouchCallbacks = false;
3153
+      if (!data.isTouched) {
3154
+        if (data.isMoved && params.grabCursor) {
3155
+          swiper.setGrabCursor(false);
3156
+        }
3157
+        data.isMoved = false;
3158
+        data.startMoving = false;
3159
+        return;
3160
+      }
3161
+      // Return Grab Cursor
3162
+      if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3163
+        swiper.setGrabCursor(false);
3164
+      }
3165
+
3166
+      // Time diff
3167
+      var touchEndTime = Utils.now();
3168
+      var timeDiff = touchEndTime - data.touchStartTime;
3169
+
3170
+      // Tap, doubleTap, Click
3171
+      if (swiper.allowClick) {
3172
+        swiper.updateClickedSlide(e);
3173
+        swiper.emit('tap click', e);
3174
+        if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
3175
+          swiper.emit('doubleTap doubleClick', e);
3176
+        }
3177
+      }
3178
+
3179
+      data.lastClickTime = Utils.now();
3180
+      Utils.nextTick(function () {
3181
+        if (!swiper.destroyed) { swiper.allowClick = true; }
3182
+      });
3183
+
3184
+      if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
3185
+        data.isTouched = false;
3186
+        data.isMoved = false;
3187
+        data.startMoving = false;
3188
+        return;
3189
+      }
3190
+      data.isTouched = false;
3191
+      data.isMoved = false;
3192
+      data.startMoving = false;
3193
+
3194
+      var currentPos;
3195
+      if (params.followFinger) {
3196
+        currentPos = rtl ? swiper.translate : -swiper.translate;
3197
+      } else {
3198
+        currentPos = -data.currentTranslate;
3199
+      }
3200
+
3201
+      if (params.cssMode) {
3202
+        return;
3203
+      }
3204
+
3205
+      if (params.freeMode) {
3206
+        if (currentPos < -swiper.minTranslate()) {
3207
+          swiper.slideTo(swiper.activeIndex);
3208
+          return;
3209
+        }
3210
+        if (currentPos > -swiper.maxTranslate()) {
3211
+          if (swiper.slides.length < snapGrid.length) {
3212
+            swiper.slideTo(snapGrid.length - 1);
3213
+          } else {
3214
+            swiper.slideTo(swiper.slides.length - 1);
3215
+          }
3216
+          return;
3217
+        }
3218
+
3219
+        if (params.freeModeMomentum) {
3220
+          if (data.velocities.length > 1) {
3221
+            var lastMoveEvent = data.velocities.pop();
3222
+            var velocityEvent = data.velocities.pop();
3223
+
3224
+            var distance = lastMoveEvent.position - velocityEvent.position;
3225
+            var time = lastMoveEvent.time - velocityEvent.time;
3226
+            swiper.velocity = distance / time;
3227
+            swiper.velocity /= 2;
3228
+            if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
3229
+              swiper.velocity = 0;
3230
+            }
3231
+            // this implies that the user stopped moving a finger then released.
3232
+            // There would be no events with distance zero, so the last event is stale.
3233
+            if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
3234
+              swiper.velocity = 0;
3235
+            }
3236
+          } else {
3237
+            swiper.velocity = 0;
3238
+          }
3239
+          swiper.velocity *= params.freeModeMomentumVelocityRatio;
3240
+
3241
+          data.velocities.length = 0;
3242
+          var momentumDuration = 1000 * params.freeModeMomentumRatio;
3243
+          var momentumDistance = swiper.velocity * momentumDuration;
3244
+
3245
+          var newPosition = swiper.translate + momentumDistance;
3246
+          if (rtl) { newPosition = -newPosition; }
3247
+
3248
+          var doBounce = false;
3249
+          var afterBouncePosition;
3250
+          var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
3251
+          var needsLoopFix;
3252
+          if (newPosition < swiper.maxTranslate()) {
3253
+            if (params.freeModeMomentumBounce) {
3254
+              if (newPosition + swiper.maxTranslate() < -bounceAmount) {
3255
+                newPosition = swiper.maxTranslate() - bounceAmount;
3256
+              }
3257
+              afterBouncePosition = swiper.maxTranslate();
3258
+              doBounce = true;
3259
+              data.allowMomentumBounce = true;
3260
+            } else {
3261
+              newPosition = swiper.maxTranslate();
3262
+            }
3263
+            if (params.loop && params.centeredSlides) { needsLoopFix = true; }
3264
+          } else if (newPosition > swiper.minTranslate()) {
3265
+            if (params.freeModeMomentumBounce) {
3266
+              if (newPosition - swiper.minTranslate() > bounceAmount) {
3267
+                newPosition = swiper.minTranslate() + bounceAmount;
3268
+              }
3269
+              afterBouncePosition = swiper.minTranslate();
3270
+              doBounce = true;
3271
+              data.allowMomentumBounce = true;
3272
+            } else {
3273
+              newPosition = swiper.minTranslate();
3274
+            }
3275
+            if (params.loop && params.centeredSlides) { needsLoopFix = true; }
3276
+          } else if (params.freeModeSticky) {
3277
+            var nextSlide;
3278
+            for (var j = 0; j < snapGrid.length; j += 1) {
3279
+              if (snapGrid[j] > -newPosition) {
3280
+                nextSlide = j;
3281
+                break;
3282
+              }
3283
+            }
3284
+
3285
+            if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
3286
+              newPosition = snapGrid[nextSlide];
3287
+            } else {
3288
+              newPosition = snapGrid[nextSlide - 1];
3289
+            }
3290
+            newPosition = -newPosition;
3291
+          }
3292
+          if (needsLoopFix) {
3293
+            swiper.once('transitionEnd', function () {
3294
+              swiper.loopFix();
3295
+            });
3296
+          }
3297
+          // Fix duration
3298
+          if (swiper.velocity !== 0) {
3299
+            if (rtl) {
3300
+              momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
3301
+            } else {
3302
+              momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
3303
+            }
3304
+            if (params.freeModeSticky) {
3305
+              // If freeModeSticky is active and the user ends a swipe with a slow-velocity
3306
+              // event, then durations can be 20+ seconds to slide one (or zero!) slides.
3307
+              // It's easy to see this when simulating touch with mouse events. To fix this,
3308
+              // limit single-slide swipes to the default slide duration. This also has the
3309
+              // nice side effect of matching slide speed if the user stopped moving before
3310
+              // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
3311
+              // For faster swipes, also apply limits (albeit higher ones).
3312
+              var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
3313
+              var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
3314
+              if (moveDistance < currentSlideSize) {
3315
+                momentumDuration = params.speed;
3316
+              } else if (moveDistance < 2 * currentSlideSize) {
3317
+                momentumDuration = params.speed * 1.5;
3318
+              } else {
3319
+                momentumDuration = params.speed * 2.5;
3320
+              }
3321
+            }
3322
+          } else if (params.freeModeSticky) {
3323
+            swiper.slideToClosest();
3324
+            return;
3325
+          }
3326
+
3327
+          if (params.freeModeMomentumBounce && doBounce) {
3328
+            swiper.updateProgress(afterBouncePosition);
3329
+            swiper.setTransition(momentumDuration);
3330
+            swiper.setTranslate(newPosition);
3331
+            swiper.transitionStart(true, swiper.swipeDirection);
3332
+            swiper.animating = true;
3333
+            $wrapperEl.transitionEnd(function () {
3334
+              if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }
3335
+              swiper.emit('momentumBounce');
3336
+              swiper.setTransition(params.speed);
3337
+              setTimeout(function () {
3338
+                swiper.setTranslate(afterBouncePosition);
3339
+                $wrapperEl.transitionEnd(function () {
3340
+                  if (!swiper || swiper.destroyed) { return; }
3341
+                  swiper.transitionEnd();
3342
+                });
3343
+              }, 0);
3344
+            });
3345
+          } else if (swiper.velocity) {
3346
+            swiper.updateProgress(newPosition);
3347
+            swiper.setTransition(momentumDuration);
3348
+            swiper.setTranslate(newPosition);
3349
+            swiper.transitionStart(true, swiper.swipeDirection);
3350
+            if (!swiper.animating) {
3351
+              swiper.animating = true;
3352
+              $wrapperEl.transitionEnd(function () {
3353
+                if (!swiper || swiper.destroyed) { return; }
3354
+                swiper.transitionEnd();
3355
+              });
3356
+            }
3357
+          } else {
3358
+            swiper.updateProgress(newPosition);
3359
+          }
3360
+
3361
+          swiper.updateActiveIndex();
3362
+          swiper.updateSlidesClasses();
3363
+        } else if (params.freeModeSticky) {
3364
+          swiper.slideToClosest();
3365
+          return;
3366
+        }
3367
+
3368
+        if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
3369
+          swiper.updateProgress();
3370
+          swiper.updateActiveIndex();
3371
+          swiper.updateSlidesClasses();
3372
+        }
3373
+        return;
3374
+      }
3375
+
3376
+      // Find current slide
3377
+      var stopIndex = 0;
3378
+      var groupSize = swiper.slidesSizesGrid[0];
3379
+      for (var i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
3380
+        var increment$1 = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
3381
+        if (typeof slidesGrid[i + increment$1] !== 'undefined') {
3382
+          if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment$1]) {
3383
+            stopIndex = i;
3384
+            groupSize = slidesGrid[i + increment$1] - slidesGrid[i];
3385
+          }
3386
+        } else if (currentPos >= slidesGrid[i]) {
3387
+          stopIndex = i;
3388
+          groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
3389
+        }
3390
+      }
3391
+
3392
+      // Find current slide size
3393
+      var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
3394
+      var increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
3395
+
3396
+      if (timeDiff > params.longSwipesMs) {
3397
+        // Long touches
3398
+        if (!params.longSwipes) {
3399
+          swiper.slideTo(swiper.activeIndex);
3400
+          return;
3401
+        }
3402
+        if (swiper.swipeDirection === 'next') {
3403
+          if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + increment); }
3404
+          else { swiper.slideTo(stopIndex); }
3405
+        }
3406
+        if (swiper.swipeDirection === 'prev') {
3407
+          if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + increment); }
3408
+          else { swiper.slideTo(stopIndex); }
3409
+        }
3410
+      } else {
3411
+        // Short swipes
3412
+        if (!params.shortSwipes) {
3413
+          swiper.slideTo(swiper.activeIndex);
3414
+          return;
3415
+        }
3416
+        var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
3417
+        if (!isNavButtonTarget) {
3418
+          if (swiper.swipeDirection === 'next') {
3419
+            swiper.slideTo(stopIndex + increment);
3420
+          }
3421
+          if (swiper.swipeDirection === 'prev') {
3422
+            swiper.slideTo(stopIndex);
3423
+          }
3424
+        } else if (e.target === swiper.navigation.nextEl) {
3425
+          swiper.slideTo(stopIndex + increment);
3426
+        } else {
3427
+          swiper.slideTo(stopIndex);
3428
+        }
3429
+      }
3430
+    }
3431
+
3432
+    function onResize () {
3433
+      var swiper = this;
3434
+
3435
+      var params = swiper.params;
3436
+      var el = swiper.el;
3437
+
3438
+      if (el && el.offsetWidth === 0) { return; }
3439
+
3440
+      // Breakpoints
3441
+      if (params.breakpoints) {
3442
+        swiper.setBreakpoint();
3443
+      }
3444
+
3445
+      // Save locks
3446
+      var allowSlideNext = swiper.allowSlideNext;
3447
+      var allowSlidePrev = swiper.allowSlidePrev;
3448
+      var snapGrid = swiper.snapGrid;
3449
+
3450
+      // Disable locks on resize
3451
+      swiper.allowSlideNext = true;
3452
+      swiper.allowSlidePrev = true;
3453
+
3454
+      swiper.updateSize();
3455
+      swiper.updateSlides();
3456
+
3457
+      swiper.updateSlidesClasses();
3458
+      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
3459
+        swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3460
+      } else {
3461
+        swiper.slideTo(swiper.activeIndex, 0, false, true);
3462
+      }
3463
+
3464
+      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3465
+        swiper.autoplay.run();
3466
+      }
3467
+      // Return locks after resize
3468
+      swiper.allowSlidePrev = allowSlidePrev;
3469
+      swiper.allowSlideNext = allowSlideNext;
3470
+
3471
+      if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
3472
+        swiper.checkOverflow();
3473
+      }
3474
+    }
3475
+
3476
+    function onClick (e) {
3477
+      var swiper = this;
3478
+      if (!swiper.allowClick) {
3479
+        if (swiper.params.preventClicks) { e.preventDefault(); }
3480
+        if (swiper.params.preventClicksPropagation && swiper.animating) {
3481
+          e.stopPropagation();
3482
+          e.stopImmediatePropagation();
3483
+        }
3484
+      }
3485
+    }
3486
+
3487
+    function onScroll () {
3488
+      var swiper = this;
3489
+      var wrapperEl = swiper.wrapperEl;
3490
+      var rtlTranslate = swiper.rtlTranslate;
3491
+      swiper.previousTranslate = swiper.translate;
3492
+      if (swiper.isHorizontal()) {
3493
+        if (rtlTranslate) {
3494
+          swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
3495
+        } else {
3496
+          swiper.translate = -wrapperEl.scrollLeft;
3497
+        }
3498
+      } else {
3499
+        swiper.translate = -wrapperEl.scrollTop;
3500
+      }
3501
+      // eslint-disable-next-line
3502
+      if (swiper.translate === -0) { swiper.translate = 0; }
3503
+
3504
+      swiper.updateActiveIndex();
3505
+      swiper.updateSlidesClasses();
3506
+
3507
+      var newProgress;
3508
+      var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3509
+      if (translatesDiff === 0) {
3510
+        newProgress = 0;
3511
+      } else {
3512
+        newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
3513
+      }
3514
+      if (newProgress !== swiper.progress) {
3515
+        swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
3516
+      }
3517
+
3518
+      swiper.emit('setTranslate', swiper.translate, false);
3519
+    }
3520
+
3521
+    var dummyEventAttached = false;
3522
+    function dummyEventListener() {}
3523
+
3524
+    function attachEvents() {
3525
+      var swiper = this;
3526
+      var params = swiper.params;
3527
+      var touchEvents = swiper.touchEvents;
3528
+      var el = swiper.el;
3529
+      var wrapperEl = swiper.wrapperEl;
3530
+
3531
+      swiper.onTouchStart = onTouchStart.bind(swiper);
3532
+      swiper.onTouchMove = onTouchMove.bind(swiper);
3533
+      swiper.onTouchEnd = onTouchEnd.bind(swiper);
3534
+      if (params.cssMode) {
3535
+        swiper.onScroll = onScroll.bind(swiper);
3536
+      }
3537
+
3538
+      swiper.onClick = onClick.bind(swiper);
3539
+
3540
+      var capture = !!params.nested;
3541
+
3542
+      // Touch Events
3543
+      if (!Support.touch && Support.pointerEvents) {
3544
+        el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
3545
+        doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
3546
+        doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
3547
+      } else {
3548
+        if (Support.touch) {
3549
+          var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
3550
+          el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
3551
+          el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);
3552
+          el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
3553
+          if (touchEvents.cancel) {
3554
+            el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
3555
+          }
3556
+          if (!dummyEventAttached) {
3557
+            doc.addEventListener('touchstart', dummyEventListener);
3558
+            dummyEventAttached = true;
3559
+          }
3560
+        }
3561
+        if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
3562
+          el.addEventListener('mousedown', swiper.onTouchStart, false);
3563
+          doc.addEventListener('mousemove', swiper.onTouchMove, capture);
3564
+          doc.addEventListener('mouseup', swiper.onTouchEnd, false);
3565
+        }
3566
+      }
3567
+      // Prevent Links Clicks
3568
+      if (params.preventClicks || params.preventClicksPropagation) {
3569
+        el.addEventListener('click', swiper.onClick, true);
3570
+      }
3571
+      if (params.cssMode) {
3572
+        wrapperEl.addEventListener('scroll', swiper.onScroll);
3573
+      }
3574
+
3575
+      // Resize handler
3576
+      if (params.updateOnWindowResize) {
3577
+        swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
3578
+      } else {
3579
+        swiper.on('observerUpdate', onResize, true);
3580
+      }
3581
+    }
3582
+
3583
+    function detachEvents() {
3584
+      var swiper = this;
3585
+
3586
+      var params = swiper.params;
3587
+      var touchEvents = swiper.touchEvents;
3588
+      var el = swiper.el;
3589
+      var wrapperEl = swiper.wrapperEl;
3590
+
3591
+      var capture = !!params.nested;
3592
+
3593
+      // Touch Events
3594
+      if (!Support.touch && Support.pointerEvents) {
3595
+        el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
3596
+        doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
3597
+        doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
3598
+      } else {
3599
+        if (Support.touch) {
3600
+          var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
3601
+          el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
3602
+          el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
3603
+          el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
3604
+          if (touchEvents.cancel) {
3605
+            el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
3606
+          }
3607
+        }
3608
+        if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
3609
+          el.removeEventListener('mousedown', swiper.onTouchStart, false);
3610
+          doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
3611
+          doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
3612
+        }
3613
+      }
3614
+      // Prevent Links Clicks
3615
+      if (params.preventClicks || params.preventClicksPropagation) {
3616
+        el.removeEventListener('click', swiper.onClick, true);
3617
+      }
3618
+
3619
+      if (params.cssMode) {
3620
+        wrapperEl.removeEventListener('scroll', swiper.onScroll);
3621
+      }
3622
+
3623
+      // Resize handler
3624
+      swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
3625
+    }
3626
+
3627
+    var events = {
3628
+      attachEvents: attachEvents,
3629
+      detachEvents: detachEvents,
3630
+    };
3631
+
3632
+    function setBreakpoint () {
3633
+      var swiper = this;
3634
+      var activeIndex = swiper.activeIndex;
3635
+      var initialized = swiper.initialized;
3636
+      var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;
3637
+      var params = swiper.params;
3638
+      var $el = swiper.$el;
3639
+      var breakpoints = params.breakpoints;
3640
+      if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }
3641
+
3642
+      // Get breakpoint for window width and update parameters
3643
+      var breakpoint = swiper.getBreakpoint(breakpoints);
3644
+
3645
+      if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
3646
+        var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
3647
+        if (breakpointOnlyParams) {
3648
+          ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {
3649
+            var paramValue = breakpointOnlyParams[param];
3650
+            if (typeof paramValue === 'undefined') { return; }
3651
+            if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
3652
+              breakpointOnlyParams[param] = 'auto';
3653
+            } else if (param === 'slidesPerView') {
3654
+              breakpointOnlyParams[param] = parseFloat(paramValue);
3655
+            } else {
3656
+              breakpointOnlyParams[param] = parseInt(paramValue, 10);
3657
+            }
3658
+          });
3659
+        }
3660
+
3661
+        var breakpointParams = breakpointOnlyParams || swiper.originalParams;
3662
+        var wasMultiRow = params.slidesPerColumn > 1;
3663
+        var isMultiRow = breakpointParams.slidesPerColumn > 1;
3664
+        if (wasMultiRow && !isMultiRow) {
3665
+          $el.removeClass(((params.containerModifierClass) + "multirow " + (params.containerModifierClass) + "multirow-column"));
3666
+        } else if (!wasMultiRow && isMultiRow) {
3667
+          $el.addClass(((params.containerModifierClass) + "multirow"));
3668
+          if (breakpointParams.slidesPerColumnFill === 'column') {
3669
+            $el.addClass(((params.containerModifierClass) + "multirow-column"));
3670
+          }
3671
+        }
3672
+
3673
+        var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
3674
+        var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
3675
+
3676
+        if (directionChanged && initialized) {
3677
+          swiper.changeDirection();
3678
+        }
3679
+
3680
+        Utils.extend(swiper.params, breakpointParams);
3681
+
3682
+        Utils.extend(swiper, {
3683
+          allowTouchMove: swiper.params.allowTouchMove,
3684
+          allowSlideNext: swiper.params.allowSlideNext,
3685
+          allowSlidePrev: swiper.params.allowSlidePrev,
3686
+        });
3687
+
3688
+        swiper.currentBreakpoint = breakpoint;
3689
+
3690
+        if (needsReLoop && initialized) {
3691
+          swiper.loopDestroy();
3692
+          swiper.loopCreate();
3693
+          swiper.updateSlides();
3694
+          swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
3695
+        }
3696
+
3697
+        swiper.emit('breakpoint', breakpointParams);
3698
+      }
3699
+    }
3700
+
3701
+    function getBreakpoint (breakpoints) {
3702
+      // Get breakpoint for window width
3703
+      if (!breakpoints) { return undefined; }
3704
+      var breakpoint = false;
3705
+
3706
+      var points = Object.keys(breakpoints).map(function (point) {
3707
+        if (typeof point === 'string' && point.indexOf('@') === 0) {
3708
+          var minRatio = parseFloat(point.substr(1));
3709
+          var value = win.innerHeight * minRatio;
3710
+          return { value: value, point: point };
3711
+        }
3712
+        return { value: point, point: point };
3713
+      });
3714
+
3715
+      points.sort(function (a, b) { return parseInt(a.value, 10) - parseInt(b.value, 10); });
3716
+      for (var i = 0; i < points.length; i += 1) {
3717
+        var ref = points[i];
3718
+        var point = ref.point;
3719
+        var value = ref.value;
3720
+        if (value <= win.innerWidth) {
3721
+          breakpoint = point;
3722
+        }
3723
+      }
3724
+      return breakpoint || 'max';
3725
+    }
3726
+
3727
+    var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };
3728
+
3729
+    function addClasses () {
3730
+      var swiper = this;
3731
+      var classNames = swiper.classNames;
3732
+      var params = swiper.params;
3733
+      var rtl = swiper.rtl;
3734
+      var $el = swiper.$el;
3735
+      var suffixes = [];
3736
+
3737
+      suffixes.push('initialized');
3738
+      suffixes.push(params.direction);
3739
+
3740
+      if (params.freeMode) {
3741
+        suffixes.push('free-mode');
3742
+      }
3743
+      if (params.autoHeight) {
3744
+        suffixes.push('autoheight');
3745
+      }
3746
+      if (rtl) {
3747
+        suffixes.push('rtl');
3748
+      }
3749
+      if (params.slidesPerColumn > 1) {
3750
+        suffixes.push('multirow');
3751
+        if (params.slidesPerColumnFill === 'column') {
3752
+          suffixes.push('multirow-column');
3753
+        }
3754
+      }
3755
+      if (Device.android) {
3756
+        suffixes.push('android');
3757
+      }
3758
+      if (Device.ios) {
3759
+        suffixes.push('ios');
3760
+      }
3761
+
3762
+      if (params.cssMode) {
3763
+        suffixes.push('css-mode');
3764
+      }
3765
+
3766
+      suffixes.forEach(function (suffix) {
3767
+        classNames.push(params.containerModifierClass + suffix);
3768
+      });
3769
+
3770
+      $el.addClass(classNames.join(' '));
3771
+    }
3772
+
3773
+    function removeClasses () {
3774
+      var swiper = this;
3775
+      var $el = swiper.$el;
3776
+      var classNames = swiper.classNames;
3777
+
3778
+      $el.removeClass(classNames.join(' '));
3779
+    }
3780
+
3781
+    var classes = { addClasses: addClasses, removeClasses: removeClasses };
3782
+
3783
+    function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
3784
+      var image;
3785
+      function onReady() {
3786
+        if (callback) { callback(); }
3787
+      }
3788
+      var isPicture = $(imageEl).parent('picture')[0];
3789
+
3790
+      if (!isPicture && (!imageEl.complete || !checkForComplete)) {
3791
+        if (src) {
3792
+          image = new win.Image();
3793
+          image.onload = onReady;
3794
+          image.onerror = onReady;
3795
+          if (sizes) {
3796
+            image.sizes = sizes;
3797
+          }
3798
+          if (srcset) {
3799
+            image.srcset = srcset;
3800
+          }
3801
+          if (src) {
3802
+            image.src = src;
3803
+          }
3804
+        } else {
3805
+          onReady();
3806
+        }
3807
+      } else {
3808
+        // image already loaded...
3809
+        onReady();
3810
+      }
3811
+    }
3812
+
3813
+    function preloadImages () {
3814
+      var swiper = this;
3815
+      swiper.imagesToLoad = swiper.$el.find('img');
3816
+      function onReady() {
3817
+        if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }
3818
+        if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }
3819
+        if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
3820
+          if (swiper.params.updateOnImagesReady) { swiper.update(); }
3821
+          swiper.emit('imagesReady');
3822
+        }
3823
+      }
3824
+      for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
3825
+        var imageEl = swiper.imagesToLoad[i];
3826
+        swiper.loadImage(
3827
+          imageEl,
3828
+          imageEl.currentSrc || imageEl.getAttribute('src'),
3829
+          imageEl.srcset || imageEl.getAttribute('srcset'),
3830
+          imageEl.sizes || imageEl.getAttribute('sizes'),
3831
+          true,
3832
+          onReady
3833
+        );
3834
+      }
3835
+    }
3836
+
3837
+    var images = {
3838
+      loadImage: loadImage,
3839
+      preloadImages: preloadImages,
3840
+    };
3841
+
3842
+    function checkOverflow() {
3843
+      var swiper = this;
3844
+      var params = swiper.params;
3845
+      var wasLocked = swiper.isLocked;
3846
+      var lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);
3847
+
3848
+      if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
3849
+        swiper.isLocked = lastSlidePosition <= swiper.size;
3850
+      } else {
3851
+        swiper.isLocked = swiper.snapGrid.length === 1;
3852
+      }
3853
+
3854
+      swiper.allowSlideNext = !swiper.isLocked;
3855
+      swiper.allowSlidePrev = !swiper.isLocked;
3856
+
3857
+      // events
3858
+      if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }
3859
+
3860
+      if (wasLocked && wasLocked !== swiper.isLocked) {
3861
+        swiper.isEnd = false;
3862
+        swiper.navigation.update();
3863
+      }
3864
+    }
3865
+
3866
+    var checkOverflow$1 = { checkOverflow: checkOverflow };
3867
+
3868
+    var defaults = {
3869
+      init: true,
3870
+      direction: 'horizontal',
3871
+      touchEventsTarget: 'container',
3872
+      initialSlide: 0,
3873
+      speed: 300,
3874
+      cssMode: false,
3875
+      updateOnWindowResize: true,
3876
+      //
3877
+      preventInteractionOnTransition: false,
3878
+
3879
+      // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
3880
+      edgeSwipeDetection: false,
3881
+      edgeSwipeThreshold: 20,
3882
+
3883
+      // Free mode
3884
+      freeMode: false,
3885
+      freeModeMomentum: true,
3886
+      freeModeMomentumRatio: 1,
3887
+      freeModeMomentumBounce: true,
3888
+      freeModeMomentumBounceRatio: 1,
3889
+      freeModeMomentumVelocityRatio: 1,
3890
+      freeModeSticky: false,
3891
+      freeModeMinimumVelocity: 0.02,
3892
+
3893
+      // Autoheight
3894
+      autoHeight: false,
3895
+
3896
+      // Set wrapper width
3897
+      setWrapperSize: false,
3898
+
3899
+      // Virtual Translate
3900
+      virtualTranslate: false,
3901
+
3902
+      // Effects
3903
+      effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
3904
+
3905
+      // Breakpoints
3906
+      breakpoints: undefined,
3907
+
3908
+      // Slides grid
3909
+      spaceBetween: 0,
3910
+      slidesPerView: 1,
3911
+      slidesPerColumn: 1,
3912
+      slidesPerColumnFill: 'column',
3913
+      slidesPerGroup: 1,
3914
+      slidesPerGroupSkip: 0,
3915
+      centeredSlides: false,
3916
+      centeredSlidesBounds: false,
3917
+      slidesOffsetBefore: 0, // in px
3918
+      slidesOffsetAfter: 0, // in px
3919
+      normalizeSlideIndex: true,
3920
+      centerInsufficientSlides: false,
3921
+
3922
+      // Disable swiper and hide navigation when container not overflow
3923
+      watchOverflow: false,
3924
+
3925
+      // Round length
3926
+      roundLengths: false,
3927
+
3928
+      // Touches
3929
+      touchRatio: 1,
3930
+      touchAngle: 45,
3931
+      simulateTouch: true,
3932
+      shortSwipes: true,
3933
+      longSwipes: true,
3934
+      longSwipesRatio: 0.5,
3935
+      longSwipesMs: 300,
3936
+      followFinger: true,
3937
+      allowTouchMove: true,
3938
+      threshold: 0,
3939
+      touchMoveStopPropagation: false,
3940
+      touchStartPreventDefault: true,
3941
+      touchStartForcePreventDefault: false,
3942
+      touchReleaseOnEdges: false,
3943
+
3944
+      // Unique Navigation Elements
3945
+      uniqueNavElements: true,
3946
+
3947
+      // Resistance
3948
+      resistance: true,
3949
+      resistanceRatio: 0.85,
3950
+
3951
+      // Progress
3952
+      watchSlidesProgress: false,
3953
+      watchSlidesVisibility: false,
3954
+
3955
+      // Cursor
3956
+      grabCursor: false,
3957
+
3958
+      // Clicks
3959
+      preventClicks: true,
3960
+      preventClicksPropagation: true,
3961
+      slideToClickedSlide: false,
3962
+
3963
+      // Images
3964
+      preloadImages: true,
3965
+      updateOnImagesReady: true,
3966
+
3967
+      // loop
3968
+      loop: false,
3969
+      loopAdditionalSlides: 0,
3970
+      loopedSlides: null,
3971
+      loopFillGroupWithBlank: false,
3972
+
3973
+      // Swiping/no swiping
3974
+      allowSlidePrev: true,
3975
+      allowSlideNext: true,
3976
+      swipeHandler: null, // '.swipe-handler',
3977
+      noSwiping: true,
3978
+      noSwipingClass: 'swiper-no-swiping',
3979
+      noSwipingSelector: null,
3980
+
3981
+      // Passive Listeners
3982
+      passiveListeners: true,
3983
+
3984
+      // NS
3985
+      containerModifierClass: 'swiper-container-', // NEW
3986
+      slideClass: 'swiper-slide',
3987
+      slideBlankClass: 'swiper-slide-invisible-blank',
3988
+      slideActiveClass: 'swiper-slide-active',
3989
+      slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
3990
+      slideVisibleClass: 'swiper-slide-visible',
3991
+      slideDuplicateClass: 'swiper-slide-duplicate',
3992
+      slideNextClass: 'swiper-slide-next',
3993
+      slideDuplicateNextClass: 'swiper-slide-duplicate-next',
3994
+      slidePrevClass: 'swiper-slide-prev',
3995
+      slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
3996
+      wrapperClass: 'swiper-wrapper',
3997
+
3998
+      // Callbacks
3999
+      runCallbacksOnInit: true,
4000
+    };
4001
+
4002
+    /* eslint no-param-reassign: "off" */
4003
+
4004
+    var prototypes = {
4005
+      update: update,
4006
+      translate: translate,
4007
+      transition: transition$1,
4008
+      slide: slide,
4009
+      loop: loop,
4010
+      grabCursor: grabCursor,
4011
+      manipulation: manipulation,
4012
+      events: events,
4013
+      breakpoints: breakpoints,
4014
+      checkOverflow: checkOverflow$1,
4015
+      classes: classes,
4016
+      images: images,
4017
+    };
4018
+
4019
+    var extendedDefaults = {};
4020
+
4021
+    var Swiper = /*@__PURE__*/(function (SwiperClass) {
4022
+      function Swiper() {
4023
+        var assign;
4024
+
4025
+        var args = [], len = arguments.length;
4026
+        while ( len-- ) args[ len ] = arguments[ len ];
4027
+        var el;
4028
+        var params;
4029
+        if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
4030
+          params = args[0];
4031
+        } else {
4032
+          (assign = args, el = assign[0], params = assign[1]);
4033
+        }
4034
+        if (!params) { params = {}; }
4035
+
4036
+        params = Utils.extend({}, params);
4037
+        if (el && !params.el) { params.el = el; }
4038
+
4039
+        SwiperClass.call(this, params);
4040
+
4041
+        Object.keys(prototypes).forEach(function (prototypeGroup) {
4042
+          Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
4043
+            if (!Swiper.prototype[protoMethod]) {
4044
+              Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
4045
+            }
4046
+          });
4047
+        });
4048
+
4049
+        // Swiper Instance
4050
+        var swiper = this;
4051
+        if (typeof swiper.modules === 'undefined') {
4052
+          swiper.modules = {};
4053
+        }
4054
+        Object.keys(swiper.modules).forEach(function (moduleName) {
4055
+          var module = swiper.modules[moduleName];
4056
+          if (module.params) {
4057
+            var moduleParamName = Object.keys(module.params)[0];
4058
+            var moduleParams = module.params[moduleParamName];
4059
+            if (typeof moduleParams !== 'object' || moduleParams === null) { return; }
4060
+            if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }
4061
+            if (params[moduleParamName] === true) {
4062
+              params[moduleParamName] = { enabled: true };
4063
+            }
4064
+            if (
4065
+              typeof params[moduleParamName] === 'object'
4066
+              && !('enabled' in params[moduleParamName])
4067
+            ) {
4068
+              params[moduleParamName].enabled = true;
4069
+            }
4070
+            if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }
4071
+          }
4072
+        });
4073
+
4074
+        // Extend defaults with modules params
4075
+        var swiperParams = Utils.extend({}, defaults);
4076
+        swiper.useModulesParams(swiperParams);
4077
+
4078
+        // Extend defaults with passed params
4079
+        swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
4080
+        swiper.originalParams = Utils.extend({}, swiper.params);
4081
+        swiper.passedParams = Utils.extend({}, params);
4082
+
4083
+        // Save Dom lib
4084
+        swiper.$ = $;
4085
+
4086
+        // Find el
4087
+        var $el = $(swiper.params.el);
4088
+        el = $el[0];
4089
+
4090
+        if (!el) {
4091
+          return undefined;
4092
+        }
4093
+
4094
+        if ($el.length > 1) {
4095
+          var swipers = [];
4096
+          $el.each(function (index, containerEl) {
4097
+            var newParams = Utils.extend({}, params, { el: containerEl });
4098
+            swipers.push(new Swiper(newParams));
4099
+          });
4100
+          return swipers;
4101
+        }
4102
+
4103
+        el.swiper = swiper;
4104
+        $el.data('swiper', swiper);
4105
+
4106
+        // Find Wrapper
4107
+        var $wrapperEl;
4108
+        if (el && el.shadowRoot && el.shadowRoot.querySelector) {
4109
+          $wrapperEl = $(el.shadowRoot.querySelector(("." + (swiper.params.wrapperClass))));
4110
+          // Children needs to return slot items
4111
+          $wrapperEl.children = function (options) { return $el.children(options); };
4112
+        } else {
4113
+          $wrapperEl = $el.children(("." + (swiper.params.wrapperClass)));
4114
+        }
4115
+        // Extend Swiper
4116
+        Utils.extend(swiper, {
4117
+          $el: $el,
4118
+          el: el,
4119
+          $wrapperEl: $wrapperEl,
4120
+          wrapperEl: $wrapperEl[0],
4121
+
4122
+          // Classes
4123
+          classNames: [],
4124
+
4125
+          // Slides
4126
+          slides: $(),
4127
+          slidesGrid: [],
4128
+          snapGrid: [],
4129
+          slidesSizesGrid: [],
4130
+
4131
+          // isDirection
4132
+          isHorizontal: function isHorizontal() {
4133
+            return swiper.params.direction === 'horizontal';
4134
+          },
4135
+          isVertical: function isVertical() {
4136
+            return swiper.params.direction === 'vertical';
4137
+          },
4138
+          // RTL
4139
+          rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
4140
+          rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
4141
+          wrongRTL: $wrapperEl.css('display') === '-webkit-box',
4142
+
4143
+          // Indexes
4144
+          activeIndex: 0,
4145
+          realIndex: 0,
4146
+
4147
+          //
4148
+          isBeginning: true,
4149
+          isEnd: false,
4150
+
4151
+          // Props
4152
+          translate: 0,
4153
+          previousTranslate: 0,
4154
+          progress: 0,
4155
+          velocity: 0,
4156
+          animating: false,
4157
+
4158
+          // Locks
4159
+          allowSlideNext: swiper.params.allowSlideNext,
4160
+          allowSlidePrev: swiper.params.allowSlidePrev,
4161
+
4162
+          // Touch Events
4163
+          touchEvents: (function touchEvents() {
4164
+            var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
4165
+            var desktop = ['mousedown', 'mousemove', 'mouseup'];
4166
+            if (Support.pointerEvents) {
4167
+              desktop = ['pointerdown', 'pointermove', 'pointerup'];
4168
+            }
4169
+            swiper.touchEventsTouch = {
4170
+              start: touch[0],
4171
+              move: touch[1],
4172
+              end: touch[2],
4173
+              cancel: touch[3],
4174
+            };
4175
+            swiper.touchEventsDesktop = {
4176
+              start: desktop[0],
4177
+              move: desktop[1],
4178
+              end: desktop[2],
4179
+            };
4180
+            return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
4181
+          }()),
4182
+          touchEventsData: {
4183
+            isTouched: undefined,
4184
+            isMoved: undefined,
4185
+            allowTouchCallbacks: undefined,
4186
+            touchStartTime: undefined,
4187
+            isScrolling: undefined,
4188
+            currentTranslate: undefined,
4189
+            startTranslate: undefined,
4190
+            allowThresholdMove: undefined,
4191
+            // Form elements to match
4192
+            formElements: 'input, select, option, textarea, button, video, label',
4193
+            // Last click time
4194
+            lastClickTime: Utils.now(),
4195
+            clickTimeout: undefined,
4196
+            // Velocities
4197
+            velocities: [],
4198
+            allowMomentumBounce: undefined,
4199
+            isTouchEvent: undefined,
4200
+            startMoving: undefined,
4201
+          },
4202
+
4203
+          // Clicks
4204
+          allowClick: true,
4205
+
4206
+          // Touches
4207
+          allowTouchMove: swiper.params.allowTouchMove,
4208
+
4209
+          touches: {
4210
+            startX: 0,
4211
+            startY: 0,
4212
+            currentX: 0,
4213
+            currentY: 0,
4214
+            diff: 0,
4215
+          },
4216
+
4217
+          // Images
4218
+          imagesToLoad: [],
4219
+          imagesLoaded: 0,
4220
+
4221
+        });
4222
+
4223
+        // Install Modules
4224
+        swiper.useModules();
4225
+
4226
+        // Init
4227
+        if (swiper.params.init) {
4228
+          swiper.init();
4229
+        }
4230
+
4231
+        // Return app instance
4232
+        return swiper;
4233
+      }
4234
+
4235
+      if ( SwiperClass ) Swiper.__proto__ = SwiperClass;
4236
+      Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );
4237
+      Swiper.prototype.constructor = Swiper;
4238
+
4239
+      var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };
4240
+
4241
+      Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {
4242
+        var swiper = this;
4243
+        var params = swiper.params;
4244
+        var slides = swiper.slides;
4245
+        var slidesGrid = swiper.slidesGrid;
4246
+        var swiperSize = swiper.size;
4247
+        var activeIndex = swiper.activeIndex;
4248
+        var spv = 1;
4249
+        if (params.centeredSlides) {
4250
+          var slideSize = slides[activeIndex].swiperSlideSize;
4251
+          var breakLoop;
4252
+          for (var i = activeIndex + 1; i < slides.length; i += 1) {
4253
+            if (slides[i] && !breakLoop) {
4254
+              slideSize += slides[i].swiperSlideSize;
4255
+              spv += 1;
4256
+              if (slideSize > swiperSize) { breakLoop = true; }
4257
+            }
4258
+          }
4259
+          for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {
4260
+            if (slides[i$1] && !breakLoop) {
4261
+              slideSize += slides[i$1].swiperSlideSize;
4262
+              spv += 1;
4263
+              if (slideSize > swiperSize) { breakLoop = true; }
4264
+            }
4265
+          }
4266
+        } else {
4267
+          for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {
4268
+            if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {
4269
+              spv += 1;
4270
+            }
4271
+          }
4272
+        }
4273
+        return spv;
4274
+      };
4275
+
4276
+      Swiper.prototype.update = function update () {
4277
+        var swiper = this;
4278
+        if (!swiper || swiper.destroyed) { return; }
4279
+        var snapGrid = swiper.snapGrid;
4280
+        var params = swiper.params;
4281
+        // Breakpoints
4282
+        if (params.breakpoints) {
4283
+          swiper.setBreakpoint();
4284
+        }
4285
+        swiper.updateSize();
4286
+        swiper.updateSlides();
4287
+        swiper.updateProgress();
4288
+        swiper.updateSlidesClasses();
4289
+
4290
+        function setTranslate() {
4291
+          var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
4292
+          var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
4293
+          swiper.setTranslate(newTranslate);
4294
+          swiper.updateActiveIndex();
4295
+          swiper.updateSlidesClasses();
4296
+        }
4297
+        var translated;
4298
+        if (swiper.params.freeMode) {
4299
+          setTranslate();
4300
+          if (swiper.params.autoHeight) {
4301
+            swiper.updateAutoHeight();
4302
+          }
4303
+        } else {
4304
+          if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
4305
+            translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
4306
+          } else {
4307
+            translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
4308
+          }
4309
+          if (!translated) {
4310
+            setTranslate();
4311
+          }
4312
+        }
4313
+        if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
4314
+          swiper.checkOverflow();
4315
+        }
4316
+        swiper.emit('update');
4317
+      };
4318
+
4319
+      Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {
4320
+        if ( needUpdate === void 0 ) needUpdate = true;
4321
+
4322
+        var swiper = this;
4323
+        var currentDirection = swiper.params.direction;
4324
+        if (!newDirection) {
4325
+          // eslint-disable-next-line
4326
+          newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
4327
+        }
4328
+        if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
4329
+          return swiper;
4330
+        }
4331
+
4332
+        swiper.$el
4333
+          .removeClass(("" + (swiper.params.containerModifierClass) + currentDirection))
4334
+          .addClass(("" + (swiper.params.containerModifierClass) + newDirection));
4335
+
4336
+        swiper.params.direction = newDirection;
4337
+
4338
+        swiper.slides.each(function (slideIndex, slideEl) {
4339
+          if (newDirection === 'vertical') {
4340
+            slideEl.style.width = '';
4341
+          } else {
4342
+            slideEl.style.height = '';
4343
+          }
4344
+        });
4345
+
4346
+        swiper.emit('changeDirection');
4347
+        if (needUpdate) { swiper.update(); }
4348
+
4349
+        return swiper;
4350
+      };
4351
+
4352
+      Swiper.prototype.init = function init () {
4353
+        var swiper = this;
4354
+        if (swiper.initialized) { return; }
4355
+
4356
+        swiper.emit('beforeInit');
4357
+
4358
+        // Set breakpoint
4359
+        if (swiper.params.breakpoints) {
4360
+          swiper.setBreakpoint();
4361
+        }
4362
+
4363
+        // Add Classes
4364
+        swiper.addClasses();
4365
+
4366
+        // Create loop
4367
+        if (swiper.params.loop) {
4368
+          swiper.loopCreate();
4369
+        }
4370
+
4371
+        // Update size
4372
+        swiper.updateSize();
4373
+
4374
+        // Update slides
4375
+        swiper.updateSlides();
4376
+
4377
+        if (swiper.params.watchOverflow) {
4378
+          swiper.checkOverflow();
4379
+        }
4380
+
4381
+        // Set Grab Cursor
4382
+        if (swiper.params.grabCursor) {
4383
+          swiper.setGrabCursor();
4384
+        }
4385
+
4386
+        if (swiper.params.preloadImages) {
4387
+          swiper.preloadImages();
4388
+        }
4389
+
4390
+        // Slide To Initial Slide
4391
+        if (swiper.params.loop) {
4392
+          swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
4393
+        } else {
4394
+          swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
4395
+        }
4396
+
4397
+        // Attach events
4398
+        swiper.attachEvents();
4399
+
4400
+        // Init Flag
4401
+        swiper.initialized = true;
4402
+
4403
+        // Emit
4404
+        swiper.emit('init');
4405
+      };
4406
+
4407
+      Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {
4408
+        if ( deleteInstance === void 0 ) deleteInstance = true;
4409
+        if ( cleanStyles === void 0 ) cleanStyles = true;
4410
+
4411
+        var swiper = this;
4412
+        var params = swiper.params;
4413
+        var $el = swiper.$el;
4414
+        var $wrapperEl = swiper.$wrapperEl;
4415
+        var slides = swiper.slides;
4416
+
4417
+        if (typeof swiper.params === 'undefined' || swiper.destroyed) {
4418
+          return null;
4419
+        }
4420
+
4421
+        swiper.emit('beforeDestroy');
4422
+
4423
+        // Init Flag
4424
+        swiper.initialized = false;
4425
+
4426
+        // Detach events
4427
+        swiper.detachEvents();
4428
+
4429
+        // Destroy loop
4430
+        if (params.loop) {
4431
+          swiper.loopDestroy();
4432
+        }
4433
+
4434
+        // Cleanup styles
4435
+        if (cleanStyles) {
4436
+          swiper.removeClasses();
4437
+          $el.removeAttr('style');
4438
+          $wrapperEl.removeAttr('style');
4439
+          if (slides && slides.length) {
4440
+            slides
4441
+              .removeClass([
4442
+                params.slideVisibleClass,
4443
+                params.slideActiveClass,
4444
+                params.slideNextClass,
4445
+                params.slidePrevClass ].join(' '))
4446
+              .removeAttr('style')
4447
+              .removeAttr('data-swiper-slide-index');
4448
+          }
4449
+        }
4450
+
4451
+        swiper.emit('destroy');
4452
+
4453
+        // Detach emitter events
4454
+        Object.keys(swiper.eventsListeners).forEach(function (eventName) {
4455
+          swiper.off(eventName);
4456
+        });
4457
+
4458
+        if (deleteInstance !== false) {
4459
+          swiper.$el[0].swiper = null;
4460
+          swiper.$el.data('swiper', null);
4461
+          Utils.deleteProps(swiper);
4462
+        }
4463
+        swiper.destroyed = true;
4464
+
4465
+        return null;
4466
+      };
4467
+
4468
+      Swiper.extendDefaults = function extendDefaults (newDefaults) {
4469
+        Utils.extend(extendedDefaults, newDefaults);
4470
+      };
4471
+
4472
+      staticAccessors.extendedDefaults.get = function () {
4473
+        return extendedDefaults;
4474
+      };
4475
+
4476
+      staticAccessors.defaults.get = function () {
4477
+        return defaults;
4478
+      };
4479
+
4480
+      staticAccessors.Class.get = function () {
4481
+        return SwiperClass;
4482
+      };
4483
+
4484
+      staticAccessors.$.get = function () {
4485
+        return $;
4486
+      };
4487
+
4488
+      Object.defineProperties( Swiper, staticAccessors );
4489
+
4490
+      return Swiper;
4491
+    }(SwiperClass));
4492
+
4493
+    var Device$1 = {
4494
+      name: 'device',
4495
+      proto: {
4496
+        device: Device,
4497
+      },
4498
+      static: {
4499
+        device: Device,
4500
+      },
4501
+    };
4502
+
4503
+    var Support$1 = {
4504
+      name: 'support',
4505
+      proto: {
4506
+        support: Support,
4507
+      },
4508
+      static: {
4509
+        support: Support,
4510
+      },
4511
+    };
4512
+
4513
+    var Browser = (function Browser() {
4514
+      function isSafari() {
4515
+        var ua = win.navigator.userAgent.toLowerCase();
4516
+        return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
4517
+      }
4518
+      return {
4519
+        isEdge: !!win.navigator.userAgent.match(/Edge/g),
4520
+        isSafari: isSafari(),
4521
+        isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),
4522
+      };
4523
+    }());
4524
+
4525
+    var Browser$1 = {
4526
+      name: 'browser',
4527
+      proto: {
4528
+        browser: Browser,
4529
+      },
4530
+      static: {
4531
+        browser: Browser,
4532
+      },
4533
+    };
4534
+
4535
+    var Resize = {
4536
+      name: 'resize',
4537
+      create: function create() {
4538
+        var swiper = this;
4539
+        Utils.extend(swiper, {
4540
+          resize: {
4541
+            resizeHandler: function resizeHandler() {
4542
+              if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
4543
+              swiper.emit('beforeResize');
4544
+              swiper.emit('resize');
4545
+            },
4546
+            orientationChangeHandler: function orientationChangeHandler() {
4547
+              if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
4548
+              swiper.emit('orientationchange');
4549
+            },
4550
+          },
4551
+        });
4552
+      },
4553
+      on: {
4554
+        init: function init() {
4555
+          var swiper = this;
4556
+          // Emit resize
4557
+          win.addEventListener('resize', swiper.resize.resizeHandler);
4558
+
4559
+          // Emit orientationchange
4560
+          win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
4561
+        },
4562
+        destroy: function destroy() {
4563
+          var swiper = this;
4564
+          win.removeEventListener('resize', swiper.resize.resizeHandler);
4565
+          win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
4566
+        },
4567
+      },
4568
+    };
4569
+
4570
+    var Observer = {
4571
+      func: win.MutationObserver || win.WebkitMutationObserver,
4572
+      attach: function attach(target, options) {
4573
+        if ( options === void 0 ) options = {};
4574
+
4575
+        var swiper = this;
4576
+
4577
+        var ObserverFunc = Observer.func;
4578
+        var observer = new ObserverFunc(function (mutations) {
4579
+          // The observerUpdate event should only be triggered
4580
+          // once despite the number of mutations.  Additional
4581
+          // triggers are redundant and are very costly
4582
+          if (mutations.length === 1) {
4583
+            swiper.emit('observerUpdate', mutations[0]);
4584
+            return;
4585
+          }
4586
+          var observerUpdate = function observerUpdate() {
4587
+            swiper.emit('observerUpdate', mutations[0]);
4588
+          };
4589
+
4590
+          if (win.requestAnimationFrame) {
4591
+            win.requestAnimationFrame(observerUpdate);
4592
+          } else {
4593
+            win.setTimeout(observerUpdate, 0);
4594
+          }
4595
+        });
4596
+
4597
+        observer.observe(target, {
4598
+          attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
4599
+          childList: typeof options.childList === 'undefined' ? true : options.childList,
4600
+          characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
4601
+        });
4602
+
4603
+        swiper.observer.observers.push(observer);
4604
+      },
4605
+      init: function init() {
4606
+        var swiper = this;
4607
+        if (!Support.observer || !swiper.params.observer) { return; }
4608
+        if (swiper.params.observeParents) {
4609
+          var containerParents = swiper.$el.parents();
4610
+          for (var i = 0; i < containerParents.length; i += 1) {
4611
+            swiper.observer.attach(containerParents[i]);
4612
+          }
4613
+        }
4614
+        // Observe container
4615
+        swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });
4616
+
4617
+        // Observe wrapper
4618
+        swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
4619
+      },
4620
+      destroy: function destroy() {
4621
+        var swiper = this;
4622
+        swiper.observer.observers.forEach(function (observer) {
4623
+          observer.disconnect();
4624
+        });
4625
+        swiper.observer.observers = [];
4626
+      },
4627
+    };
4628
+
4629
+    var Observer$1 = {
4630
+      name: 'observer',
4631
+      params: {
4632
+        observer: false,
4633
+        observeParents: false,
4634
+        observeSlideChildren: false,
4635
+      },
4636
+      create: function create() {
4637
+        var swiper = this;
4638
+        Utils.extend(swiper, {
4639
+          observer: {
4640
+            init: Observer.init.bind(swiper),
4641
+            attach: Observer.attach.bind(swiper),
4642
+            destroy: Observer.destroy.bind(swiper),
4643
+            observers: [],
4644
+          },
4645
+        });
4646
+      },
4647
+      on: {
4648
+        init: function init() {
4649
+          var swiper = this;
4650
+          swiper.observer.init();
4651
+        },
4652
+        destroy: function destroy() {
4653
+          var swiper = this;
4654
+          swiper.observer.destroy();
4655
+        },
4656
+      },
4657
+    };
4658
+
4659
+    var Virtual = {
4660
+      update: function update(force) {
4661
+        var swiper = this;
4662
+        var ref = swiper.params;
4663
+        var slidesPerView = ref.slidesPerView;
4664
+        var slidesPerGroup = ref.slidesPerGroup;
4665
+        var centeredSlides = ref.centeredSlides;
4666
+        var ref$1 = swiper.params.virtual;
4667
+        var addSlidesBefore = ref$1.addSlidesBefore;
4668
+        var addSlidesAfter = ref$1.addSlidesAfter;
4669
+        var ref$2 = swiper.virtual;
4670
+        var previousFrom = ref$2.from;
4671
+        var previousTo = ref$2.to;
4672
+        var slides = ref$2.slides;
4673
+        var previousSlidesGrid = ref$2.slidesGrid;
4674
+        var renderSlide = ref$2.renderSlide;
4675
+        var previousOffset = ref$2.offset;
4676
+        swiper.updateActiveIndex();
4677
+        var activeIndex = swiper.activeIndex || 0;
4678
+
4679
+        var offsetProp;
4680
+        if (swiper.rtlTranslate) { offsetProp = 'right'; }
4681
+        else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }
4682
+
4683
+        var slidesAfter;
4684
+        var slidesBefore;
4685
+        if (centeredSlides) {
4686
+          slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
4687
+          slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
4688
+        } else {
4689
+          slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
4690
+          slidesBefore = slidesPerGroup + addSlidesAfter;
4691
+        }
4692
+        var from = Math.max((activeIndex || 0) - slidesBefore, 0);
4693
+        var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
4694
+        var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
4695
+
4696
+        Utils.extend(swiper.virtual, {
4697
+          from: from,
4698
+          to: to,
4699
+          offset: offset,
4700
+          slidesGrid: swiper.slidesGrid,
4701
+        });
4702
+
4703
+        function onRendered() {
4704
+          swiper.updateSlides();
4705
+          swiper.updateProgress();
4706
+          swiper.updateSlidesClasses();
4707
+          if (swiper.lazy && swiper.params.lazy.enabled) {
4708
+            swiper.lazy.load();
4709
+          }
4710
+        }
4711
+
4712
+        if (previousFrom === from && previousTo === to && !force) {
4713
+          if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
4714
+            swiper.slides.css(offsetProp, (offset + "px"));
4715
+          }
4716
+          swiper.updateProgress();
4717
+          return;
4718
+        }
4719
+        if (swiper.params.virtual.renderExternal) {
4720
+          swiper.params.virtual.renderExternal.call(swiper, {
4721
+            offset: offset,
4722
+            from: from,
4723
+            to: to,
4724
+            slides: (function getSlides() {
4725
+              var slidesToRender = [];
4726
+              for (var i = from; i <= to; i += 1) {
4727
+                slidesToRender.push(slides[i]);
4728
+              }
4729
+              return slidesToRender;
4730
+            }()),
4731
+          });
4732
+          onRendered();
4733
+          return;
4734
+        }
4735
+        var prependIndexes = [];
4736
+        var appendIndexes = [];
4737
+        if (force) {
4738
+          swiper.$wrapperEl.find(("." + (swiper.params.slideClass))).remove();
4739
+        } else {
4740
+          for (var i = previousFrom; i <= previousTo; i += 1) {
4741
+            if (i < from || i > to) {
4742
+              swiper.$wrapperEl.find(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + i + "\"]")).remove();
4743
+            }
4744
+          }
4745
+        }
4746
+        for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
4747
+          if (i$1 >= from && i$1 <= to) {
4748
+            if (typeof previousTo === 'undefined' || force) {
4749
+              appendIndexes.push(i$1);
4750
+            } else {
4751
+              if (i$1 > previousTo) { appendIndexes.push(i$1); }
4752
+              if (i$1 < previousFrom) { prependIndexes.push(i$1); }
4753
+            }
4754
+          }
4755
+        }
4756
+        appendIndexes.forEach(function (index) {
4757
+          swiper.$wrapperEl.append(renderSlide(slides[index], index));
4758
+        });
4759
+        prependIndexes.sort(function (a, b) { return b - a; }).forEach(function (index) {
4760
+          swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
4761
+        });
4762
+        swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + "px"));
4763
+        onRendered();
4764
+      },
4765
+      renderSlide: function renderSlide(slide, index) {
4766
+        var swiper = this;
4767
+        var params = swiper.params.virtual;
4768
+        if (params.cache && swiper.virtual.cache[index]) {
4769
+          return swiper.virtual.cache[index];
4770
+        }
4771
+        var $slideEl = params.renderSlide
4772
+          ? $(params.renderSlide.call(swiper, slide, index))
4773
+          : $(("<div class=\"" + (swiper.params.slideClass) + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>"));
4774
+        if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }
4775
+        if (params.cache) { swiper.virtual.cache[index] = $slideEl; }
4776
+        return $slideEl;
4777
+      },
4778
+      appendSlide: function appendSlide(slides) {
4779
+        var swiper = this;
4780
+        if (typeof slides === 'object' && 'length' in slides) {
4781
+          for (var i = 0; i < slides.length; i += 1) {
4782
+            if (slides[i]) { swiper.virtual.slides.push(slides[i]); }
4783
+          }
4784
+        } else {
4785
+          swiper.virtual.slides.push(slides);
4786
+        }
4787
+        swiper.virtual.update(true);
4788
+      },
4789
+      prependSlide: function prependSlide(slides) {
4790
+        var swiper = this;
4791
+        var activeIndex = swiper.activeIndex;
4792
+        var newActiveIndex = activeIndex + 1;
4793
+        var numberOfNewSlides = 1;
4794
+
4795
+        if (Array.isArray(slides)) {
4796
+          for (var i = 0; i < slides.length; i += 1) {
4797
+            if (slides[i]) { swiper.virtual.slides.unshift(slides[i]); }
4798
+          }
4799
+          newActiveIndex = activeIndex + slides.length;
4800
+          numberOfNewSlides = slides.length;
4801
+        } else {
4802
+          swiper.virtual.slides.unshift(slides);
4803
+        }
4804
+        if (swiper.params.virtual.cache) {
4805
+          var cache = swiper.virtual.cache;
4806
+          var newCache = {};
4807
+          Object.keys(cache).forEach(function (cachedIndex) {
4808
+            var $cachedEl = cache[cachedIndex];
4809
+            var cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
4810
+            if (cachedElIndex) {
4811
+              $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
4812
+            }
4813
+            newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
4814
+          });
4815
+          swiper.virtual.cache = newCache;
4816
+        }
4817
+        swiper.virtual.update(true);
4818
+        swiper.slideTo(newActiveIndex, 0);
4819
+      },
4820
+      removeSlide: function removeSlide(slidesIndexes) {
4821
+        var swiper = this;
4822
+        if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) { return; }
4823
+        var activeIndex = swiper.activeIndex;
4824
+        if (Array.isArray(slidesIndexes)) {
4825
+          for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
4826
+            swiper.virtual.slides.splice(slidesIndexes[i], 1);
4827
+            if (swiper.params.virtual.cache) {
4828
+              delete swiper.virtual.cache[slidesIndexes[i]];
4829
+            }
4830
+            if (slidesIndexes[i] < activeIndex) { activeIndex -= 1; }
4831
+            activeIndex = Math.max(activeIndex, 0);
4832
+          }
4833
+        } else {
4834
+          swiper.virtual.slides.splice(slidesIndexes, 1);
4835
+          if (swiper.params.virtual.cache) {
4836
+            delete swiper.virtual.cache[slidesIndexes];
4837
+          }
4838
+          if (slidesIndexes < activeIndex) { activeIndex -= 1; }
4839
+          activeIndex = Math.max(activeIndex, 0);
4840
+        }
4841
+        swiper.virtual.update(true);
4842
+        swiper.slideTo(activeIndex, 0);
4843
+      },
4844
+      removeAllSlides: function removeAllSlides() {
4845
+        var swiper = this;
4846
+        swiper.virtual.slides = [];
4847
+        if (swiper.params.virtual.cache) {
4848
+          swiper.virtual.cache = {};
4849
+        }
4850
+        swiper.virtual.update(true);
4851
+        swiper.slideTo(0, 0);
4852
+      },
4853
+    };
4854
+
4855
+    var Virtual$1 = {
4856
+      name: 'virtual',
4857
+      params: {
4858
+        virtual: {
4859
+          enabled: false,
4860
+          slides: [],
4861
+          cache: true,
4862
+          renderSlide: null,
4863
+          renderExternal: null,
4864
+          addSlidesBefore: 0,
4865
+          addSlidesAfter: 0,
4866
+        },
4867
+      },
4868
+      create: function create() {
4869
+        var swiper = this;
4870
+        Utils.extend(swiper, {
4871
+          virtual: {
4872
+            update: Virtual.update.bind(swiper),
4873
+            appendSlide: Virtual.appendSlide.bind(swiper),
4874
+            prependSlide: Virtual.prependSlide.bind(swiper),
4875
+            removeSlide: Virtual.removeSlide.bind(swiper),
4876
+            removeAllSlides: Virtual.removeAllSlides.bind(swiper),
4877
+            renderSlide: Virtual.renderSlide.bind(swiper),
4878
+            slides: swiper.params.virtual.slides,
4879
+            cache: {},
4880
+          },
4881
+        });
4882
+      },
4883
+      on: {
4884
+        beforeInit: function beforeInit() {
4885
+          var swiper = this;
4886
+          if (!swiper.params.virtual.enabled) { return; }
4887
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "virtual"));
4888
+          var overwriteParams = {
4889
+            watchSlidesProgress: true,
4890
+          };
4891
+          Utils.extend(swiper.params, overwriteParams);
4892
+          Utils.extend(swiper.originalParams, overwriteParams);
4893
+
4894
+          if (!swiper.params.initialSlide) {
4895
+            swiper.virtual.update();
4896
+          }
4897
+        },
4898
+        setTranslate: function setTranslate() {
4899
+          var swiper = this;
4900
+          if (!swiper.params.virtual.enabled) { return; }
4901
+          swiper.virtual.update();
4902
+        },
4903
+      },
4904
+    };
4905
+
4906
+    var Keyboard = {
4907
+      handle: function handle(event) {
4908
+        var swiper = this;
4909
+        var rtl = swiper.rtlTranslate;
4910
+        var e = event;
4911
+        if (e.originalEvent) { e = e.originalEvent; } // jquery fix
4912
+        var kc = e.keyCode || e.charCode;
4913
+        // Directions locks
4914
+        if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {
4915
+          return false;
4916
+        }
4917
+        if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {
4918
+          return false;
4919
+        }
4920
+        if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
4921
+          return undefined;
4922
+        }
4923
+        if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
4924
+          return undefined;
4925
+        }
4926
+        if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
4927
+          var inView = false;
4928
+          // Check that swiper should be inside of visible area of window
4929
+          if (swiper.$el.parents(("." + (swiper.params.slideClass))).length > 0 && swiper.$el.parents(("." + (swiper.params.slideActiveClass))).length === 0) {
4930
+            return undefined;
4931
+          }
4932
+          var windowWidth = win.innerWidth;
4933
+          var windowHeight = win.innerHeight;
4934
+          var swiperOffset = swiper.$el.offset();
4935
+          if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }
4936
+          var swiperCoord = [
4937
+            [swiperOffset.left, swiperOffset.top],
4938
+            [swiperOffset.left + swiper.width, swiperOffset.top],
4939
+            [swiperOffset.left, swiperOffset.top + swiper.height],
4940
+            [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];
4941
+          for (var i = 0; i < swiperCoord.length; i += 1) {
4942
+            var point = swiperCoord[i];
4943
+            if (
4944
+              point[0] >= 0 && point[0] <= windowWidth
4945
+              && point[1] >= 0 && point[1] <= windowHeight
4946
+            ) {
4947
+              inView = true;
4948
+            }
4949
+          }
4950
+          if (!inView) { return undefined; }
4951
+        }
4952
+        if (swiper.isHorizontal()) {
4953
+          if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
4954
+            if (e.preventDefault) { e.preventDefault(); }
4955
+            else { e.returnValue = false; }
4956
+          }
4957
+          if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) { swiper.slideNext(); }
4958
+          if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) { swiper.slidePrev(); }
4959
+        } else {
4960
+          if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
4961
+            if (e.preventDefault) { e.preventDefault(); }
4962
+            else { e.returnValue = false; }
4963
+          }
4964
+          if (kc === 34 || kc === 40) { swiper.slideNext(); }
4965
+          if (kc === 33 || kc === 38) { swiper.slidePrev(); }
4966
+        }
4967
+        swiper.emit('keyPress', kc);
4968
+        return undefined;
4969
+      },
4970
+      enable: function enable() {
4971
+        var swiper = this;
4972
+        if (swiper.keyboard.enabled) { return; }
4973
+        $(doc).on('keydown', swiper.keyboard.handle);
4974
+        swiper.keyboard.enabled = true;
4975
+      },
4976
+      disable: function disable() {
4977
+        var swiper = this;
4978
+        if (!swiper.keyboard.enabled) { return; }
4979
+        $(doc).off('keydown', swiper.keyboard.handle);
4980
+        swiper.keyboard.enabled = false;
4981
+      },
4982
+    };
4983
+
4984
+    var Keyboard$1 = {
4985
+      name: 'keyboard',
4986
+      params: {
4987
+        keyboard: {
4988
+          enabled: false,
4989
+          onlyInViewport: true,
4990
+        },
4991
+      },
4992
+      create: function create() {
4993
+        var swiper = this;
4994
+        Utils.extend(swiper, {
4995
+          keyboard: {
4996
+            enabled: false,
4997
+            enable: Keyboard.enable.bind(swiper),
4998
+            disable: Keyboard.disable.bind(swiper),
4999
+            handle: Keyboard.handle.bind(swiper),
5000
+          },
5001
+        });
5002
+      },
5003
+      on: {
5004
+        init: function init() {
5005
+          var swiper = this;
5006
+          if (swiper.params.keyboard.enabled) {
5007
+            swiper.keyboard.enable();
5008
+          }
5009
+        },
5010
+        destroy: function destroy() {
5011
+          var swiper = this;
5012
+          if (swiper.keyboard.enabled) {
5013
+            swiper.keyboard.disable();
5014
+          }
5015
+        },
5016
+      },
5017
+    };
5018
+
5019
+    function isEventSupported() {
5020
+      var eventName = 'onwheel';
5021
+      var isSupported = eventName in doc;
5022
+
5023
+      if (!isSupported) {
5024
+        var element = doc.createElement('div');
5025
+        element.setAttribute(eventName, 'return;');
5026
+        isSupported = typeof element[eventName] === 'function';
5027
+      }
5028
+
5029
+      if (!isSupported
5030
+        && doc.implementation
5031
+        && doc.implementation.hasFeature
5032
+        // always returns true in newer browsers as per the standard.
5033
+        // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
5034
+        && doc.implementation.hasFeature('', '') !== true
5035
+      ) {
5036
+        // This is the only way to test support for the `wheel` event in IE9+.
5037
+        isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
5038
+      }
5039
+
5040
+      return isSupported;
5041
+    }
5042
+    var Mousewheel = {
5043
+      lastScrollTime: Utils.now(),
5044
+      lastEventBeforeSnap: undefined,
5045
+      recentWheelEvents: [],
5046
+      event: function event() {
5047
+        if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }
5048
+        return isEventSupported() ? 'wheel' : 'mousewheel';
5049
+      },
5050
+      normalize: function normalize(e) {
5051
+        // Reasonable defaults
5052
+        var PIXEL_STEP = 10;
5053
+        var LINE_HEIGHT = 40;
5054
+        var PAGE_HEIGHT = 800;
5055
+
5056
+        var sX = 0;
5057
+        var sY = 0; // spinX, spinY
5058
+        var pX = 0;
5059
+        var pY = 0; // pixelX, pixelY
5060
+
5061
+        // Legacy
5062
+        if ('detail' in e) {
5063
+          sY = e.detail;
5064
+        }
5065
+        if ('wheelDelta' in e) {
5066
+          sY = -e.wheelDelta / 120;
5067
+        }
5068
+        if ('wheelDeltaY' in e) {
5069
+          sY = -e.wheelDeltaY / 120;
5070
+        }
5071
+        if ('wheelDeltaX' in e) {
5072
+          sX = -e.wheelDeltaX / 120;
5073
+        }
5074
+
5075
+        // side scrolling on FF with DOMMouseScroll
5076
+        if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
5077
+          sX = sY;
5078
+          sY = 0;
5079
+        }
5080
+
5081
+        pX = sX * PIXEL_STEP;
5082
+        pY = sY * PIXEL_STEP;
5083
+
5084
+        if ('deltaY' in e) {
5085
+          pY = e.deltaY;
5086
+        }
5087
+        if ('deltaX' in e) {
5088
+          pX = e.deltaX;
5089
+        }
5090
+
5091
+        if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
5092
+          pX = pY;
5093
+          pY = 0;
5094
+        }
5095
+
5096
+        if ((pX || pY) && e.deltaMode) {
5097
+          if (e.deltaMode === 1) { // delta in LINE units
5098
+            pX *= LINE_HEIGHT;
5099
+            pY *= LINE_HEIGHT;
5100
+          } else { // delta in PAGE units
5101
+            pX *= PAGE_HEIGHT;
5102
+            pY *= PAGE_HEIGHT;
5103
+          }
5104
+        }
5105
+
5106
+        // Fall-back if spin cannot be determined
5107
+        if (pX && !sX) {
5108
+          sX = (pX < 1) ? -1 : 1;
5109
+        }
5110
+        if (pY && !sY) {
5111
+          sY = (pY < 1) ? -1 : 1;
5112
+        }
5113
+
5114
+        return {
5115
+          spinX: sX,
5116
+          spinY: sY,
5117
+          pixelX: pX,
5118
+          pixelY: pY,
5119
+        };
5120
+      },
5121
+      handleMouseEnter: function handleMouseEnter() {
5122
+        var swiper = this;
5123
+        swiper.mouseEntered = true;
5124
+      },
5125
+      handleMouseLeave: function handleMouseLeave() {
5126
+        var swiper = this;
5127
+        swiper.mouseEntered = false;
5128
+      },
5129
+      handle: function handle(event) {
5130
+        var e = event;
5131
+        var swiper = this;
5132
+        var params = swiper.params.mousewheel;
5133
+
5134
+        if (swiper.params.cssMode) {
5135
+          e.preventDefault();
5136
+        }
5137
+
5138
+        var target = swiper.$el;
5139
+        if (swiper.params.mousewheel.eventsTarged !== 'container') {
5140
+          target = $(swiper.params.mousewheel.eventsTarged);
5141
+        }
5142
+        if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) { return true; }
5143
+
5144
+        if (e.originalEvent) { e = e.originalEvent; } // jquery fix
5145
+        var delta = 0;
5146
+        var rtlFactor = swiper.rtlTranslate ? -1 : 1;
5147
+
5148
+        var data = Mousewheel.normalize(e);
5149
+
5150
+        if (params.forceToAxis) {
5151
+          if (swiper.isHorizontal()) {
5152
+            if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }
5153
+            else { return true; }
5154
+          } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }
5155
+          else { return true; }
5156
+        } else {
5157
+          delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
5158
+        }
5159
+
5160
+        if (delta === 0) { return true; }
5161
+
5162
+        if (params.invert) { delta = -delta; }
5163
+
5164
+        if (!swiper.params.freeMode) {
5165
+          // Register the new event in a variable which stores the relevant data
5166
+          var newEvent = {
5167
+            time: Utils.now(),
5168
+            delta: Math.abs(delta),
5169
+            direction: Math.sign(delta),
5170
+            raw: event,
5171
+          };
5172
+
5173
+          // Keep the most recent events
5174
+          var recentWheelEvents = swiper.mousewheel.recentWheelEvents;
5175
+          if (recentWheelEvents.length >= 2) {
5176
+            recentWheelEvents.shift(); // only store the last N events
5177
+          }
5178
+          var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
5179
+          recentWheelEvents.push(newEvent);
5180
+
5181
+          // If there is at least one previous recorded event:
5182
+          //   If direction has changed or
5183
+          //   if the scroll is quicker than the previous one:
5184
+          //     Animate the slider.
5185
+          // Else (this is the first time the wheel is moved):
5186
+          //     Animate the slider.
5187
+          if (prevEvent) {
5188
+            if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
5189
+              swiper.mousewheel.animateSlider(newEvent);
5190
+            }
5191
+          } else {
5192
+            swiper.mousewheel.animateSlider(newEvent);
5193
+          }
5194
+
5195
+          // If it's time to release the scroll:
5196
+          //   Return now so you don't hit the preventDefault.
5197
+          if (swiper.mousewheel.releaseScroll(newEvent)) {
5198
+            return true;
5199
+          }
5200
+        } else {
5201
+          // Freemode or scrollContainer:
5202
+
5203
+          // If we recently snapped after a momentum scroll, then ignore wheel events
5204
+          // to give time for the deceleration to finish. Stop ignoring after 500 msecs
5205
+          // or if it's a new scroll (larger delta or inverse sign as last event before
5206
+          // an end-of-momentum snap).
5207
+          var newEvent$1 = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
5208
+          var ref = swiper.mousewheel;
5209
+          var lastEventBeforeSnap = ref.lastEventBeforeSnap;
5210
+          var ignoreWheelEvents = lastEventBeforeSnap
5211
+            && newEvent$1.time < lastEventBeforeSnap.time + 500
5212
+            && newEvent$1.delta <= lastEventBeforeSnap.delta
5213
+            && newEvent$1.direction === lastEventBeforeSnap.direction;
5214
+          if (!ignoreWheelEvents) {
5215
+            swiper.mousewheel.lastEventBeforeSnap = undefined;
5216
+
5217
+            if (swiper.params.loop) {
5218
+              swiper.loopFix();
5219
+            }
5220
+            var position = swiper.getTranslate() + (delta * params.sensitivity);
5221
+            var wasBeginning = swiper.isBeginning;
5222
+            var wasEnd = swiper.isEnd;
5223
+
5224
+            if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }
5225
+            if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }
5226
+
5227
+            swiper.setTransition(0);
5228
+            swiper.setTranslate(position);
5229
+            swiper.updateProgress();
5230
+            swiper.updateActiveIndex();
5231
+            swiper.updateSlidesClasses();
5232
+
5233
+            if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
5234
+              swiper.updateSlidesClasses();
5235
+            }
5236
+
5237
+            if (swiper.params.freeModeSticky) {
5238
+              // When wheel scrolling starts with sticky (aka snap) enabled, then detect
5239
+              // the end of a momentum scroll by storing recent (N=15?) wheel events.
5240
+              // 1. do all N events have decreasing or same (absolute value) delta?
5241
+              // 2. did all N events arrive in the last M (M=500?) msecs?
5242
+              // 3. does the earliest event have an (absolute value) delta that's
5243
+              //    at least P (P=1?) larger than the most recent event's delta?
5244
+              // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
5245
+              // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
5246
+              // Snap immediately and ignore remaining wheel events in this scroll.
5247
+              // See comment above for "remaining wheel events in this scroll" determination.
5248
+              // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
5249
+              clearTimeout(swiper.mousewheel.timeout);
5250
+              swiper.mousewheel.timeout = undefined;
5251
+              var recentWheelEvents$1 = swiper.mousewheel.recentWheelEvents;
5252
+              if (recentWheelEvents$1.length >= 15) {
5253
+                recentWheelEvents$1.shift(); // only store the last N events
5254
+              }
5255
+              var prevEvent$1 = recentWheelEvents$1.length ? recentWheelEvents$1[recentWheelEvents$1.length - 1] : undefined;
5256
+              var firstEvent = recentWheelEvents$1[0];
5257
+              recentWheelEvents$1.push(newEvent$1);
5258
+              if (prevEvent$1 && (newEvent$1.delta > prevEvent$1.delta || newEvent$1.direction !== prevEvent$1.direction)) {
5259
+                // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
5260
+                recentWheelEvents$1.splice(0);
5261
+              } else if (recentWheelEvents$1.length >= 15
5262
+                  && newEvent$1.time - firstEvent.time < 500
5263
+                  && firstEvent.delta - newEvent$1.delta >= 1
5264
+                  && newEvent$1.delta <= 6
5265
+              ) {
5266
+                // We're at the end of the deceleration of a momentum scroll, so there's no need
5267
+                // to wait for more events. Snap ASAP on the next tick.
5268
+                // Also, because there's some remaining momentum we'll bias the snap in the
5269
+                // direction of the ongoing scroll because it's better UX for the scroll to snap
5270
+                // in the same direction as the scroll instead of reversing to snap.  Therefore,
5271
+                // if it's already scrolled more than 20% in the current direction, keep going.
5272
+                var snapToThreshold = delta > 0 ? 0.8 : 0.2;
5273
+                swiper.mousewheel.lastEventBeforeSnap = newEvent$1;
5274
+                recentWheelEvents$1.splice(0);
5275
+                swiper.mousewheel.timeout = Utils.nextTick(function () {
5276
+                  swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5277
+                }, 0); // no delay; move on next tick
5278
+              }
5279
+              if (!swiper.mousewheel.timeout) {
5280
+                // if we get here, then we haven't detected the end of a momentum scroll, so
5281
+                // we'll consider a scroll "complete" when there haven't been any wheel events
5282
+                // for 500ms.
5283
+                swiper.mousewheel.timeout = Utils.nextTick(function () {
5284
+                  var snapToThreshold = 0.5;
5285
+                  swiper.mousewheel.lastEventBeforeSnap = newEvent$1;
5286
+                  recentWheelEvents$1.splice(0);
5287
+                  swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
5288
+                }, 500);
5289
+              }
5290
+            }
5291
+
5292
+            // Emit event
5293
+            if (!ignoreWheelEvents) { swiper.emit('scroll', e); }
5294
+
5295
+            // Stop autoplay
5296
+            if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }
5297
+            // Return page scroll on edge positions
5298
+            if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }
5299
+          }
5300
+        }
5301
+
5302
+        if (e.preventDefault) { e.preventDefault(); }
5303
+        else { e.returnValue = false; }
5304
+        return false;
5305
+      },
5306
+      animateSlider: function animateSlider(newEvent) {
5307
+        var swiper = this;
5308
+        // If the movement is NOT big enough and
5309
+        // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
5310
+        //   Don't go any further (avoid insignificant scroll movement).
5311
+        if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
5312
+          // Return false as a default
5313
+          return true;
5314
+        }
5315
+        // If user is scrolling towards the end:
5316
+        //   If the slider hasn't hit the latest slide or
5317
+        //   if the slider is a loop and
5318
+        //   if the slider isn't moving right now:
5319
+        //     Go to next slide and
5320
+        //     emit a scroll event.
5321
+        // Else (the user is scrolling towards the beginning) and
5322
+        // if the slider hasn't hit the first slide or
5323
+        // if the slider is a loop and
5324
+        // if the slider isn't moving right now:
5325
+        //   Go to prev slide and
5326
+        //   emit a scroll event.
5327
+        if (newEvent.direction < 0) {
5328
+          if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
5329
+            swiper.slideNext();
5330
+            swiper.emit('scroll', newEvent.raw);
5331
+          }
5332
+        } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
5333
+          swiper.slidePrev();
5334
+          swiper.emit('scroll', newEvent.raw);
5335
+        }
5336
+        // If you got here is because an animation has been triggered so store the current time
5337
+        swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();
5338
+        // Return false as a default
5339
+        return false;
5340
+      },
5341
+      releaseScroll: function releaseScroll(newEvent) {
5342
+        var swiper = this;
5343
+        var params = swiper.params.mousewheel;
5344
+        if (newEvent.direction < 0) {
5345
+          if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
5346
+            // Return true to animate scroll on edges
5347
+            return true;
5348
+          }
5349
+        } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
5350
+          // Return true to animate scroll on edges
5351
+          return true;
5352
+        }
5353
+        return false;
5354
+      },
5355
+      enable: function enable() {
5356
+        var swiper = this;
5357
+        var event = Mousewheel.event();
5358
+        if (swiper.params.cssMode) {
5359
+          swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
5360
+          return true;
5361
+        }
5362
+        if (!event) { return false; }
5363
+        if (swiper.mousewheel.enabled) { return false; }
5364
+        var target = swiper.$el;
5365
+        if (swiper.params.mousewheel.eventsTarged !== 'container') {
5366
+          target = $(swiper.params.mousewheel.eventsTarged);
5367
+        }
5368
+        target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
5369
+        target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
5370
+        target.on(event, swiper.mousewheel.handle);
5371
+        swiper.mousewheel.enabled = true;
5372
+        return true;
5373
+      },
5374
+      disable: function disable() {
5375
+        var swiper = this;
5376
+        var event = Mousewheel.event();
5377
+        if (swiper.params.cssMode) {
5378
+          swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
5379
+          return true;
5380
+        }
5381
+        if (!event) { return false; }
5382
+        if (!swiper.mousewheel.enabled) { return false; }
5383
+        var target = swiper.$el;
5384
+        if (swiper.params.mousewheel.eventsTarged !== 'container') {
5385
+          target = $(swiper.params.mousewheel.eventsTarged);
5386
+        }
5387
+        target.off(event, swiper.mousewheel.handle);
5388
+        swiper.mousewheel.enabled = false;
5389
+        return true;
5390
+      },
5391
+    };
5392
+
5393
+    var Mousewheel$1 = {
5394
+      name: 'mousewheel',
5395
+      params: {
5396
+        mousewheel: {
5397
+          enabled: false,
5398
+          releaseOnEdges: false,
5399
+          invert: false,
5400
+          forceToAxis: false,
5401
+          sensitivity: 1,
5402
+          eventsTarged: 'container',
5403
+        },
5404
+      },
5405
+      create: function create() {
5406
+        var swiper = this;
5407
+        Utils.extend(swiper, {
5408
+          mousewheel: {
5409
+            enabled: false,
5410
+            enable: Mousewheel.enable.bind(swiper),
5411
+            disable: Mousewheel.disable.bind(swiper),
5412
+            handle: Mousewheel.handle.bind(swiper),
5413
+            handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
5414
+            handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
5415
+            animateSlider: Mousewheel.animateSlider.bind(swiper),
5416
+            releaseScroll: Mousewheel.releaseScroll.bind(swiper),
5417
+            lastScrollTime: Utils.now(),
5418
+            lastEventBeforeSnap: undefined,
5419
+            recentWheelEvents: [],
5420
+          },
5421
+        });
5422
+      },
5423
+      on: {
5424
+        init: function init() {
5425
+          var swiper = this;
5426
+          if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
5427
+            swiper.mousewheel.disable();
5428
+          }
5429
+          if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }
5430
+        },
5431
+        destroy: function destroy() {
5432
+          var swiper = this;
5433
+          if (swiper.params.cssMode) {
5434
+            swiper.mousewheel.enable();
5435
+          }
5436
+          if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }
5437
+        },
5438
+      },
5439
+    };
5440
+
5441
+    var Navigation = {
5442
+      update: function update() {
5443
+        // Update Navigation Buttons
5444
+        var swiper = this;
5445
+        var params = swiper.params.navigation;
5446
+
5447
+        if (swiper.params.loop) { return; }
5448
+        var ref = swiper.navigation;
5449
+        var $nextEl = ref.$nextEl;
5450
+        var $prevEl = ref.$prevEl;
5451
+
5452
+        if ($prevEl && $prevEl.length > 0) {
5453
+          if (swiper.isBeginning) {
5454
+            $prevEl.addClass(params.disabledClass);
5455
+          } else {
5456
+            $prevEl.removeClass(params.disabledClass);
5457
+          }
5458
+          $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5459
+        }
5460
+        if ($nextEl && $nextEl.length > 0) {
5461
+          if (swiper.isEnd) {
5462
+            $nextEl.addClass(params.disabledClass);
5463
+          } else {
5464
+            $nextEl.removeClass(params.disabledClass);
5465
+          }
5466
+          $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5467
+        }
5468
+      },
5469
+      onPrevClick: function onPrevClick(e) {
5470
+        var swiper = this;
5471
+        e.preventDefault();
5472
+        if (swiper.isBeginning && !swiper.params.loop) { return; }
5473
+        swiper.slidePrev();
5474
+      },
5475
+      onNextClick: function onNextClick(e) {
5476
+        var swiper = this;
5477
+        e.preventDefault();
5478
+        if (swiper.isEnd && !swiper.params.loop) { return; }
5479
+        swiper.slideNext();
5480
+      },
5481
+      init: function init() {
5482
+        var swiper = this;
5483
+        var params = swiper.params.navigation;
5484
+        if (!(params.nextEl || params.prevEl)) { return; }
5485
+
5486
+        var $nextEl;
5487
+        var $prevEl;
5488
+        if (params.nextEl) {
5489
+          $nextEl = $(params.nextEl);
5490
+          if (
5491
+            swiper.params.uniqueNavElements
5492
+            && typeof params.nextEl === 'string'
5493
+            && $nextEl.length > 1
5494
+            && swiper.$el.find(params.nextEl).length === 1
5495
+          ) {
5496
+            $nextEl = swiper.$el.find(params.nextEl);
5497
+          }
5498
+        }
5499
+        if (params.prevEl) {
5500
+          $prevEl = $(params.prevEl);
5501
+          if (
5502
+            swiper.params.uniqueNavElements
5503
+            && typeof params.prevEl === 'string'
5504
+            && $prevEl.length > 1
5505
+            && swiper.$el.find(params.prevEl).length === 1
5506
+          ) {
5507
+            $prevEl = swiper.$el.find(params.prevEl);
5508
+          }
5509
+        }
5510
+
5511
+        if ($nextEl && $nextEl.length > 0) {
5512
+          $nextEl.on('click', swiper.navigation.onNextClick);
5513
+        }
5514
+        if ($prevEl && $prevEl.length > 0) {
5515
+          $prevEl.on('click', swiper.navigation.onPrevClick);
5516
+        }
5517
+
5518
+        Utils.extend(swiper.navigation, {
5519
+          $nextEl: $nextEl,
5520
+          nextEl: $nextEl && $nextEl[0],
5521
+          $prevEl: $prevEl,
5522
+          prevEl: $prevEl && $prevEl[0],
5523
+        });
5524
+      },
5525
+      destroy: function destroy() {
5526
+        var swiper = this;
5527
+        var ref = swiper.navigation;
5528
+        var $nextEl = ref.$nextEl;
5529
+        var $prevEl = ref.$prevEl;
5530
+        if ($nextEl && $nextEl.length) {
5531
+          $nextEl.off('click', swiper.navigation.onNextClick);
5532
+          $nextEl.removeClass(swiper.params.navigation.disabledClass);
5533
+        }
5534
+        if ($prevEl && $prevEl.length) {
5535
+          $prevEl.off('click', swiper.navigation.onPrevClick);
5536
+          $prevEl.removeClass(swiper.params.navigation.disabledClass);
5537
+        }
5538
+      },
5539
+    };
5540
+
5541
+    var Navigation$1 = {
5542
+      name: 'navigation',
5543
+      params: {
5544
+        navigation: {
5545
+          nextEl: null,
5546
+          prevEl: null,
5547
+
5548
+          hideOnClick: false,
5549
+          disabledClass: 'swiper-button-disabled',
5550
+          hiddenClass: 'swiper-button-hidden',
5551
+          lockClass: 'swiper-button-lock',
5552
+        },
5553
+      },
5554
+      create: function create() {
5555
+        var swiper = this;
5556
+        Utils.extend(swiper, {
5557
+          navigation: {
5558
+            init: Navigation.init.bind(swiper),
5559
+            update: Navigation.update.bind(swiper),
5560
+            destroy: Navigation.destroy.bind(swiper),
5561
+            onNextClick: Navigation.onNextClick.bind(swiper),
5562
+            onPrevClick: Navigation.onPrevClick.bind(swiper),
5563
+          },
5564
+        });
5565
+      },
5566
+      on: {
5567
+        init: function init() {
5568
+          var swiper = this;
5569
+          swiper.navigation.init();
5570
+          swiper.navigation.update();
5571
+        },
5572
+        toEdge: function toEdge() {
5573
+          var swiper = this;
5574
+          swiper.navigation.update();
5575
+        },
5576
+        fromEdge: function fromEdge() {
5577
+          var swiper = this;
5578
+          swiper.navigation.update();
5579
+        },
5580
+        destroy: function destroy() {
5581
+          var swiper = this;
5582
+          swiper.navigation.destroy();
5583
+        },
5584
+        click: function click(e) {
5585
+          var swiper = this;
5586
+          var ref = swiper.navigation;
5587
+          var $nextEl = ref.$nextEl;
5588
+          var $prevEl = ref.$prevEl;
5589
+          if (
5590
+            swiper.params.navigation.hideOnClick
5591
+            && !$(e.target).is($prevEl)
5592
+            && !$(e.target).is($nextEl)
5593
+          ) {
5594
+            var isHidden;
5595
+            if ($nextEl) {
5596
+              isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
5597
+            } else if ($prevEl) {
5598
+              isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
5599
+            }
5600
+            if (isHidden === true) {
5601
+              swiper.emit('navigationShow', swiper);
5602
+            } else {
5603
+              swiper.emit('navigationHide', swiper);
5604
+            }
5605
+            if ($nextEl) {
5606
+              $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
5607
+            }
5608
+            if ($prevEl) {
5609
+              $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
5610
+            }
5611
+          }
5612
+        },
5613
+      },
5614
+    };
5615
+
5616
+    var Pagination = {
5617
+      update: function update() {
5618
+        // Render || Update Pagination bullets/items
5619
+        var swiper = this;
5620
+        var rtl = swiper.rtl;
5621
+        var params = swiper.params.pagination;
5622
+        if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
5623
+        var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
5624
+        var $el = swiper.pagination.$el;
5625
+        // Current/Total
5626
+        var current;
5627
+        var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
5628
+        if (swiper.params.loop) {
5629
+          current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
5630
+          if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
5631
+            current -= (slidesLength - (swiper.loopedSlides * 2));
5632
+          }
5633
+          if (current > total - 1) { current -= total; }
5634
+          if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }
5635
+        } else if (typeof swiper.snapIndex !== 'undefined') {
5636
+          current = swiper.snapIndex;
5637
+        } else {
5638
+          current = swiper.activeIndex || 0;
5639
+        }
5640
+        // Types
5641
+        if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
5642
+          var bullets = swiper.pagination.bullets;
5643
+          var firstIndex;
5644
+          var lastIndex;
5645
+          var midIndex;
5646
+          if (params.dynamicBullets) {
5647
+            swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
5648
+            $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + "px"));
5649
+            if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
5650
+              swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
5651
+              if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
5652
+                swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
5653
+              } else if (swiper.pagination.dynamicBulletIndex < 0) {
5654
+                swiper.pagination.dynamicBulletIndex = 0;
5655
+              }
5656
+            }
5657
+            firstIndex = current - swiper.pagination.dynamicBulletIndex;
5658
+            lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
5659
+            midIndex = (lastIndex + firstIndex) / 2;
5660
+          }
5661
+          bullets.removeClass(((params.bulletActiveClass) + " " + (params.bulletActiveClass) + "-next " + (params.bulletActiveClass) + "-next-next " + (params.bulletActiveClass) + "-prev " + (params.bulletActiveClass) + "-prev-prev " + (params.bulletActiveClass) + "-main"));
5662
+          if ($el.length > 1) {
5663
+            bullets.each(function (index, bullet) {
5664
+              var $bullet = $(bullet);
5665
+              var bulletIndex = $bullet.index();
5666
+              if (bulletIndex === current) {
5667
+                $bullet.addClass(params.bulletActiveClass);
5668
+              }
5669
+              if (params.dynamicBullets) {
5670
+                if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
5671
+                  $bullet.addClass(((params.bulletActiveClass) + "-main"));
5672
+                }
5673
+                if (bulletIndex === firstIndex) {
5674
+                  $bullet
5675
+                    .prev()
5676
+                    .addClass(((params.bulletActiveClass) + "-prev"))
5677
+                    .prev()
5678
+                    .addClass(((params.bulletActiveClass) + "-prev-prev"));
5679
+                }
5680
+                if (bulletIndex === lastIndex) {
5681
+                  $bullet
5682
+                    .next()
5683
+                    .addClass(((params.bulletActiveClass) + "-next"))
5684
+                    .next()
5685
+                    .addClass(((params.bulletActiveClass) + "-next-next"));
5686
+                }
5687
+              }
5688
+            });
5689
+          } else {
5690
+            var $bullet = bullets.eq(current);
5691
+            var bulletIndex = $bullet.index();
5692
+            $bullet.addClass(params.bulletActiveClass);
5693
+            if (params.dynamicBullets) {
5694
+              var $firstDisplayedBullet = bullets.eq(firstIndex);
5695
+              var $lastDisplayedBullet = bullets.eq(lastIndex);
5696
+              for (var i = firstIndex; i <= lastIndex; i += 1) {
5697
+                bullets.eq(i).addClass(((params.bulletActiveClass) + "-main"));
5698
+              }
5699
+              if (swiper.params.loop) {
5700
+                if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
5701
+                  for (var i$1 = params.dynamicMainBullets; i$1 >= 0; i$1 -= 1) {
5702
+                    bullets.eq(bullets.length - i$1).addClass(((params.bulletActiveClass) + "-main"));
5703
+                  }
5704
+                  bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(((params.bulletActiveClass) + "-prev"));
5705
+                } else {
5706
+                  $firstDisplayedBullet
5707
+                    .prev()
5708
+                    .addClass(((params.bulletActiveClass) + "-prev"))
5709
+                    .prev()
5710
+                    .addClass(((params.bulletActiveClass) + "-prev-prev"));
5711
+                  $lastDisplayedBullet
5712
+                    .next()
5713
+                    .addClass(((params.bulletActiveClass) + "-next"))
5714
+                    .next()
5715
+                    .addClass(((params.bulletActiveClass) + "-next-next"));
5716
+                }
5717
+              } else {
5718
+                $firstDisplayedBullet
5719
+                  .prev()
5720
+                  .addClass(((params.bulletActiveClass) + "-prev"))
5721
+                  .prev()
5722
+                  .addClass(((params.bulletActiveClass) + "-prev-prev"));
5723
+                $lastDisplayedBullet
5724
+                  .next()
5725
+                  .addClass(((params.bulletActiveClass) + "-next"))
5726
+                  .next()
5727
+                  .addClass(((params.bulletActiveClass) + "-next-next"));
5728
+              }
5729
+            }
5730
+          }
5731
+          if (params.dynamicBullets) {
5732
+            var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
5733
+            var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
5734
+            var offsetProp = rtl ? 'right' : 'left';
5735
+            bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + "px"));
5736
+          }
5737
+        }
5738
+        if (params.type === 'fraction') {
5739
+          $el.find(("." + (params.currentClass))).text(params.formatFractionCurrent(current + 1));
5740
+          $el.find(("." + (params.totalClass))).text(params.formatFractionTotal(total));
5741
+        }
5742
+        if (params.type === 'progressbar') {
5743
+          var progressbarDirection;
5744
+          if (params.progressbarOpposite) {
5745
+            progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
5746
+          } else {
5747
+            progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
5748
+          }
5749
+          var scale = (current + 1) / total;
5750
+          var scaleX = 1;
5751
+          var scaleY = 1;
5752
+          if (progressbarDirection === 'horizontal') {
5753
+            scaleX = scale;
5754
+          } else {
5755
+            scaleY = scale;
5756
+          }
5757
+          $el.find(("." + (params.progressbarFillClass))).transform(("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")")).transition(swiper.params.speed);
5758
+        }
5759
+        if (params.type === 'custom' && params.renderCustom) {
5760
+          $el.html(params.renderCustom(swiper, current + 1, total));
5761
+          swiper.emit('paginationRender', swiper, $el[0]);
5762
+        } else {
5763
+          swiper.emit('paginationUpdate', swiper, $el[0]);
5764
+        }
5765
+        $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
5766
+      },
5767
+      render: function render() {
5768
+        // Render Container
5769
+        var swiper = this;
5770
+        var params = swiper.params.pagination;
5771
+        if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
5772
+        var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
5773
+
5774
+        var $el = swiper.pagination.$el;
5775
+        var paginationHTML = '';
5776
+        if (params.type === 'bullets') {
5777
+          var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
5778
+          for (var i = 0; i < numberOfBullets; i += 1) {
5779
+            if (params.renderBullet) {
5780
+              paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
5781
+            } else {
5782
+              paginationHTML += "<" + (params.bulletElement) + " class=\"" + (params.bulletClass) + "\"></" + (params.bulletElement) + ">";
5783
+            }
5784
+          }
5785
+          $el.html(paginationHTML);
5786
+          swiper.pagination.bullets = $el.find(("." + (params.bulletClass)));
5787
+        }
5788
+        if (params.type === 'fraction') {
5789
+          if (params.renderFraction) {
5790
+            paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
5791
+          } else {
5792
+            paginationHTML = "<span class=\"" + (params.currentClass) + "\"></span>"
5793
+            + ' / '
5794
+            + "<span class=\"" + (params.totalClass) + "\"></span>";
5795
+          }
5796
+          $el.html(paginationHTML);
5797
+        }
5798
+        if (params.type === 'progressbar') {
5799
+          if (params.renderProgressbar) {
5800
+            paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
5801
+          } else {
5802
+            paginationHTML = "<span class=\"" + (params.progressbarFillClass) + "\"></span>";
5803
+          }
5804
+          $el.html(paginationHTML);
5805
+        }
5806
+        if (params.type !== 'custom') {
5807
+          swiper.emit('paginationRender', swiper.pagination.$el[0]);
5808
+        }
5809
+      },
5810
+      init: function init() {
5811
+        var swiper = this;
5812
+        var params = swiper.params.pagination;
5813
+        if (!params.el) { return; }
5814
+
5815
+        var $el = $(params.el);
5816
+        if ($el.length === 0) { return; }
5817
+
5818
+        if (
5819
+          swiper.params.uniqueNavElements
5820
+          && typeof params.el === 'string'
5821
+          && $el.length > 1
5822
+          && swiper.$el.find(params.el).length === 1
5823
+        ) {
5824
+          $el = swiper.$el.find(params.el);
5825
+        }
5826
+
5827
+        if (params.type === 'bullets' && params.clickable) {
5828
+          $el.addClass(params.clickableClass);
5829
+        }
5830
+
5831
+        $el.addClass(params.modifierClass + params.type);
5832
+
5833
+        if (params.type === 'bullets' && params.dynamicBullets) {
5834
+          $el.addClass(("" + (params.modifierClass) + (params.type) + "-dynamic"));
5835
+          swiper.pagination.dynamicBulletIndex = 0;
5836
+          if (params.dynamicMainBullets < 1) {
5837
+            params.dynamicMainBullets = 1;
5838
+          }
5839
+        }
5840
+        if (params.type === 'progressbar' && params.progressbarOpposite) {
5841
+          $el.addClass(params.progressbarOppositeClass);
5842
+        }
5843
+
5844
+        if (params.clickable) {
5845
+          $el.on('click', ("." + (params.bulletClass)), function onClick(e) {
5846
+            e.preventDefault();
5847
+            var index = $(this).index() * swiper.params.slidesPerGroup;
5848
+            if (swiper.params.loop) { index += swiper.loopedSlides; }
5849
+            swiper.slideTo(index);
5850
+          });
5851
+        }
5852
+
5853
+        Utils.extend(swiper.pagination, {
5854
+          $el: $el,
5855
+          el: $el[0],
5856
+        });
5857
+      },
5858
+      destroy: function destroy() {
5859
+        var swiper = this;
5860
+        var params = swiper.params.pagination;
5861
+        if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
5862
+        var $el = swiper.pagination.$el;
5863
+
5864
+        $el.removeClass(params.hiddenClass);
5865
+        $el.removeClass(params.modifierClass + params.type);
5866
+        if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }
5867
+        if (params.clickable) {
5868
+          $el.off('click', ("." + (params.bulletClass)));
5869
+        }
5870
+      },
5871
+    };
5872
+
5873
+    var Pagination$1 = {
5874
+      name: 'pagination',
5875
+      params: {
5876
+        pagination: {
5877
+          el: null,
5878
+          bulletElement: 'span',
5879
+          clickable: false,
5880
+          hideOnClick: false,
5881
+          renderBullet: null,
5882
+          renderProgressbar: null,
5883
+          renderFraction: null,
5884
+          renderCustom: null,
5885
+          progressbarOpposite: false,
5886
+          type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
5887
+          dynamicBullets: false,
5888
+          dynamicMainBullets: 1,
5889
+          formatFractionCurrent: function (number) { return number; },
5890
+          formatFractionTotal: function (number) { return number; },
5891
+          bulletClass: 'swiper-pagination-bullet',
5892
+          bulletActiveClass: 'swiper-pagination-bullet-active',
5893
+          modifierClass: 'swiper-pagination-', // NEW
5894
+          currentClass: 'swiper-pagination-current',
5895
+          totalClass: 'swiper-pagination-total',
5896
+          hiddenClass: 'swiper-pagination-hidden',
5897
+          progressbarFillClass: 'swiper-pagination-progressbar-fill',
5898
+          progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
5899
+          clickableClass: 'swiper-pagination-clickable', // NEW
5900
+          lockClass: 'swiper-pagination-lock',
5901
+        },
5902
+      },
5903
+      create: function create() {
5904
+        var swiper = this;
5905
+        Utils.extend(swiper, {
5906
+          pagination: {
5907
+            init: Pagination.init.bind(swiper),
5908
+            render: Pagination.render.bind(swiper),
5909
+            update: Pagination.update.bind(swiper),
5910
+            destroy: Pagination.destroy.bind(swiper),
5911
+            dynamicBulletIndex: 0,
5912
+          },
5913
+        });
5914
+      },
5915
+      on: {
5916
+        init: function init() {
5917
+          var swiper = this;
5918
+          swiper.pagination.init();
5919
+          swiper.pagination.render();
5920
+          swiper.pagination.update();
5921
+        },
5922
+        activeIndexChange: function activeIndexChange() {
5923
+          var swiper = this;
5924
+          if (swiper.params.loop) {
5925
+            swiper.pagination.update();
5926
+          } else if (typeof swiper.snapIndex === 'undefined') {
5927
+            swiper.pagination.update();
5928
+          }
5929
+        },
5930
+        snapIndexChange: function snapIndexChange() {
5931
+          var swiper = this;
5932
+          if (!swiper.params.loop) {
5933
+            swiper.pagination.update();
5934
+          }
5935
+        },
5936
+        slidesLengthChange: function slidesLengthChange() {
5937
+          var swiper = this;
5938
+          if (swiper.params.loop) {
5939
+            swiper.pagination.render();
5940
+            swiper.pagination.update();
5941
+          }
5942
+        },
5943
+        snapGridLengthChange: function snapGridLengthChange() {
5944
+          var swiper = this;
5945
+          if (!swiper.params.loop) {
5946
+            swiper.pagination.render();
5947
+            swiper.pagination.update();
5948
+          }
5949
+        },
5950
+        destroy: function destroy() {
5951
+          var swiper = this;
5952
+          swiper.pagination.destroy();
5953
+        },
5954
+        click: function click(e) {
5955
+          var swiper = this;
5956
+          if (
5957
+            swiper.params.pagination.el
5958
+            && swiper.params.pagination.hideOnClick
5959
+            && swiper.pagination.$el.length > 0
5960
+            && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
5961
+          ) {
5962
+            var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
5963
+            if (isHidden === true) {
5964
+              swiper.emit('paginationShow', swiper);
5965
+            } else {
5966
+              swiper.emit('paginationHide', swiper);
5967
+            }
5968
+            swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
5969
+          }
5970
+        },
5971
+      },
5972
+    };
5973
+
5974
+    var Scrollbar = {
5975
+      setTranslate: function setTranslate() {
5976
+        var swiper = this;
5977
+        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
5978
+        var scrollbar = swiper.scrollbar;
5979
+        var rtl = swiper.rtlTranslate;
5980
+        var progress = swiper.progress;
5981
+        var dragSize = scrollbar.dragSize;
5982
+        var trackSize = scrollbar.trackSize;
5983
+        var $dragEl = scrollbar.$dragEl;
5984
+        var $el = scrollbar.$el;
5985
+        var params = swiper.params.scrollbar;
5986
+
5987
+        var newSize = dragSize;
5988
+        var newPos = (trackSize - dragSize) * progress;
5989
+        if (rtl) {
5990
+          newPos = -newPos;
5991
+          if (newPos > 0) {
5992
+            newSize = dragSize - newPos;
5993
+            newPos = 0;
5994
+          } else if (-newPos + dragSize > trackSize) {
5995
+            newSize = trackSize + newPos;
5996
+          }
5997
+        } else if (newPos < 0) {
5998
+          newSize = dragSize + newPos;
5999
+          newPos = 0;
6000
+        } else if (newPos + dragSize > trackSize) {
6001
+          newSize = trackSize - newPos;
6002
+        }
6003
+        if (swiper.isHorizontal()) {
6004
+          $dragEl.transform(("translate3d(" + newPos + "px, 0, 0)"));
6005
+          $dragEl[0].style.width = newSize + "px";
6006
+        } else {
6007
+          $dragEl.transform(("translate3d(0px, " + newPos + "px, 0)"));
6008
+          $dragEl[0].style.height = newSize + "px";
6009
+        }
6010
+        if (params.hide) {
6011
+          clearTimeout(swiper.scrollbar.timeout);
6012
+          $el[0].style.opacity = 1;
6013
+          swiper.scrollbar.timeout = setTimeout(function () {
6014
+            $el[0].style.opacity = 0;
6015
+            $el.transition(400);
6016
+          }, 1000);
6017
+        }
6018
+      },
6019
+      setTransition: function setTransition(duration) {
6020
+        var swiper = this;
6021
+        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
6022
+        swiper.scrollbar.$dragEl.transition(duration);
6023
+      },
6024
+      updateSize: function updateSize() {
6025
+        var swiper = this;
6026
+        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
6027
+
6028
+        var scrollbar = swiper.scrollbar;
6029
+        var $dragEl = scrollbar.$dragEl;
6030
+        var $el = scrollbar.$el;
6031
+
6032
+        $dragEl[0].style.width = '';
6033
+        $dragEl[0].style.height = '';
6034
+        var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
6035
+
6036
+        var divider = swiper.size / swiper.virtualSize;
6037
+        var moveDivider = divider * (trackSize / swiper.size);
6038
+        var dragSize;
6039
+        if (swiper.params.scrollbar.dragSize === 'auto') {
6040
+          dragSize = trackSize * divider;
6041
+        } else {
6042
+          dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
6043
+        }
6044
+
6045
+        if (swiper.isHorizontal()) {
6046
+          $dragEl[0].style.width = dragSize + "px";
6047
+        } else {
6048
+          $dragEl[0].style.height = dragSize + "px";
6049
+        }
6050
+
6051
+        if (divider >= 1) {
6052
+          $el[0].style.display = 'none';
6053
+        } else {
6054
+          $el[0].style.display = '';
6055
+        }
6056
+        if (swiper.params.scrollbar.hide) {
6057
+          $el[0].style.opacity = 0;
6058
+        }
6059
+        Utils.extend(scrollbar, {
6060
+          trackSize: trackSize,
6061
+          divider: divider,
6062
+          moveDivider: moveDivider,
6063
+          dragSize: dragSize,
6064
+        });
6065
+        scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
6066
+      },
6067
+      getPointerPosition: function getPointerPosition(e) {
6068
+        var swiper = this;
6069
+        if (swiper.isHorizontal()) {
6070
+          return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
6071
+        }
6072
+        return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
6073
+      },
6074
+      setDragPosition: function setDragPosition(e) {
6075
+        var swiper = this;
6076
+        var scrollbar = swiper.scrollbar;
6077
+        var rtl = swiper.rtlTranslate;
6078
+        var $el = scrollbar.$el;
6079
+        var dragSize = scrollbar.dragSize;
6080
+        var trackSize = scrollbar.trackSize;
6081
+        var dragStartPos = scrollbar.dragStartPos;
6082
+
6083
+        var positionRatio;
6084
+        positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
6085
+          - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
6086
+        positionRatio = Math.max(Math.min(positionRatio, 1), 0);
6087
+        if (rtl) {
6088
+          positionRatio = 1 - positionRatio;
6089
+        }
6090
+
6091
+        var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
6092
+
6093
+        swiper.updateProgress(position);
6094
+        swiper.setTranslate(position);
6095
+        swiper.updateActiveIndex();
6096
+        swiper.updateSlidesClasses();
6097
+      },
6098
+      onDragStart: function onDragStart(e) {
6099
+        var swiper = this;
6100
+        var params = swiper.params.scrollbar;
6101
+        var scrollbar = swiper.scrollbar;
6102
+        var $wrapperEl = swiper.$wrapperEl;
6103
+        var $el = scrollbar.$el;
6104
+        var $dragEl = scrollbar.$dragEl;
6105
+        swiper.scrollbar.isTouched = true;
6106
+        swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
6107
+          ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
6108
+        e.preventDefault();
6109
+        e.stopPropagation();
6110
+
6111
+        $wrapperEl.transition(100);
6112
+        $dragEl.transition(100);
6113
+        scrollbar.setDragPosition(e);
6114
+
6115
+        clearTimeout(swiper.scrollbar.dragTimeout);
6116
+
6117
+        $el.transition(0);
6118
+        if (params.hide) {
6119
+          $el.css('opacity', 1);
6120
+        }
6121
+        if (swiper.params.cssMode) {
6122
+          swiper.$wrapperEl.css('scroll-snap-type', 'none');
6123
+        }
6124
+        swiper.emit('scrollbarDragStart', e);
6125
+      },
6126
+      onDragMove: function onDragMove(e) {
6127
+        var swiper = this;
6128
+        var scrollbar = swiper.scrollbar;
6129
+        var $wrapperEl = swiper.$wrapperEl;
6130
+        var $el = scrollbar.$el;
6131
+        var $dragEl = scrollbar.$dragEl;
6132
+
6133
+        if (!swiper.scrollbar.isTouched) { return; }
6134
+        if (e.preventDefault) { e.preventDefault(); }
6135
+        else { e.returnValue = false; }
6136
+        scrollbar.setDragPosition(e);
6137
+        $wrapperEl.transition(0);
6138
+        $el.transition(0);
6139
+        $dragEl.transition(0);
6140
+        swiper.emit('scrollbarDragMove', e);
6141
+      },
6142
+      onDragEnd: function onDragEnd(e) {
6143
+        var swiper = this;
6144
+
6145
+        var params = swiper.params.scrollbar;
6146
+        var scrollbar = swiper.scrollbar;
6147
+        var $wrapperEl = swiper.$wrapperEl;
6148
+        var $el = scrollbar.$el;
6149
+
6150
+        if (!swiper.scrollbar.isTouched) { return; }
6151
+        swiper.scrollbar.isTouched = false;
6152
+        if (swiper.params.cssMode) {
6153
+          swiper.$wrapperEl.css('scroll-snap-type', '');
6154
+          $wrapperEl.transition('');
6155
+        }
6156
+        if (params.hide) {
6157
+          clearTimeout(swiper.scrollbar.dragTimeout);
6158
+          swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
6159
+            $el.css('opacity', 0);
6160
+            $el.transition(400);
6161
+          }, 1000);
6162
+        }
6163
+        swiper.emit('scrollbarDragEnd', e);
6164
+        if (params.snapOnRelease) {
6165
+          swiper.slideToClosest();
6166
+        }
6167
+      },
6168
+      enableDraggable: function enableDraggable() {
6169
+        var swiper = this;
6170
+        if (!swiper.params.scrollbar.el) { return; }
6171
+        var scrollbar = swiper.scrollbar;
6172
+        var touchEventsTouch = swiper.touchEventsTouch;
6173
+        var touchEventsDesktop = swiper.touchEventsDesktop;
6174
+        var params = swiper.params;
6175
+        var $el = scrollbar.$el;
6176
+        var target = $el[0];
6177
+        var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
6178
+        var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
6179
+        if (!Support.touch) {
6180
+          target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6181
+          doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6182
+          doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6183
+        } else {
6184
+          target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6185
+          target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6186
+          target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6187
+        }
6188
+      },
6189
+      disableDraggable: function disableDraggable() {
6190
+        var swiper = this;
6191
+        if (!swiper.params.scrollbar.el) { return; }
6192
+        var scrollbar = swiper.scrollbar;
6193
+        var touchEventsTouch = swiper.touchEventsTouch;
6194
+        var touchEventsDesktop = swiper.touchEventsDesktop;
6195
+        var params = swiper.params;
6196
+        var $el = scrollbar.$el;
6197
+        var target = $el[0];
6198
+        var activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
6199
+        var passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
6200
+        if (!Support.touch) {
6201
+          target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
6202
+          doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
6203
+          doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
6204
+        } else {
6205
+          target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
6206
+          target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
6207
+          target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
6208
+        }
6209
+      },
6210
+      init: function init() {
6211
+        var swiper = this;
6212
+        if (!swiper.params.scrollbar.el) { return; }
6213
+        var scrollbar = swiper.scrollbar;
6214
+        var $swiperEl = swiper.$el;
6215
+        var params = swiper.params.scrollbar;
6216
+
6217
+        var $el = $(params.el);
6218
+        if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
6219
+          $el = $swiperEl.find(params.el);
6220
+        }
6221
+
6222
+        var $dragEl = $el.find(("." + (swiper.params.scrollbar.dragClass)));
6223
+        if ($dragEl.length === 0) {
6224
+          $dragEl = $(("<div class=\"" + (swiper.params.scrollbar.dragClass) + "\"></div>"));
6225
+          $el.append($dragEl);
6226
+        }
6227
+
6228
+        Utils.extend(scrollbar, {
6229
+          $el: $el,
6230
+          el: $el[0],
6231
+          $dragEl: $dragEl,
6232
+          dragEl: $dragEl[0],
6233
+        });
6234
+
6235
+        if (params.draggable) {
6236
+          scrollbar.enableDraggable();
6237
+        }
6238
+      },
6239
+      destroy: function destroy() {
6240
+        var swiper = this;
6241
+        swiper.scrollbar.disableDraggable();
6242
+      },
6243
+    };
6244
+
6245
+    var Scrollbar$1 = {
6246
+      name: 'scrollbar',
6247
+      params: {
6248
+        scrollbar: {
6249
+          el: null,
6250
+          dragSize: 'auto',
6251
+          hide: false,
6252
+          draggable: false,
6253
+          snapOnRelease: true,
6254
+          lockClass: 'swiper-scrollbar-lock',
6255
+          dragClass: 'swiper-scrollbar-drag',
6256
+        },
6257
+      },
6258
+      create: function create() {
6259
+        var swiper = this;
6260
+        Utils.extend(swiper, {
6261
+          scrollbar: {
6262
+            init: Scrollbar.init.bind(swiper),
6263
+            destroy: Scrollbar.destroy.bind(swiper),
6264
+            updateSize: Scrollbar.updateSize.bind(swiper),
6265
+            setTranslate: Scrollbar.setTranslate.bind(swiper),
6266
+            setTransition: Scrollbar.setTransition.bind(swiper),
6267
+            enableDraggable: Scrollbar.enableDraggable.bind(swiper),
6268
+            disableDraggable: Scrollbar.disableDraggable.bind(swiper),
6269
+            setDragPosition: Scrollbar.setDragPosition.bind(swiper),
6270
+            getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
6271
+            onDragStart: Scrollbar.onDragStart.bind(swiper),
6272
+            onDragMove: Scrollbar.onDragMove.bind(swiper),
6273
+            onDragEnd: Scrollbar.onDragEnd.bind(swiper),
6274
+            isTouched: false,
6275
+            timeout: null,
6276
+            dragTimeout: null,
6277
+          },
6278
+        });
6279
+      },
6280
+      on: {
6281
+        init: function init() {
6282
+          var swiper = this;
6283
+          swiper.scrollbar.init();
6284
+          swiper.scrollbar.updateSize();
6285
+          swiper.scrollbar.setTranslate();
6286
+        },
6287
+        update: function update() {
6288
+          var swiper = this;
6289
+          swiper.scrollbar.updateSize();
6290
+        },
6291
+        resize: function resize() {
6292
+          var swiper = this;
6293
+          swiper.scrollbar.updateSize();
6294
+        },
6295
+        observerUpdate: function observerUpdate() {
6296
+          var swiper = this;
6297
+          swiper.scrollbar.updateSize();
6298
+        },
6299
+        setTranslate: function setTranslate() {
6300
+          var swiper = this;
6301
+          swiper.scrollbar.setTranslate();
6302
+        },
6303
+        setTransition: function setTransition(duration) {
6304
+          var swiper = this;
6305
+          swiper.scrollbar.setTransition(duration);
6306
+        },
6307
+        destroy: function destroy() {
6308
+          var swiper = this;
6309
+          swiper.scrollbar.destroy();
6310
+        },
6311
+      },
6312
+    };
6313
+
6314
+    var Parallax = {
6315
+      setTransform: function setTransform(el, progress) {
6316
+        var swiper = this;
6317
+        var rtl = swiper.rtl;
6318
+
6319
+        var $el = $(el);
6320
+        var rtlFactor = rtl ? -1 : 1;
6321
+
6322
+        var p = $el.attr('data-swiper-parallax') || '0';
6323
+        var x = $el.attr('data-swiper-parallax-x');
6324
+        var y = $el.attr('data-swiper-parallax-y');
6325
+        var scale = $el.attr('data-swiper-parallax-scale');
6326
+        var opacity = $el.attr('data-swiper-parallax-opacity');
6327
+
6328
+        if (x || y) {
6329
+          x = x || '0';
6330
+          y = y || '0';
6331
+        } else if (swiper.isHorizontal()) {
6332
+          x = p;
6333
+          y = '0';
6334
+        } else {
6335
+          y = p;
6336
+          x = '0';
6337
+        }
6338
+
6339
+        if ((x).indexOf('%') >= 0) {
6340
+          x = (parseInt(x, 10) * progress * rtlFactor) + "%";
6341
+        } else {
6342
+          x = (x * progress * rtlFactor) + "px";
6343
+        }
6344
+        if ((y).indexOf('%') >= 0) {
6345
+          y = (parseInt(y, 10) * progress) + "%";
6346
+        } else {
6347
+          y = (y * progress) + "px";
6348
+        }
6349
+
6350
+        if (typeof opacity !== 'undefined' && opacity !== null) {
6351
+          var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
6352
+          $el[0].style.opacity = currentOpacity;
6353
+        }
6354
+        if (typeof scale === 'undefined' || scale === null) {
6355
+          $el.transform(("translate3d(" + x + ", " + y + ", 0px)"));
6356
+        } else {
6357
+          var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
6358
+          $el.transform(("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"));
6359
+        }
6360
+      },
6361
+      setTranslate: function setTranslate() {
6362
+        var swiper = this;
6363
+        var $el = swiper.$el;
6364
+        var slides = swiper.slides;
6365
+        var progress = swiper.progress;
6366
+        var snapGrid = swiper.snapGrid;
6367
+        $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6368
+          .each(function (index, el) {
6369
+            swiper.parallax.setTransform(el, progress);
6370
+          });
6371
+        slides.each(function (slideIndex, slideEl) {
6372
+          var slideProgress = slideEl.progress;
6373
+          if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
6374
+            slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
6375
+          }
6376
+          slideProgress = Math.min(Math.max(slideProgress, -1), 1);
6377
+          $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6378
+            .each(function (index, el) {
6379
+              swiper.parallax.setTransform(el, slideProgress);
6380
+            });
6381
+        });
6382
+      },
6383
+      setTransition: function setTransition(duration) {
6384
+        if ( duration === void 0 ) duration = this.params.speed;
6385
+
6386
+        var swiper = this;
6387
+        var $el = swiper.$el;
6388
+        $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
6389
+          .each(function (index, parallaxEl) {
6390
+            var $parallaxEl = $(parallaxEl);
6391
+            var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
6392
+            if (duration === 0) { parallaxDuration = 0; }
6393
+            $parallaxEl.transition(parallaxDuration);
6394
+          });
6395
+      },
6396
+    };
6397
+
6398
+    var Parallax$1 = {
6399
+      name: 'parallax',
6400
+      params: {
6401
+        parallax: {
6402
+          enabled: false,
6403
+        },
6404
+      },
6405
+      create: function create() {
6406
+        var swiper = this;
6407
+        Utils.extend(swiper, {
6408
+          parallax: {
6409
+            setTransform: Parallax.setTransform.bind(swiper),
6410
+            setTranslate: Parallax.setTranslate.bind(swiper),
6411
+            setTransition: Parallax.setTransition.bind(swiper),
6412
+          },
6413
+        });
6414
+      },
6415
+      on: {
6416
+        beforeInit: function beforeInit() {
6417
+          var swiper = this;
6418
+          if (!swiper.params.parallax.enabled) { return; }
6419
+          swiper.params.watchSlidesProgress = true;
6420
+          swiper.originalParams.watchSlidesProgress = true;
6421
+        },
6422
+        init: function init() {
6423
+          var swiper = this;
6424
+          if (!swiper.params.parallax.enabled) { return; }
6425
+          swiper.parallax.setTranslate();
6426
+        },
6427
+        setTranslate: function setTranslate() {
6428
+          var swiper = this;
6429
+          if (!swiper.params.parallax.enabled) { return; }
6430
+          swiper.parallax.setTranslate();
6431
+        },
6432
+        setTransition: function setTransition(duration) {
6433
+          var swiper = this;
6434
+          if (!swiper.params.parallax.enabled) { return; }
6435
+          swiper.parallax.setTransition(duration);
6436
+        },
6437
+      },
6438
+    };
6439
+
6440
+    var Zoom = {
6441
+      // Calc Scale From Multi-touches
6442
+      getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
6443
+        if (e.targetTouches.length < 2) { return 1; }
6444
+        var x1 = e.targetTouches[0].pageX;
6445
+        var y1 = e.targetTouches[0].pageY;
6446
+        var x2 = e.targetTouches[1].pageX;
6447
+        var y2 = e.targetTouches[1].pageY;
6448
+        var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));
6449
+        return distance;
6450
+      },
6451
+      // Events
6452
+      onGestureStart: function onGestureStart(e) {
6453
+        var swiper = this;
6454
+        var params = swiper.params.zoom;
6455
+        var zoom = swiper.zoom;
6456
+        var gesture = zoom.gesture;
6457
+        zoom.fakeGestureTouched = false;
6458
+        zoom.fakeGestureMoved = false;
6459
+        if (!Support.gestures) {
6460
+          if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
6461
+            return;
6462
+          }
6463
+          zoom.fakeGestureTouched = true;
6464
+          gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
6465
+        }
6466
+        if (!gesture.$slideEl || !gesture.$slideEl.length) {
6467
+          gesture.$slideEl = $(e.target).closest(("." + (swiper.params.slideClass)));
6468
+          if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }
6469
+          gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6470
+          gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
6471
+          gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6472
+          if (gesture.$imageWrapEl.length === 0) {
6473
+            gesture.$imageEl = undefined;
6474
+            return;
6475
+          }
6476
+        }
6477
+        if (gesture.$imageEl) {
6478
+          gesture.$imageEl.transition(0);
6479
+        }
6480
+        swiper.zoom.isScaling = true;
6481
+      },
6482
+      onGestureChange: function onGestureChange(e) {
6483
+        var swiper = this;
6484
+        var params = swiper.params.zoom;
6485
+        var zoom = swiper.zoom;
6486
+        var gesture = zoom.gesture;
6487
+        if (!Support.gestures) {
6488
+          if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
6489
+            return;
6490
+          }
6491
+          zoom.fakeGestureMoved = true;
6492
+          gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
6493
+        }
6494
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6495
+        if (Support.gestures) {
6496
+          zoom.scale = e.scale * zoom.currentScale;
6497
+        } else {
6498
+          zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
6499
+        }
6500
+        if (zoom.scale > gesture.maxRatio) {
6501
+          zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));
6502
+        }
6503
+        if (zoom.scale < params.minRatio) {
6504
+          zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));
6505
+        }
6506
+        gesture.$imageEl.transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
6507
+      },
6508
+      onGestureEnd: function onGestureEnd(e) {
6509
+        var swiper = this;
6510
+        var params = swiper.params.zoom;
6511
+        var zoom = swiper.zoom;
6512
+        var gesture = zoom.gesture;
6513
+        if (!Support.gestures) {
6514
+          if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
6515
+            return;
6516
+          }
6517
+          if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
6518
+            return;
6519
+          }
6520
+          zoom.fakeGestureTouched = false;
6521
+          zoom.fakeGestureMoved = false;
6522
+        }
6523
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6524
+        zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
6525
+        gesture.$imageEl.transition(swiper.params.speed).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
6526
+        zoom.currentScale = zoom.scale;
6527
+        zoom.isScaling = false;
6528
+        if (zoom.scale === 1) { gesture.$slideEl = undefined; }
6529
+      },
6530
+      onTouchStart: function onTouchStart(e) {
6531
+        var swiper = this;
6532
+        var zoom = swiper.zoom;
6533
+        var gesture = zoom.gesture;
6534
+        var image = zoom.image;
6535
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6536
+        if (image.isTouched) { return; }
6537
+        if (Device.android && e.cancelable) { e.preventDefault(); }
6538
+        image.isTouched = true;
6539
+        image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
6540
+        image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
6541
+      },
6542
+      onTouchMove: function onTouchMove(e) {
6543
+        var swiper = this;
6544
+        var zoom = swiper.zoom;
6545
+        var gesture = zoom.gesture;
6546
+        var image = zoom.image;
6547
+        var velocity = zoom.velocity;
6548
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6549
+        swiper.allowClick = false;
6550
+        if (!image.isTouched || !gesture.$slideEl) { return; }
6551
+
6552
+        if (!image.isMoved) {
6553
+          image.width = gesture.$imageEl[0].offsetWidth;
6554
+          image.height = gesture.$imageEl[0].offsetHeight;
6555
+          image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
6556
+          image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
6557
+          gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
6558
+          gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
6559
+          gesture.$imageWrapEl.transition(0);
6560
+          if (swiper.rtl) {
6561
+            image.startX = -image.startX;
6562
+            image.startY = -image.startY;
6563
+          }
6564
+        }
6565
+        // Define if we need image drag
6566
+        var scaledWidth = image.width * zoom.scale;
6567
+        var scaledHeight = image.height * zoom.scale;
6568
+
6569
+        if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }
6570
+
6571
+        image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
6572
+        image.maxX = -image.minX;
6573
+        image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
6574
+        image.maxY = -image.minY;
6575
+
6576
+        image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
6577
+        image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
6578
+
6579
+        if (!image.isMoved && !zoom.isScaling) {
6580
+          if (
6581
+            swiper.isHorizontal()
6582
+            && (
6583
+              (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
6584
+              || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
6585
+            )
6586
+          ) {
6587
+            image.isTouched = false;
6588
+            return;
6589
+          } if (
6590
+            !swiper.isHorizontal()
6591
+            && (
6592
+              (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
6593
+              || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
6594
+            )
6595
+          ) {
6596
+            image.isTouched = false;
6597
+            return;
6598
+          }
6599
+        }
6600
+        if (e.cancelable) {
6601
+          e.preventDefault();
6602
+        }
6603
+        e.stopPropagation();
6604
+
6605
+        image.isMoved = true;
6606
+        image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
6607
+        image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
6608
+
6609
+        if (image.currentX < image.minX) {
6610
+          image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));
6611
+        }
6612
+        if (image.currentX > image.maxX) {
6613
+          image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));
6614
+        }
6615
+
6616
+        if (image.currentY < image.minY) {
6617
+          image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));
6618
+        }
6619
+        if (image.currentY > image.maxY) {
6620
+          image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));
6621
+        }
6622
+
6623
+        // Velocity
6624
+        if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }
6625
+        if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }
6626
+        if (!velocity.prevTime) { velocity.prevTime = Date.now(); }
6627
+        velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
6628
+        velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
6629
+        if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }
6630
+        if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }
6631
+        velocity.prevPositionX = image.touchesCurrent.x;
6632
+        velocity.prevPositionY = image.touchesCurrent.y;
6633
+        velocity.prevTime = Date.now();
6634
+
6635
+        gesture.$imageWrapEl.transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
6636
+      },
6637
+      onTouchEnd: function onTouchEnd() {
6638
+        var swiper = this;
6639
+        var zoom = swiper.zoom;
6640
+        var gesture = zoom.gesture;
6641
+        var image = zoom.image;
6642
+        var velocity = zoom.velocity;
6643
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6644
+        if (!image.isTouched || !image.isMoved) {
6645
+          image.isTouched = false;
6646
+          image.isMoved = false;
6647
+          return;
6648
+        }
6649
+        image.isTouched = false;
6650
+        image.isMoved = false;
6651
+        var momentumDurationX = 300;
6652
+        var momentumDurationY = 300;
6653
+        var momentumDistanceX = velocity.x * momentumDurationX;
6654
+        var newPositionX = image.currentX + momentumDistanceX;
6655
+        var momentumDistanceY = velocity.y * momentumDurationY;
6656
+        var newPositionY = image.currentY + momentumDistanceY;
6657
+
6658
+        // Fix duration
6659
+        if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }
6660
+        if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }
6661
+        var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
6662
+
6663
+        image.currentX = newPositionX;
6664
+        image.currentY = newPositionY;
6665
+
6666
+        // Define if we need image drag
6667
+        var scaledWidth = image.width * zoom.scale;
6668
+        var scaledHeight = image.height * zoom.scale;
6669
+        image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
6670
+        image.maxX = -image.minX;
6671
+        image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
6672
+        image.maxY = -image.minY;
6673
+        image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
6674
+        image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
6675
+
6676
+        gesture.$imageWrapEl.transition(momentumDuration).transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
6677
+      },
6678
+      onTransitionEnd: function onTransitionEnd() {
6679
+        var swiper = this;
6680
+        var zoom = swiper.zoom;
6681
+        var gesture = zoom.gesture;
6682
+        if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
6683
+          if (gesture.$imageEl) {
6684
+            gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
6685
+          }
6686
+          if (gesture.$imageWrapEl) {
6687
+            gesture.$imageWrapEl.transform('translate3d(0,0,0)');
6688
+          }
6689
+
6690
+          zoom.scale = 1;
6691
+          zoom.currentScale = 1;
6692
+
6693
+          gesture.$slideEl = undefined;
6694
+          gesture.$imageEl = undefined;
6695
+          gesture.$imageWrapEl = undefined;
6696
+        }
6697
+      },
6698
+      // Toggle Zoom
6699
+      toggle: function toggle(e) {
6700
+        var swiper = this;
6701
+        var zoom = swiper.zoom;
6702
+
6703
+        if (zoom.scale && zoom.scale !== 1) {
6704
+          // Zoom Out
6705
+          zoom.out();
6706
+        } else {
6707
+          // Zoom In
6708
+          zoom.in(e);
6709
+        }
6710
+      },
6711
+      in: function in$1(e) {
6712
+        var swiper = this;
6713
+
6714
+        var zoom = swiper.zoom;
6715
+        var params = swiper.params.zoom;
6716
+        var gesture = zoom.gesture;
6717
+        var image = zoom.image;
6718
+
6719
+        if (!gesture.$slideEl) {
6720
+          if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
6721
+            gesture.$slideEl = swiper.$wrapperEl.children(("." + (swiper.params.slideActiveClass)));
6722
+          } else {
6723
+            gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
6724
+          }
6725
+          gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6726
+          gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
6727
+        }
6728
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6729
+
6730
+        gesture.$slideEl.addClass(("" + (params.zoomedSlideClass)));
6731
+
6732
+        var touchX;
6733
+        var touchY;
6734
+        var offsetX;
6735
+        var offsetY;
6736
+        var diffX;
6737
+        var diffY;
6738
+        var translateX;
6739
+        var translateY;
6740
+        var imageWidth;
6741
+        var imageHeight;
6742
+        var scaledWidth;
6743
+        var scaledHeight;
6744
+        var translateMinX;
6745
+        var translateMinY;
6746
+        var translateMaxX;
6747
+        var translateMaxY;
6748
+        var slideWidth;
6749
+        var slideHeight;
6750
+
6751
+        if (typeof image.touchesStart.x === 'undefined' && e) {
6752
+          touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
6753
+          touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
6754
+        } else {
6755
+          touchX = image.touchesStart.x;
6756
+          touchY = image.touchesStart.y;
6757
+        }
6758
+
6759
+        zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6760
+        zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
6761
+        if (e) {
6762
+          slideWidth = gesture.$slideEl[0].offsetWidth;
6763
+          slideHeight = gesture.$slideEl[0].offsetHeight;
6764
+          offsetX = gesture.$slideEl.offset().left;
6765
+          offsetY = gesture.$slideEl.offset().top;
6766
+          diffX = (offsetX + (slideWidth / 2)) - touchX;
6767
+          diffY = (offsetY + (slideHeight / 2)) - touchY;
6768
+
6769
+          imageWidth = gesture.$imageEl[0].offsetWidth;
6770
+          imageHeight = gesture.$imageEl[0].offsetHeight;
6771
+          scaledWidth = imageWidth * zoom.scale;
6772
+          scaledHeight = imageHeight * zoom.scale;
6773
+
6774
+          translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
6775
+          translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
6776
+          translateMaxX = -translateMinX;
6777
+          translateMaxY = -translateMinY;
6778
+
6779
+          translateX = diffX * zoom.scale;
6780
+          translateY = diffY * zoom.scale;
6781
+
6782
+          if (translateX < translateMinX) {
6783
+            translateX = translateMinX;
6784
+          }
6785
+          if (translateX > translateMaxX) {
6786
+            translateX = translateMaxX;
6787
+          }
6788
+
6789
+          if (translateY < translateMinY) {
6790
+            translateY = translateMinY;
6791
+          }
6792
+          if (translateY > translateMaxY) {
6793
+            translateY = translateMaxY;
6794
+          }
6795
+        } else {
6796
+          translateX = 0;
6797
+          translateY = 0;
6798
+        }
6799
+        gesture.$imageWrapEl.transition(300).transform(("translate3d(" + translateX + "px, " + translateY + "px,0)"));
6800
+        gesture.$imageEl.transition(300).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
6801
+      },
6802
+      out: function out() {
6803
+        var swiper = this;
6804
+
6805
+        var zoom = swiper.zoom;
6806
+        var params = swiper.params.zoom;
6807
+        var gesture = zoom.gesture;
6808
+
6809
+        if (!gesture.$slideEl) {
6810
+          if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
6811
+            gesture.$slideEl = swiper.$wrapperEl.children(("." + (swiper.params.slideActiveClass)));
6812
+          } else {
6813
+            gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
6814
+          }
6815
+          gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
6816
+          gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
6817
+        }
6818
+        if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
6819
+
6820
+        zoom.scale = 1;
6821
+        zoom.currentScale = 1;
6822
+        gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
6823
+        gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
6824
+        gesture.$slideEl.removeClass(("" + (params.zoomedSlideClass)));
6825
+        gesture.$slideEl = undefined;
6826
+      },
6827
+      // Attach/Detach Events
6828
+      enable: function enable() {
6829
+        var swiper = this;
6830
+        var zoom = swiper.zoom;
6831
+        if (zoom.enabled) { return; }
6832
+        zoom.enabled = true;
6833
+
6834
+        var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
6835
+        var activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
6836
+
6837
+        var slideSelector = "." + (swiper.params.slideClass);
6838
+
6839
+        // Scale image
6840
+        if (Support.gestures) {
6841
+          swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
6842
+          swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
6843
+          swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
6844
+        } else if (swiper.touchEvents.start === 'touchstart') {
6845
+          swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
6846
+          swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
6847
+          swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
6848
+          if (swiper.touchEvents.cancel) {
6849
+            swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
6850
+          }
6851
+        }
6852
+
6853
+        // Move image
6854
+        swiper.$wrapperEl.on(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove, activeListenerWithCapture);
6855
+      },
6856
+      disable: function disable() {
6857
+        var swiper = this;
6858
+        var zoom = swiper.zoom;
6859
+        if (!zoom.enabled) { return; }
6860
+
6861
+        swiper.zoom.enabled = false;
6862
+
6863
+        var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
6864
+        var activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
6865
+
6866
+        var slideSelector = "." + (swiper.params.slideClass);
6867
+
6868
+        // Scale image
6869
+        if (Support.gestures) {
6870
+          swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
6871
+          swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
6872
+          swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
6873
+        } else if (swiper.touchEvents.start === 'touchstart') {
6874
+          swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
6875
+          swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
6876
+          swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
6877
+          if (swiper.touchEvents.cancel) {
6878
+            swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
6879
+          }
6880
+        }
6881
+
6882
+        // Move image
6883
+        swiper.$wrapperEl.off(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove, activeListenerWithCapture);
6884
+      },
6885
+    };
6886
+
6887
+    var Zoom$1 = {
6888
+      name: 'zoom',
6889
+      params: {
6890
+        zoom: {
6891
+          enabled: false,
6892
+          maxRatio: 3,
6893
+          minRatio: 1,
6894
+          toggle: true,
6895
+          containerClass: 'swiper-zoom-container',
6896
+          zoomedSlideClass: 'swiper-slide-zoomed',
6897
+        },
6898
+      },
6899
+      create: function create() {
6900
+        var swiper = this;
6901
+        var zoom = {
6902
+          enabled: false,
6903
+          scale: 1,
6904
+          currentScale: 1,
6905
+          isScaling: false,
6906
+          gesture: {
6907
+            $slideEl: undefined,
6908
+            slideWidth: undefined,
6909
+            slideHeight: undefined,
6910
+            $imageEl: undefined,
6911
+            $imageWrapEl: undefined,
6912
+            maxRatio: 3,
6913
+          },
6914
+          image: {
6915
+            isTouched: undefined,
6916
+            isMoved: undefined,
6917
+            currentX: undefined,
6918
+            currentY: undefined,
6919
+            minX: undefined,
6920
+            minY: undefined,
6921
+            maxX: undefined,
6922
+            maxY: undefined,
6923
+            width: undefined,
6924
+            height: undefined,
6925
+            startX: undefined,
6926
+            startY: undefined,
6927
+            touchesStart: {},
6928
+            touchesCurrent: {},
6929
+          },
6930
+          velocity: {
6931
+            x: undefined,
6932
+            y: undefined,
6933
+            prevPositionX: undefined,
6934
+            prevPositionY: undefined,
6935
+            prevTime: undefined,
6936
+          },
6937
+        };
6938
+
6939
+        ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {
6940
+          zoom[methodName] = Zoom[methodName].bind(swiper);
6941
+        });
6942
+        Utils.extend(swiper, {
6943
+          zoom: zoom,
6944
+        });
6945
+
6946
+        var scale = 1;
6947
+        Object.defineProperty(swiper.zoom, 'scale', {
6948
+          get: function get() {
6949
+            return scale;
6950
+          },
6951
+          set: function set(value) {
6952
+            if (scale !== value) {
6953
+              var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
6954
+              var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
6955
+              swiper.emit('zoomChange', value, imageEl, slideEl);
6956
+            }
6957
+            scale = value;
6958
+          },
6959
+        });
6960
+      },
6961
+      on: {
6962
+        init: function init() {
6963
+          var swiper = this;
6964
+          if (swiper.params.zoom.enabled) {
6965
+            swiper.zoom.enable();
6966
+          }
6967
+        },
6968
+        destroy: function destroy() {
6969
+          var swiper = this;
6970
+          swiper.zoom.disable();
6971
+        },
6972
+        touchStart: function touchStart(e) {
6973
+          var swiper = this;
6974
+          if (!swiper.zoom.enabled) { return; }
6975
+          swiper.zoom.onTouchStart(e);
6976
+        },
6977
+        touchEnd: function touchEnd(e) {
6978
+          var swiper = this;
6979
+          if (!swiper.zoom.enabled) { return; }
6980
+          swiper.zoom.onTouchEnd(e);
6981
+        },
6982
+        doubleTap: function doubleTap(e) {
6983
+          var swiper = this;
6984
+          if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
6985
+            swiper.zoom.toggle(e);
6986
+          }
6987
+        },
6988
+        transitionEnd: function transitionEnd() {
6989
+          var swiper = this;
6990
+          if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
6991
+            swiper.zoom.onTransitionEnd();
6992
+          }
6993
+        },
6994
+        slideChange: function slideChange() {
6995
+          var swiper = this;
6996
+          if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
6997
+            swiper.zoom.onTransitionEnd();
6998
+          }
6999
+        },
7000
+      },
7001
+    };
7002
+
7003
+    var Lazy = {
7004
+      loadInSlide: function loadInSlide(index, loadInDuplicate) {
7005
+        if ( loadInDuplicate === void 0 ) loadInDuplicate = true;
7006
+
7007
+        var swiper = this;
7008
+        var params = swiper.params.lazy;
7009
+        if (typeof index === 'undefined') { return; }
7010
+        if (swiper.slides.length === 0) { return; }
7011
+        var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
7012
+
7013
+        var $slideEl = isVirtual
7014
+          ? swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]"))
7015
+          : swiper.slides.eq(index);
7016
+
7017
+        var $images = $slideEl.find(("." + (params.elementClass) + ":not(." + (params.loadedClass) + "):not(." + (params.loadingClass) + ")"));
7018
+        if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
7019
+          $images = $images.add($slideEl[0]);
7020
+        }
7021
+        if ($images.length === 0) { return; }
7022
+
7023
+        $images.each(function (imageIndex, imageEl) {
7024
+          var $imageEl = $(imageEl);
7025
+          $imageEl.addClass(params.loadingClass);
7026
+
7027
+          var background = $imageEl.attr('data-background');
7028
+          var src = $imageEl.attr('data-src');
7029
+          var srcset = $imageEl.attr('data-srcset');
7030
+          var sizes = $imageEl.attr('data-sizes');
7031
+          var $pictureEl = $imageEl.parent('picture');
7032
+
7033
+          swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {
7034
+            if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }
7035
+            if (background) {
7036
+              $imageEl.css('background-image', ("url(\"" + background + "\")"));
7037
+              $imageEl.removeAttr('data-background');
7038
+            } else {
7039
+              if (srcset) {
7040
+                $imageEl.attr('srcset', srcset);
7041
+                $imageEl.removeAttr('data-srcset');
7042
+              }
7043
+              if (sizes) {
7044
+                $imageEl.attr('sizes', sizes);
7045
+                $imageEl.removeAttr('data-sizes');
7046
+              }
7047
+              if ($pictureEl.length) {
7048
+                $pictureEl.children('source').each(function (sourceIndex, sourceEl) {
7049
+                  var $source = $(sourceEl);
7050
+
7051
+                  if ($source.attr('data-srcset')) {
7052
+                    $source.attr('srcset', $source.attr('data-srcset'));
7053
+                    $source.removeAttr('data-srcset');
7054
+                  }
7055
+                });
7056
+              }
7057
+              if (src) {
7058
+                $imageEl.attr('src', src);
7059
+                $imageEl.removeAttr('data-src');
7060
+              }
7061
+            }
7062
+
7063
+            $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
7064
+            $slideEl.find(("." + (params.preloaderClass))).remove();
7065
+            if (swiper.params.loop && loadInDuplicate) {
7066
+              var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
7067
+              if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
7068
+                var originalSlide = swiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + (swiper.params.slideDuplicateClass) + ")"));
7069
+                swiper.lazy.loadInSlide(originalSlide.index(), false);
7070
+              } else {
7071
+                var duplicatedSlide = swiper.$wrapperEl.children(("." + (swiper.params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"));
7072
+                swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
7073
+              }
7074
+            }
7075
+            swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
7076
+            if (swiper.params.autoHeight) {
7077
+              swiper.updateAutoHeight();
7078
+            }
7079
+          });
7080
+
7081
+          swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
7082
+        });
7083
+      },
7084
+      load: function load() {
7085
+        var swiper = this;
7086
+        var $wrapperEl = swiper.$wrapperEl;
7087
+        var swiperParams = swiper.params;
7088
+        var slides = swiper.slides;
7089
+        var activeIndex = swiper.activeIndex;
7090
+        var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
7091
+        var params = swiperParams.lazy;
7092
+
7093
+        var slidesPerView = swiperParams.slidesPerView;
7094
+        if (slidesPerView === 'auto') {
7095
+          slidesPerView = 0;
7096
+        }
7097
+
7098
+        function slideExist(index) {
7099
+          if (isVirtual) {
7100
+            if ($wrapperEl.children(("." + (swiperParams.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]")).length) {
7101
+              return true;
7102
+            }
7103
+          } else if (slides[index]) { return true; }
7104
+          return false;
7105
+        }
7106
+
7107
+        function slideIndex(slideEl) {
7108
+          if (isVirtual) {
7109
+            return $(slideEl).attr('data-swiper-slide-index');
7110
+          }
7111
+          return $(slideEl).index();
7112
+        }
7113
+
7114
+        if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }
7115
+        if (swiper.params.watchSlidesVisibility) {
7116
+          $wrapperEl.children(("." + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {
7117
+            var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
7118
+            swiper.lazy.loadInSlide(index);
7119
+          });
7120
+        } else if (slidesPerView > 1) {
7121
+          for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
7122
+            if (slideExist(i)) { swiper.lazy.loadInSlide(i); }
7123
+          }
7124
+        } else {
7125
+          swiper.lazy.loadInSlide(activeIndex);
7126
+        }
7127
+        if (params.loadPrevNext) {
7128
+          if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
7129
+            var amount = params.loadPrevNextAmount;
7130
+            var spv = slidesPerView;
7131
+            var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
7132
+            var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
7133
+            // Next Slides
7134
+            for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {
7135
+              if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }
7136
+            }
7137
+            // Prev Slides
7138
+            for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {
7139
+              if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }
7140
+            }
7141
+          } else {
7142
+            var nextSlide = $wrapperEl.children(("." + (swiperParams.slideNextClass)));
7143
+            if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }
7144
+
7145
+            var prevSlide = $wrapperEl.children(("." + (swiperParams.slidePrevClass)));
7146
+            if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }
7147
+          }
7148
+        }
7149
+      },
7150
+    };
7151
+
7152
+    var Lazy$1 = {
7153
+      name: 'lazy',
7154
+      params: {
7155
+        lazy: {
7156
+          enabled: false,
7157
+          loadPrevNext: false,
7158
+          loadPrevNextAmount: 1,
7159
+          loadOnTransitionStart: false,
7160
+
7161
+          elementClass: 'swiper-lazy',
7162
+          loadingClass: 'swiper-lazy-loading',
7163
+          loadedClass: 'swiper-lazy-loaded',
7164
+          preloaderClass: 'swiper-lazy-preloader',
7165
+        },
7166
+      },
7167
+      create: function create() {
7168
+        var swiper = this;
7169
+        Utils.extend(swiper, {
7170
+          lazy: {
7171
+            initialImageLoaded: false,
7172
+            load: Lazy.load.bind(swiper),
7173
+            loadInSlide: Lazy.loadInSlide.bind(swiper),
7174
+          },
7175
+        });
7176
+      },
7177
+      on: {
7178
+        beforeInit: function beforeInit() {
7179
+          var swiper = this;
7180
+          if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
7181
+            swiper.params.preloadImages = false;
7182
+          }
7183
+        },
7184
+        init: function init() {
7185
+          var swiper = this;
7186
+          if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
7187
+            swiper.lazy.load();
7188
+          }
7189
+        },
7190
+        scroll: function scroll() {
7191
+          var swiper = this;
7192
+          if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
7193
+            swiper.lazy.load();
7194
+          }
7195
+        },
7196
+        resize: function resize() {
7197
+          var swiper = this;
7198
+          if (swiper.params.lazy.enabled) {
7199
+            swiper.lazy.load();
7200
+          }
7201
+        },
7202
+        scrollbarDragMove: function scrollbarDragMove() {
7203
+          var swiper = this;
7204
+          if (swiper.params.lazy.enabled) {
7205
+            swiper.lazy.load();
7206
+          }
7207
+        },
7208
+        transitionStart: function transitionStart() {
7209
+          var swiper = this;
7210
+          if (swiper.params.lazy.enabled) {
7211
+            if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
7212
+              swiper.lazy.load();
7213
+            }
7214
+          }
7215
+        },
7216
+        transitionEnd: function transitionEnd() {
7217
+          var swiper = this;
7218
+          if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
7219
+            swiper.lazy.load();
7220
+          }
7221
+        },
7222
+        slideChange: function slideChange() {
7223
+          var swiper = this;
7224
+          if (swiper.params.lazy.enabled && swiper.params.cssMode) {
7225
+            swiper.lazy.load();
7226
+          }
7227
+        },
7228
+      },
7229
+    };
7230
+
7231
+    /* eslint no-bitwise: ["error", { "allow": [">>"] }] */
7232
+
7233
+    var Controller = {
7234
+      LinearSpline: function LinearSpline(x, y) {
7235
+        var binarySearch = (function search() {
7236
+          var maxIndex;
7237
+          var minIndex;
7238
+          var guess;
7239
+          return function (array, val) {
7240
+            minIndex = -1;
7241
+            maxIndex = array.length;
7242
+            while (maxIndex - minIndex > 1) {
7243
+              guess = maxIndex + minIndex >> 1;
7244
+              if (array[guess] <= val) {
7245
+                minIndex = guess;
7246
+              } else {
7247
+                maxIndex = guess;
7248
+              }
7249
+            }
7250
+            return maxIndex;
7251
+          };
7252
+        }());
7253
+        this.x = x;
7254
+        this.y = y;
7255
+        this.lastIndex = x.length - 1;
7256
+        // Given an x value (x2), return the expected y2 value:
7257
+        // (x1,y1) is the known point before given value,
7258
+        // (x3,y3) is the known point after given value.
7259
+        var i1;
7260
+        var i3;
7261
+
7262
+        this.interpolate = function interpolate(x2) {
7263
+          if (!x2) { return 0; }
7264
+
7265
+          // Get the indexes of x1 and x3 (the array indexes before and after given x2):
7266
+          i3 = binarySearch(this.x, x2);
7267
+          i1 = i3 - 1;
7268
+
7269
+          // We have our indexes i1 & i3, so we can calculate already:
7270
+          // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
7271
+          return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
7272
+        };
7273
+        return this;
7274
+      },
7275
+      // xxx: for now i will just save one spline function to to
7276
+      getInterpolateFunction: function getInterpolateFunction(c) {
7277
+        var swiper = this;
7278
+        if (!swiper.controller.spline) {
7279
+          swiper.controller.spline = swiper.params.loop
7280
+            ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
7281
+            : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
7282
+        }
7283
+      },
7284
+      setTranslate: function setTranslate(setTranslate$1, byController) {
7285
+        var swiper = this;
7286
+        var controlled = swiper.controller.control;
7287
+        var multiplier;
7288
+        var controlledTranslate;
7289
+        function setControlledTranslate(c) {
7290
+          // this will create an Interpolate function based on the snapGrids
7291
+          // x is the Grid of the scrolled scroller and y will be the controlled scroller
7292
+          // it makes sense to create this only once and recall it for the interpolation
7293
+          // the function does a lot of value caching for performance
7294
+          var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
7295
+          if (swiper.params.controller.by === 'slide') {
7296
+            swiper.controller.getInterpolateFunction(c);
7297
+            // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
7298
+            // but it did not work out
7299
+            controlledTranslate = -swiper.controller.spline.interpolate(-translate);
7300
+          }
7301
+
7302
+          if (!controlledTranslate || swiper.params.controller.by === 'container') {
7303
+            multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
7304
+            controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
7305
+          }
7306
+
7307
+          if (swiper.params.controller.inverse) {
7308
+            controlledTranslate = c.maxTranslate() - controlledTranslate;
7309
+          }
7310
+          c.updateProgress(controlledTranslate);
7311
+          c.setTranslate(controlledTranslate, swiper);
7312
+          c.updateActiveIndex();
7313
+          c.updateSlidesClasses();
7314
+        }
7315
+        if (Array.isArray(controlled)) {
7316
+          for (var i = 0; i < controlled.length; i += 1) {
7317
+            if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
7318
+              setControlledTranslate(controlled[i]);
7319
+            }
7320
+          }
7321
+        } else if (controlled instanceof Swiper && byController !== controlled) {
7322
+          setControlledTranslate(controlled);
7323
+        }
7324
+      },
7325
+      setTransition: function setTransition(duration, byController) {
7326
+        var swiper = this;
7327
+        var controlled = swiper.controller.control;
7328
+        var i;
7329
+        function setControlledTransition(c) {
7330
+          c.setTransition(duration, swiper);
7331
+          if (duration !== 0) {
7332
+            c.transitionStart();
7333
+            if (c.params.autoHeight) {
7334
+              Utils.nextTick(function () {
7335
+                c.updateAutoHeight();
7336
+              });
7337
+            }
7338
+            c.$wrapperEl.transitionEnd(function () {
7339
+              if (!controlled) { return; }
7340
+              if (c.params.loop && swiper.params.controller.by === 'slide') {
7341
+                c.loopFix();
7342
+              }
7343
+              c.transitionEnd();
7344
+            });
7345
+          }
7346
+        }
7347
+        if (Array.isArray(controlled)) {
7348
+          for (i = 0; i < controlled.length; i += 1) {
7349
+            if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
7350
+              setControlledTransition(controlled[i]);
7351
+            }
7352
+          }
7353
+        } else if (controlled instanceof Swiper && byController !== controlled) {
7354
+          setControlledTransition(controlled);
7355
+        }
7356
+      },
7357
+    };
7358
+    var Controller$1 = {
7359
+      name: 'controller',
7360
+      params: {
7361
+        controller: {
7362
+          control: undefined,
7363
+          inverse: false,
7364
+          by: 'slide', // or 'container'
7365
+        },
7366
+      },
7367
+      create: function create() {
7368
+        var swiper = this;
7369
+        Utils.extend(swiper, {
7370
+          controller: {
7371
+            control: swiper.params.controller.control,
7372
+            getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
7373
+            setTranslate: Controller.setTranslate.bind(swiper),
7374
+            setTransition: Controller.setTransition.bind(swiper),
7375
+          },
7376
+        });
7377
+      },
7378
+      on: {
7379
+        update: function update() {
7380
+          var swiper = this;
7381
+          if (!swiper.controller.control) { return; }
7382
+          if (swiper.controller.spline) {
7383
+            swiper.controller.spline = undefined;
7384
+            delete swiper.controller.spline;
7385
+          }
7386
+        },
7387
+        resize: function resize() {
7388
+          var swiper = this;
7389
+          if (!swiper.controller.control) { return; }
7390
+          if (swiper.controller.spline) {
7391
+            swiper.controller.spline = undefined;
7392
+            delete swiper.controller.spline;
7393
+          }
7394
+        },
7395
+        observerUpdate: function observerUpdate() {
7396
+          var swiper = this;
7397
+          if (!swiper.controller.control) { return; }
7398
+          if (swiper.controller.spline) {
7399
+            swiper.controller.spline = undefined;
7400
+            delete swiper.controller.spline;
7401
+          }
7402
+        },
7403
+        setTranslate: function setTranslate(translate, byController) {
7404
+          var swiper = this;
7405
+          if (!swiper.controller.control) { return; }
7406
+          swiper.controller.setTranslate(translate, byController);
7407
+        },
7408
+        setTransition: function setTransition(duration, byController) {
7409
+          var swiper = this;
7410
+          if (!swiper.controller.control) { return; }
7411
+          swiper.controller.setTransition(duration, byController);
7412
+        },
7413
+      },
7414
+    };
7415
+
7416
+    var a11y = {
7417
+      makeElFocusable: function makeElFocusable($el) {
7418
+        $el.attr('tabIndex', '0');
7419
+        return $el;
7420
+      },
7421
+      makeElNotFocusable: function makeElNotFocusable($el) {
7422
+        $el.attr('tabIndex', '-1');
7423
+        return $el;
7424
+      },
7425
+      addElRole: function addElRole($el, role) {
7426
+        $el.attr('role', role);
7427
+        return $el;
7428
+      },
7429
+      addElLabel: function addElLabel($el, label) {
7430
+        $el.attr('aria-label', label);
7431
+        return $el;
7432
+      },
7433
+      disableEl: function disableEl($el) {
7434
+        $el.attr('aria-disabled', true);
7435
+        return $el;
7436
+      },
7437
+      enableEl: function enableEl($el) {
7438
+        $el.attr('aria-disabled', false);
7439
+        return $el;
7440
+      },
7441
+      onEnterKey: function onEnterKey(e) {
7442
+        var swiper = this;
7443
+        var params = swiper.params.a11y;
7444
+        if (e.keyCode !== 13) { return; }
7445
+        var $targetEl = $(e.target);
7446
+        if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
7447
+          if (!(swiper.isEnd && !swiper.params.loop)) {
7448
+            swiper.slideNext();
7449
+          }
7450
+          if (swiper.isEnd) {
7451
+            swiper.a11y.notify(params.lastSlideMessage);
7452
+          } else {
7453
+            swiper.a11y.notify(params.nextSlideMessage);
7454
+          }
7455
+        }
7456
+        if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
7457
+          if (!(swiper.isBeginning && !swiper.params.loop)) {
7458
+            swiper.slidePrev();
7459
+          }
7460
+          if (swiper.isBeginning) {
7461
+            swiper.a11y.notify(params.firstSlideMessage);
7462
+          } else {
7463
+            swiper.a11y.notify(params.prevSlideMessage);
7464
+          }
7465
+        }
7466
+        if (swiper.pagination && $targetEl.is(("." + (swiper.params.pagination.bulletClass)))) {
7467
+          $targetEl[0].click();
7468
+        }
7469
+      },
7470
+      notify: function notify(message) {
7471
+        var swiper = this;
7472
+        var notification = swiper.a11y.liveRegion;
7473
+        if (notification.length === 0) { return; }
7474
+        notification.html('');
7475
+        notification.html(message);
7476
+      },
7477
+      updateNavigation: function updateNavigation() {
7478
+        var swiper = this;
7479
+
7480
+        if (swiper.params.loop || !swiper.navigation) { return; }
7481
+        var ref = swiper.navigation;
7482
+        var $nextEl = ref.$nextEl;
7483
+        var $prevEl = ref.$prevEl;
7484
+
7485
+        if ($prevEl && $prevEl.length > 0) {
7486
+          if (swiper.isBeginning) {
7487
+            swiper.a11y.disableEl($prevEl);
7488
+            swiper.a11y.makeElNotFocusable($prevEl);
7489
+          } else {
7490
+            swiper.a11y.enableEl($prevEl);
7491
+            swiper.a11y.makeElFocusable($prevEl);
7492
+          }
7493
+        }
7494
+        if ($nextEl && $nextEl.length > 0) {
7495
+          if (swiper.isEnd) {
7496
+            swiper.a11y.disableEl($nextEl);
7497
+            swiper.a11y.makeElNotFocusable($nextEl);
7498
+          } else {
7499
+            swiper.a11y.enableEl($nextEl);
7500
+            swiper.a11y.makeElFocusable($nextEl);
7501
+          }
7502
+        }
7503
+      },
7504
+      updatePagination: function updatePagination() {
7505
+        var swiper = this;
7506
+        var params = swiper.params.a11y;
7507
+        if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7508
+          swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
7509
+            var $bulletEl = $(bulletEl);
7510
+            swiper.a11y.makeElFocusable($bulletEl);
7511
+            swiper.a11y.addElRole($bulletEl, 'button');
7512
+            swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
7513
+          });
7514
+        }
7515
+      },
7516
+      init: function init() {
7517
+        var swiper = this;
7518
+
7519
+        swiper.$el.append(swiper.a11y.liveRegion);
7520
+
7521
+        // Navigation
7522
+        var params = swiper.params.a11y;
7523
+        var $nextEl;
7524
+        var $prevEl;
7525
+        if (swiper.navigation && swiper.navigation.$nextEl) {
7526
+          $nextEl = swiper.navigation.$nextEl;
7527
+        }
7528
+        if (swiper.navigation && swiper.navigation.$prevEl) {
7529
+          $prevEl = swiper.navigation.$prevEl;
7530
+        }
7531
+        if ($nextEl) {
7532
+          swiper.a11y.makeElFocusable($nextEl);
7533
+          swiper.a11y.addElRole($nextEl, 'button');
7534
+          swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
7535
+          $nextEl.on('keydown', swiper.a11y.onEnterKey);
7536
+        }
7537
+        if ($prevEl) {
7538
+          swiper.a11y.makeElFocusable($prevEl);
7539
+          swiper.a11y.addElRole($prevEl, 'button');
7540
+          swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
7541
+          $prevEl.on('keydown', swiper.a11y.onEnterKey);
7542
+        }
7543
+
7544
+        // Pagination
7545
+        if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7546
+          swiper.pagination.$el.on('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
7547
+        }
7548
+      },
7549
+      destroy: function destroy() {
7550
+        var swiper = this;
7551
+        if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }
7552
+
7553
+        var $nextEl;
7554
+        var $prevEl;
7555
+        if (swiper.navigation && swiper.navigation.$nextEl) {
7556
+          $nextEl = swiper.navigation.$nextEl;
7557
+        }
7558
+        if (swiper.navigation && swiper.navigation.$prevEl) {
7559
+          $prevEl = swiper.navigation.$prevEl;
7560
+        }
7561
+        if ($nextEl) {
7562
+          $nextEl.off('keydown', swiper.a11y.onEnterKey);
7563
+        }
7564
+        if ($prevEl) {
7565
+          $prevEl.off('keydown', swiper.a11y.onEnterKey);
7566
+        }
7567
+
7568
+        // Pagination
7569
+        if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
7570
+          swiper.pagination.$el.off('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
7571
+        }
7572
+      },
7573
+    };
7574
+    var A11y = {
7575
+      name: 'a11y',
7576
+      params: {
7577
+        a11y: {
7578
+          enabled: true,
7579
+          notificationClass: 'swiper-notification',
7580
+          prevSlideMessage: 'Previous slide',
7581
+          nextSlideMessage: 'Next slide',
7582
+          firstSlideMessage: 'This is the first slide',
7583
+          lastSlideMessage: 'This is the last slide',
7584
+          paginationBulletMessage: 'Go to slide {{index}}',
7585
+        },
7586
+      },
7587
+      create: function create() {
7588
+        var swiper = this;
7589
+        Utils.extend(swiper, {
7590
+          a11y: {
7591
+            liveRegion: $(("<span class=\"" + (swiper.params.a11y.notificationClass) + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>")),
7592
+          },
7593
+        });
7594
+        Object.keys(a11y).forEach(function (methodName) {
7595
+          swiper.a11y[methodName] = a11y[methodName].bind(swiper);
7596
+        });
7597
+      },
7598
+      on: {
7599
+        init: function init() {
7600
+          var swiper = this;
7601
+          if (!swiper.params.a11y.enabled) { return; }
7602
+          swiper.a11y.init();
7603
+          swiper.a11y.updateNavigation();
7604
+        },
7605
+        toEdge: function toEdge() {
7606
+          var swiper = this;
7607
+          if (!swiper.params.a11y.enabled) { return; }
7608
+          swiper.a11y.updateNavigation();
7609
+        },
7610
+        fromEdge: function fromEdge() {
7611
+          var swiper = this;
7612
+          if (!swiper.params.a11y.enabled) { return; }
7613
+          swiper.a11y.updateNavigation();
7614
+        },
7615
+        paginationUpdate: function paginationUpdate() {
7616
+          var swiper = this;
7617
+          if (!swiper.params.a11y.enabled) { return; }
7618
+          swiper.a11y.updatePagination();
7619
+        },
7620
+        destroy: function destroy() {
7621
+          var swiper = this;
7622
+          if (!swiper.params.a11y.enabled) { return; }
7623
+          swiper.a11y.destroy();
7624
+        },
7625
+      },
7626
+    };
7627
+
7628
+    var History = {
7629
+      init: function init() {
7630
+        var swiper = this;
7631
+        if (!swiper.params.history) { return; }
7632
+        if (!win.history || !win.history.pushState) {
7633
+          swiper.params.history.enabled = false;
7634
+          swiper.params.hashNavigation.enabled = true;
7635
+          return;
7636
+        }
7637
+        var history = swiper.history;
7638
+        history.initialized = true;
7639
+        history.paths = History.getPathValues();
7640
+        if (!history.paths.key && !history.paths.value) { return; }
7641
+        history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
7642
+        if (!swiper.params.history.replaceState) {
7643
+          win.addEventListener('popstate', swiper.history.setHistoryPopState);
7644
+        }
7645
+      },
7646
+      destroy: function destroy() {
7647
+        var swiper = this;
7648
+        if (!swiper.params.history.replaceState) {
7649
+          win.removeEventListener('popstate', swiper.history.setHistoryPopState);
7650
+        }
7651
+      },
7652
+      setHistoryPopState: function setHistoryPopState() {
7653
+        var swiper = this;
7654
+        swiper.history.paths = History.getPathValues();
7655
+        swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
7656
+      },
7657
+      getPathValues: function getPathValues() {
7658
+        var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });
7659
+        var total = pathArray.length;
7660
+        var key = pathArray[total - 2];
7661
+        var value = pathArray[total - 1];
7662
+        return { key: key, value: value };
7663
+      },
7664
+      setHistory: function setHistory(key, index) {
7665
+        var swiper = this;
7666
+        if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }
7667
+        var slide = swiper.slides.eq(index);
7668
+        var value = History.slugify(slide.attr('data-history'));
7669
+        if (!win.location.pathname.includes(key)) {
7670
+          value = key + "/" + value;
7671
+        }
7672
+        var currentState = win.history.state;
7673
+        if (currentState && currentState.value === value) {
7674
+          return;
7675
+        }
7676
+        if (swiper.params.history.replaceState) {
7677
+          win.history.replaceState({ value: value }, null, value);
7678
+        } else {
7679
+          win.history.pushState({ value: value }, null, value);
7680
+        }
7681
+      },
7682
+      slugify: function slugify(text) {
7683
+        return text.toString()
7684
+          .replace(/\s+/g, '-')
7685
+          .replace(/[^\w-]+/g, '')
7686
+          .replace(/--+/g, '-')
7687
+          .replace(/^-+/, '')
7688
+          .replace(/-+$/, '');
7689
+      },
7690
+      scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
7691
+        var swiper = this;
7692
+        if (value) {
7693
+          for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
7694
+            var slide = swiper.slides.eq(i);
7695
+            var slideHistory = History.slugify(slide.attr('data-history'));
7696
+            if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
7697
+              var index = slide.index();
7698
+              swiper.slideTo(index, speed, runCallbacks);
7699
+            }
7700
+          }
7701
+        } else {
7702
+          swiper.slideTo(0, speed, runCallbacks);
7703
+        }
7704
+      },
7705
+    };
7706
+
7707
+    var History$1 = {
7708
+      name: 'history',
7709
+      params: {
7710
+        history: {
7711
+          enabled: false,
7712
+          replaceState: false,
7713
+          key: 'slides',
7714
+        },
7715
+      },
7716
+      create: function create() {
7717
+        var swiper = this;
7718
+        Utils.extend(swiper, {
7719
+          history: {
7720
+            init: History.init.bind(swiper),
7721
+            setHistory: History.setHistory.bind(swiper),
7722
+            setHistoryPopState: History.setHistoryPopState.bind(swiper),
7723
+            scrollToSlide: History.scrollToSlide.bind(swiper),
7724
+            destroy: History.destroy.bind(swiper),
7725
+          },
7726
+        });
7727
+      },
7728
+      on: {
7729
+        init: function init() {
7730
+          var swiper = this;
7731
+          if (swiper.params.history.enabled) {
7732
+            swiper.history.init();
7733
+          }
7734
+        },
7735
+        destroy: function destroy() {
7736
+          var swiper = this;
7737
+          if (swiper.params.history.enabled) {
7738
+            swiper.history.destroy();
7739
+          }
7740
+        },
7741
+        transitionEnd: function transitionEnd() {
7742
+          var swiper = this;
7743
+          if (swiper.history.initialized) {
7744
+            swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
7745
+          }
7746
+        },
7747
+        slideChange: function slideChange() {
7748
+          var swiper = this;
7749
+          if (swiper.history.initialized && swiper.params.cssMode) {
7750
+            swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
7751
+          }
7752
+        },
7753
+      },
7754
+    };
7755
+
7756
+    var HashNavigation = {
7757
+      onHashCange: function onHashCange() {
7758
+        var swiper = this;
7759
+        swiper.emit('hashChange');
7760
+        var newHash = doc.location.hash.replace('#', '');
7761
+        var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
7762
+        if (newHash !== activeSlideHash) {
7763
+          var newIndex = swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-hash=\"" + newHash + "\"]")).index();
7764
+          if (typeof newIndex === 'undefined') { return; }
7765
+          swiper.slideTo(newIndex);
7766
+        }
7767
+      },
7768
+      setHash: function setHash() {
7769
+        var swiper = this;
7770
+        if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }
7771
+        if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
7772
+          win.history.replaceState(null, null, (("#" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || ''));
7773
+          swiper.emit('hashSet');
7774
+        } else {
7775
+          var slide = swiper.slides.eq(swiper.activeIndex);
7776
+          var hash = slide.attr('data-hash') || slide.attr('data-history');
7777
+          doc.location.hash = hash || '';
7778
+          swiper.emit('hashSet');
7779
+        }
7780
+      },
7781
+      init: function init() {
7782
+        var swiper = this;
7783
+        if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }
7784
+        swiper.hashNavigation.initialized = true;
7785
+        var hash = doc.location.hash.replace('#', '');
7786
+        if (hash) {
7787
+          var speed = 0;
7788
+          for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
7789
+            var slide = swiper.slides.eq(i);
7790
+            var slideHash = slide.attr('data-hash') || slide.attr('data-history');
7791
+            if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
7792
+              var index = slide.index();
7793
+              swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
7794
+            }
7795
+          }
7796
+        }
7797
+        if (swiper.params.hashNavigation.watchState) {
7798
+          $(win).on('hashchange', swiper.hashNavigation.onHashCange);
7799
+        }
7800
+      },
7801
+      destroy: function destroy() {
7802
+        var swiper = this;
7803
+        if (swiper.params.hashNavigation.watchState) {
7804
+          $(win).off('hashchange', swiper.hashNavigation.onHashCange);
7805
+        }
7806
+      },
7807
+    };
7808
+    var HashNavigation$1 = {
7809
+      name: 'hash-navigation',
7810
+      params: {
7811
+        hashNavigation: {
7812
+          enabled: false,
7813
+          replaceState: false,
7814
+          watchState: false,
7815
+        },
7816
+      },
7817
+      create: function create() {
7818
+        var swiper = this;
7819
+        Utils.extend(swiper, {
7820
+          hashNavigation: {
7821
+            initialized: false,
7822
+            init: HashNavigation.init.bind(swiper),
7823
+            destroy: HashNavigation.destroy.bind(swiper),
7824
+            setHash: HashNavigation.setHash.bind(swiper),
7825
+            onHashCange: HashNavigation.onHashCange.bind(swiper),
7826
+          },
7827
+        });
7828
+      },
7829
+      on: {
7830
+        init: function init() {
7831
+          var swiper = this;
7832
+          if (swiper.params.hashNavigation.enabled) {
7833
+            swiper.hashNavigation.init();
7834
+          }
7835
+        },
7836
+        destroy: function destroy() {
7837
+          var swiper = this;
7838
+          if (swiper.params.hashNavigation.enabled) {
7839
+            swiper.hashNavigation.destroy();
7840
+          }
7841
+        },
7842
+        transitionEnd: function transitionEnd() {
7843
+          var swiper = this;
7844
+          if (swiper.hashNavigation.initialized) {
7845
+            swiper.hashNavigation.setHash();
7846
+          }
7847
+        },
7848
+        slideChange: function slideChange() {
7849
+          var swiper = this;
7850
+          if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
7851
+            swiper.hashNavigation.setHash();
7852
+          }
7853
+        },
7854
+      },
7855
+    };
7856
+
7857
+    /* eslint no-underscore-dangle: "off" */
7858
+
7859
+    var Autoplay = {
7860
+      run: function run() {
7861
+        var swiper = this;
7862
+        var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
7863
+        var delay = swiper.params.autoplay.delay;
7864
+        if ($activeSlideEl.attr('data-swiper-autoplay')) {
7865
+          delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
7866
+        }
7867
+        clearTimeout(swiper.autoplay.timeout);
7868
+        swiper.autoplay.timeout = Utils.nextTick(function () {
7869
+          if (swiper.params.autoplay.reverseDirection) {
7870
+            if (swiper.params.loop) {
7871
+              swiper.loopFix();
7872
+              swiper.slidePrev(swiper.params.speed, true, true);
7873
+              swiper.emit('autoplay');
7874
+            } else if (!swiper.isBeginning) {
7875
+              swiper.slidePrev(swiper.params.speed, true, true);
7876
+              swiper.emit('autoplay');
7877
+            } else if (!swiper.params.autoplay.stopOnLastSlide) {
7878
+              swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
7879
+              swiper.emit('autoplay');
7880
+            } else {
7881
+              swiper.autoplay.stop();
7882
+            }
7883
+          } else if (swiper.params.loop) {
7884
+            swiper.loopFix();
7885
+            swiper.slideNext(swiper.params.speed, true, true);
7886
+            swiper.emit('autoplay');
7887
+          } else if (!swiper.isEnd) {
7888
+            swiper.slideNext(swiper.params.speed, true, true);
7889
+            swiper.emit('autoplay');
7890
+          } else if (!swiper.params.autoplay.stopOnLastSlide) {
7891
+            swiper.slideTo(0, swiper.params.speed, true, true);
7892
+            swiper.emit('autoplay');
7893
+          } else {
7894
+            swiper.autoplay.stop();
7895
+          }
7896
+          if (swiper.params.cssMode && swiper.autoplay.running) { swiper.autoplay.run(); }
7897
+        }, delay);
7898
+      },
7899
+      start: function start() {
7900
+        var swiper = this;
7901
+        if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }
7902
+        if (swiper.autoplay.running) { return false; }
7903
+        swiper.autoplay.running = true;
7904
+        swiper.emit('autoplayStart');
7905
+        swiper.autoplay.run();
7906
+        return true;
7907
+      },
7908
+      stop: function stop() {
7909
+        var swiper = this;
7910
+        if (!swiper.autoplay.running) { return false; }
7911
+        if (typeof swiper.autoplay.timeout === 'undefined') { return false; }
7912
+
7913
+        if (swiper.autoplay.timeout) {
7914
+          clearTimeout(swiper.autoplay.timeout);
7915
+          swiper.autoplay.timeout = undefined;
7916
+        }
7917
+        swiper.autoplay.running = false;
7918
+        swiper.emit('autoplayStop');
7919
+        return true;
7920
+      },
7921
+      pause: function pause(speed) {
7922
+        var swiper = this;
7923
+        if (!swiper.autoplay.running) { return; }
7924
+        if (swiper.autoplay.paused) { return; }
7925
+        if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }
7926
+        swiper.autoplay.paused = true;
7927
+        if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
7928
+          swiper.autoplay.paused = false;
7929
+          swiper.autoplay.run();
7930
+        } else {
7931
+          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
7932
+          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
7933
+        }
7934
+      },
7935
+    };
7936
+
7937
+    var Autoplay$1 = {
7938
+      name: 'autoplay',
7939
+      params: {
7940
+        autoplay: {
7941
+          enabled: false,
7942
+          delay: 3000,
7943
+          waitForTransition: true,
7944
+          disableOnInteraction: true,
7945
+          stopOnLastSlide: false,
7946
+          reverseDirection: false,
7947
+        },
7948
+      },
7949
+      create: function create() {
7950
+        var swiper = this;
7951
+        Utils.extend(swiper, {
7952
+          autoplay: {
7953
+            running: false,
7954
+            paused: false,
7955
+            run: Autoplay.run.bind(swiper),
7956
+            start: Autoplay.start.bind(swiper),
7957
+            stop: Autoplay.stop.bind(swiper),
7958
+            pause: Autoplay.pause.bind(swiper),
7959
+            onVisibilityChange: function onVisibilityChange() {
7960
+              if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
7961
+                swiper.autoplay.pause();
7962
+              }
7963
+              if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
7964
+                swiper.autoplay.run();
7965
+                swiper.autoplay.paused = false;
7966
+              }
7967
+            },
7968
+            onTransitionEnd: function onTransitionEnd(e) {
7969
+              if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }
7970
+              if (e.target !== this) { return; }
7971
+              swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
7972
+              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
7973
+              swiper.autoplay.paused = false;
7974
+              if (!swiper.autoplay.running) {
7975
+                swiper.autoplay.stop();
7976
+              } else {
7977
+                swiper.autoplay.run();
7978
+              }
7979
+            },
7980
+          },
7981
+        });
7982
+      },
7983
+      on: {
7984
+        init: function init() {
7985
+          var swiper = this;
7986
+          if (swiper.params.autoplay.enabled) {
7987
+            swiper.autoplay.start();
7988
+            document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
7989
+          }
7990
+        },
7991
+        beforeTransitionStart: function beforeTransitionStart(speed, internal) {
7992
+          var swiper = this;
7993
+          if (swiper.autoplay.running) {
7994
+            if (internal || !swiper.params.autoplay.disableOnInteraction) {
7995
+              swiper.autoplay.pause(speed);
7996
+            } else {
7997
+              swiper.autoplay.stop();
7998
+            }
7999
+          }
8000
+        },
8001
+        sliderFirstMove: function sliderFirstMove() {
8002
+          var swiper = this;
8003
+          if (swiper.autoplay.running) {
8004
+            if (swiper.params.autoplay.disableOnInteraction) {
8005
+              swiper.autoplay.stop();
8006
+            } else {
8007
+              swiper.autoplay.pause();
8008
+            }
8009
+          }
8010
+        },
8011
+        touchEnd: function touchEnd() {
8012
+          var swiper = this;
8013
+          if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
8014
+            swiper.autoplay.run();
8015
+          }
8016
+        },
8017
+        destroy: function destroy() {
8018
+          var swiper = this;
8019
+          if (swiper.autoplay.running) {
8020
+            swiper.autoplay.stop();
8021
+          }
8022
+          document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
8023
+        },
8024
+      },
8025
+    };
8026
+
8027
+    var Fade = {
8028
+      setTranslate: function setTranslate() {
8029
+        var swiper = this;
8030
+        var slides = swiper.slides;
8031
+        for (var i = 0; i < slides.length; i += 1) {
8032
+          var $slideEl = swiper.slides.eq(i);
8033
+          var offset = $slideEl[0].swiperSlideOffset;
8034
+          var tx = -offset;
8035
+          if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }
8036
+          var ty = 0;
8037
+          if (!swiper.isHorizontal()) {
8038
+            ty = tx;
8039
+            tx = 0;
8040
+          }
8041
+          var slideOpacity = swiper.params.fadeEffect.crossFade
8042
+            ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
8043
+            : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
8044
+          $slideEl
8045
+            .css({
8046
+              opacity: slideOpacity,
8047
+            })
8048
+            .transform(("translate3d(" + tx + "px, " + ty + "px, 0px)"));
8049
+        }
8050
+      },
8051
+      setTransition: function setTransition(duration) {
8052
+        var swiper = this;
8053
+        var slides = swiper.slides;
8054
+        var $wrapperEl = swiper.$wrapperEl;
8055
+        slides.transition(duration);
8056
+        if (swiper.params.virtualTranslate && duration !== 0) {
8057
+          var eventTriggered = false;
8058
+          slides.transitionEnd(function () {
8059
+            if (eventTriggered) { return; }
8060
+            if (!swiper || swiper.destroyed) { return; }
8061
+            eventTriggered = true;
8062
+            swiper.animating = false;
8063
+            var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
8064
+            for (var i = 0; i < triggerEvents.length; i += 1) {
8065
+              $wrapperEl.trigger(triggerEvents[i]);
8066
+            }
8067
+          });
8068
+        }
8069
+      },
8070
+    };
8071
+
8072
+    var EffectFade = {
8073
+      name: 'effect-fade',
8074
+      params: {
8075
+        fadeEffect: {
8076
+          crossFade: false,
8077
+        },
8078
+      },
8079
+      create: function create() {
8080
+        var swiper = this;
8081
+        Utils.extend(swiper, {
8082
+          fadeEffect: {
8083
+            setTranslate: Fade.setTranslate.bind(swiper),
8084
+            setTransition: Fade.setTransition.bind(swiper),
8085
+          },
8086
+        });
8087
+      },
8088
+      on: {
8089
+        beforeInit: function beforeInit() {
8090
+          var swiper = this;
8091
+          if (swiper.params.effect !== 'fade') { return; }
8092
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "fade"));
8093
+          var overwriteParams = {
8094
+            slidesPerView: 1,
8095
+            slidesPerColumn: 1,
8096
+            slidesPerGroup: 1,
8097
+            watchSlidesProgress: true,
8098
+            spaceBetween: 0,
8099
+            virtualTranslate: true,
8100
+          };
8101
+          Utils.extend(swiper.params, overwriteParams);
8102
+          Utils.extend(swiper.originalParams, overwriteParams);
8103
+        },
8104
+        setTranslate: function setTranslate() {
8105
+          var swiper = this;
8106
+          if (swiper.params.effect !== 'fade') { return; }
8107
+          swiper.fadeEffect.setTranslate();
8108
+        },
8109
+        setTransition: function setTransition(duration) {
8110
+          var swiper = this;
8111
+          if (swiper.params.effect !== 'fade') { return; }
8112
+          swiper.fadeEffect.setTransition(duration);
8113
+        },
8114
+      },
8115
+    };
8116
+
8117
+    var Cube = {
8118
+      setTranslate: function setTranslate() {
8119
+        var swiper = this;
8120
+        var $el = swiper.$el;
8121
+        var $wrapperEl = swiper.$wrapperEl;
8122
+        var slides = swiper.slides;
8123
+        var swiperWidth = swiper.width;
8124
+        var swiperHeight = swiper.height;
8125
+        var rtl = swiper.rtlTranslate;
8126
+        var swiperSize = swiper.size;
8127
+        var params = swiper.params.cubeEffect;
8128
+        var isHorizontal = swiper.isHorizontal();
8129
+        var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
8130
+        var wrapperRotate = 0;
8131
+        var $cubeShadowEl;
8132
+        if (params.shadow) {
8133
+          if (isHorizontal) {
8134
+            $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
8135
+            if ($cubeShadowEl.length === 0) {
8136
+              $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
8137
+              $wrapperEl.append($cubeShadowEl);
8138
+            }
8139
+            $cubeShadowEl.css({ height: (swiperWidth + "px") });
8140
+          } else {
8141
+            $cubeShadowEl = $el.find('.swiper-cube-shadow');
8142
+            if ($cubeShadowEl.length === 0) {
8143
+              $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
8144
+              $el.append($cubeShadowEl);
8145
+            }
8146
+          }
8147
+        }
8148
+        for (var i = 0; i < slides.length; i += 1) {
8149
+          var $slideEl = slides.eq(i);
8150
+          var slideIndex = i;
8151
+          if (isVirtual) {
8152
+            slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
8153
+          }
8154
+          var slideAngle = slideIndex * 90;
8155
+          var round = Math.floor(slideAngle / 360);
8156
+          if (rtl) {
8157
+            slideAngle = -slideAngle;
8158
+            round = Math.floor(-slideAngle / 360);
8159
+          }
8160
+          var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
8161
+          var tx = 0;
8162
+          var ty = 0;
8163
+          var tz = 0;
8164
+          if (slideIndex % 4 === 0) {
8165
+            tx = -round * 4 * swiperSize;
8166
+            tz = 0;
8167
+          } else if ((slideIndex - 1) % 4 === 0) {
8168
+            tx = 0;
8169
+            tz = -round * 4 * swiperSize;
8170
+          } else if ((slideIndex - 2) % 4 === 0) {
8171
+            tx = swiperSize + (round * 4 * swiperSize);
8172
+            tz = swiperSize;
8173
+          } else if ((slideIndex - 3) % 4 === 0) {
8174
+            tx = -swiperSize;
8175
+            tz = (3 * swiperSize) + (swiperSize * 4 * round);
8176
+          }
8177
+          if (rtl) {
8178
+            tx = -tx;
8179
+          }
8180
+
8181
+          if (!isHorizontal) {
8182
+            ty = tx;
8183
+            tx = 0;
8184
+          }
8185
+
8186
+          var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
8187
+          if (progress <= 1 && progress > -1) {
8188
+            wrapperRotate = (slideIndex * 90) + (progress * 90);
8189
+            if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }
8190
+          }
8191
+          $slideEl.transform(transform);
8192
+          if (params.slideShadows) {
8193
+            // Set shadows
8194
+            var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8195
+            var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8196
+            if (shadowBefore.length === 0) {
8197
+              shadowBefore = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"));
8198
+              $slideEl.append(shadowBefore);
8199
+            }
8200
+            if (shadowAfter.length === 0) {
8201
+              shadowAfter = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"));
8202
+              $slideEl.append(shadowAfter);
8203
+            }
8204
+            if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
8205
+            if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
8206
+          }
8207
+        }
8208
+        $wrapperEl.css({
8209
+          '-webkit-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
8210
+          '-moz-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
8211
+          '-ms-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
8212
+          'transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
8213
+        });
8214
+
8215
+        if (params.shadow) {
8216
+          if (isHorizontal) {
8217
+            $cubeShadowEl.transform(("translate3d(0px, " + ((swiperWidth / 2) + params.shadowOffset) + "px, " + (-swiperWidth / 2) + "px) rotateX(90deg) rotateZ(0deg) scale(" + (params.shadowScale) + ")"));
8218
+          } else {
8219
+            var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
8220
+            var multiplier = 1.5 - (
8221
+              (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
8222
+              + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
8223
+            );
8224
+            var scale1 = params.shadowScale;
8225
+            var scale2 = params.shadowScale / multiplier;
8226
+            var offset = params.shadowOffset;
8227
+            $cubeShadowEl.transform(("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + ((swiperHeight / 2) + offset) + "px, " + (-swiperHeight / 2 / scale2) + "px) rotateX(-90deg)"));
8228
+          }
8229
+        }
8230
+        var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
8231
+        $wrapperEl
8232
+          .transform(("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"));
8233
+      },
8234
+      setTransition: function setTransition(duration) {
8235
+        var swiper = this;
8236
+        var $el = swiper.$el;
8237
+        var slides = swiper.slides;
8238
+        slides
8239
+          .transition(duration)
8240
+          .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8241
+          .transition(duration);
8242
+        if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
8243
+          $el.find('.swiper-cube-shadow').transition(duration);
8244
+        }
8245
+      },
8246
+    };
8247
+
8248
+    var EffectCube = {
8249
+      name: 'effect-cube',
8250
+      params: {
8251
+        cubeEffect: {
8252
+          slideShadows: true,
8253
+          shadow: true,
8254
+          shadowOffset: 20,
8255
+          shadowScale: 0.94,
8256
+        },
8257
+      },
8258
+      create: function create() {
8259
+        var swiper = this;
8260
+        Utils.extend(swiper, {
8261
+          cubeEffect: {
8262
+            setTranslate: Cube.setTranslate.bind(swiper),
8263
+            setTransition: Cube.setTransition.bind(swiper),
8264
+          },
8265
+        });
8266
+      },
8267
+      on: {
8268
+        beforeInit: function beforeInit() {
8269
+          var swiper = this;
8270
+          if (swiper.params.effect !== 'cube') { return; }
8271
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "cube"));
8272
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
8273
+          var overwriteParams = {
8274
+            slidesPerView: 1,
8275
+            slidesPerColumn: 1,
8276
+            slidesPerGroup: 1,
8277
+            watchSlidesProgress: true,
8278
+            resistanceRatio: 0,
8279
+            spaceBetween: 0,
8280
+            centeredSlides: false,
8281
+            virtualTranslate: true,
8282
+          };
8283
+          Utils.extend(swiper.params, overwriteParams);
8284
+          Utils.extend(swiper.originalParams, overwriteParams);
8285
+        },
8286
+        setTranslate: function setTranslate() {
8287
+          var swiper = this;
8288
+          if (swiper.params.effect !== 'cube') { return; }
8289
+          swiper.cubeEffect.setTranslate();
8290
+        },
8291
+        setTransition: function setTransition(duration) {
8292
+          var swiper = this;
8293
+          if (swiper.params.effect !== 'cube') { return; }
8294
+          swiper.cubeEffect.setTransition(duration);
8295
+        },
8296
+      },
8297
+    };
8298
+
8299
+    var Flip = {
8300
+      setTranslate: function setTranslate() {
8301
+        var swiper = this;
8302
+        var slides = swiper.slides;
8303
+        var rtl = swiper.rtlTranslate;
8304
+        for (var i = 0; i < slides.length; i += 1) {
8305
+          var $slideEl = slides.eq(i);
8306
+          var progress = $slideEl[0].progress;
8307
+          if (swiper.params.flipEffect.limitRotation) {
8308
+            progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
8309
+          }
8310
+          var offset = $slideEl[0].swiperSlideOffset;
8311
+          var rotate = -180 * progress;
8312
+          var rotateY = rotate;
8313
+          var rotateX = 0;
8314
+          var tx = -offset;
8315
+          var ty = 0;
8316
+          if (!swiper.isHorizontal()) {
8317
+            ty = tx;
8318
+            tx = 0;
8319
+            rotateX = -rotateY;
8320
+            rotateY = 0;
8321
+          } else if (rtl) {
8322
+            rotateY = -rotateY;
8323
+          }
8324
+
8325
+          $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
8326
+
8327
+          if (swiper.params.flipEffect.slideShadows) {
8328
+            // Set shadows
8329
+            var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8330
+            var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8331
+            if (shadowBefore.length === 0) {
8332
+              shadowBefore = $(("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>"));
8333
+              $slideEl.append(shadowBefore);
8334
+            }
8335
+            if (shadowAfter.length === 0) {
8336
+              shadowAfter = $(("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>"));
8337
+              $slideEl.append(shadowAfter);
8338
+            }
8339
+            if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
8340
+            if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
8341
+          }
8342
+          $slideEl
8343
+            .transform(("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"));
8344
+        }
8345
+      },
8346
+      setTransition: function setTransition(duration) {
8347
+        var swiper = this;
8348
+        var slides = swiper.slides;
8349
+        var activeIndex = swiper.activeIndex;
8350
+        var $wrapperEl = swiper.$wrapperEl;
8351
+        slides
8352
+          .transition(duration)
8353
+          .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8354
+          .transition(duration);
8355
+        if (swiper.params.virtualTranslate && duration !== 0) {
8356
+          var eventTriggered = false;
8357
+          // eslint-disable-next-line
8358
+          slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
8359
+            if (eventTriggered) { return; }
8360
+            if (!swiper || swiper.destroyed) { return; }
8361
+            // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
8362
+            eventTriggered = true;
8363
+            swiper.animating = false;
8364
+            var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
8365
+            for (var i = 0; i < triggerEvents.length; i += 1) {
8366
+              $wrapperEl.trigger(triggerEvents[i]);
8367
+            }
8368
+          });
8369
+        }
8370
+      },
8371
+    };
8372
+
8373
+    var EffectFlip = {
8374
+      name: 'effect-flip',
8375
+      params: {
8376
+        flipEffect: {
8377
+          slideShadows: true,
8378
+          limitRotation: true,
8379
+        },
8380
+      },
8381
+      create: function create() {
8382
+        var swiper = this;
8383
+        Utils.extend(swiper, {
8384
+          flipEffect: {
8385
+            setTranslate: Flip.setTranslate.bind(swiper),
8386
+            setTransition: Flip.setTransition.bind(swiper),
8387
+          },
8388
+        });
8389
+      },
8390
+      on: {
8391
+        beforeInit: function beforeInit() {
8392
+          var swiper = this;
8393
+          if (swiper.params.effect !== 'flip') { return; }
8394
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "flip"));
8395
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
8396
+          var overwriteParams = {
8397
+            slidesPerView: 1,
8398
+            slidesPerColumn: 1,
8399
+            slidesPerGroup: 1,
8400
+            watchSlidesProgress: true,
8401
+            spaceBetween: 0,
8402
+            virtualTranslate: true,
8403
+          };
8404
+          Utils.extend(swiper.params, overwriteParams);
8405
+          Utils.extend(swiper.originalParams, overwriteParams);
8406
+        },
8407
+        setTranslate: function setTranslate() {
8408
+          var swiper = this;
8409
+          if (swiper.params.effect !== 'flip') { return; }
8410
+          swiper.flipEffect.setTranslate();
8411
+        },
8412
+        setTransition: function setTransition(duration) {
8413
+          var swiper = this;
8414
+          if (swiper.params.effect !== 'flip') { return; }
8415
+          swiper.flipEffect.setTransition(duration);
8416
+        },
8417
+      },
8418
+    };
8419
+
8420
+    var Coverflow = {
8421
+      setTranslate: function setTranslate() {
8422
+        var swiper = this;
8423
+        var swiperWidth = swiper.width;
8424
+        var swiperHeight = swiper.height;
8425
+        var slides = swiper.slides;
8426
+        var $wrapperEl = swiper.$wrapperEl;
8427
+        var slidesSizesGrid = swiper.slidesSizesGrid;
8428
+        var params = swiper.params.coverflowEffect;
8429
+        var isHorizontal = swiper.isHorizontal();
8430
+        var transform = swiper.translate;
8431
+        var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
8432
+        var rotate = isHorizontal ? params.rotate : -params.rotate;
8433
+        var translate = params.depth;
8434
+        // Each slide offset from center
8435
+        for (var i = 0, length = slides.length; i < length; i += 1) {
8436
+          var $slideEl = slides.eq(i);
8437
+          var slideSize = slidesSizesGrid[i];
8438
+          var slideOffset = $slideEl[0].swiperSlideOffset;
8439
+          var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
8440
+
8441
+          var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
8442
+          var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
8443
+          // var rotateZ = 0
8444
+          var translateZ = -translate * Math.abs(offsetMultiplier);
8445
+
8446
+          var stretch = params.stretch;
8447
+          // Allow percentage to make a relative stretch for responsive sliders
8448
+          if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
8449
+            stretch = ((parseFloat(params.stretch) / 100) * slideSize);
8450
+          }
8451
+          var translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
8452
+          var translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;
8453
+
8454
+          // Fix for ultra small values
8455
+          if (Math.abs(translateX) < 0.001) { translateX = 0; }
8456
+          if (Math.abs(translateY) < 0.001) { translateY = 0; }
8457
+          if (Math.abs(translateZ) < 0.001) { translateZ = 0; }
8458
+          if (Math.abs(rotateY) < 0.001) { rotateY = 0; }
8459
+          if (Math.abs(rotateX) < 0.001) { rotateX = 0; }
8460
+
8461
+          var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px)  rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
8462
+
8463
+          $slideEl.transform(slideTransform);
8464
+          $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
8465
+          if (params.slideShadows) {
8466
+            // Set shadows
8467
+            var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
8468
+            var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
8469
+            if ($shadowBeforeEl.length === 0) {
8470
+              $shadowBeforeEl = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"));
8471
+              $slideEl.append($shadowBeforeEl);
8472
+            }
8473
+            if ($shadowAfterEl.length === 0) {
8474
+              $shadowAfterEl = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"));
8475
+              $slideEl.append($shadowAfterEl);
8476
+            }
8477
+            if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }
8478
+            if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }
8479
+          }
8480
+        }
8481
+
8482
+        // Set correct perspective for IE10
8483
+        if (Support.pointerEvents || Support.prefixedPointerEvents) {
8484
+          var ws = $wrapperEl[0].style;
8485
+          ws.perspectiveOrigin = center + "px 50%";
8486
+        }
8487
+      },
8488
+      setTransition: function setTransition(duration) {
8489
+        var swiper = this;
8490
+        swiper.slides
8491
+          .transition(duration)
8492
+          .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
8493
+          .transition(duration);
8494
+      },
8495
+    };
8496
+
8497
+    var EffectCoverflow = {
8498
+      name: 'effect-coverflow',
8499
+      params: {
8500
+        coverflowEffect: {
8501
+          rotate: 50,
8502
+          stretch: 0,
8503
+          depth: 100,
8504
+          modifier: 1,
8505
+          slideShadows: true,
8506
+        },
8507
+      },
8508
+      create: function create() {
8509
+        var swiper = this;
8510
+        Utils.extend(swiper, {
8511
+          coverflowEffect: {
8512
+            setTranslate: Coverflow.setTranslate.bind(swiper),
8513
+            setTransition: Coverflow.setTransition.bind(swiper),
8514
+          },
8515
+        });
8516
+      },
8517
+      on: {
8518
+        beforeInit: function beforeInit() {
8519
+          var swiper = this;
8520
+          if (swiper.params.effect !== 'coverflow') { return; }
8521
+
8522
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "coverflow"));
8523
+          swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
8524
+
8525
+          swiper.params.watchSlidesProgress = true;
8526
+          swiper.originalParams.watchSlidesProgress = true;
8527
+        },
8528
+        setTranslate: function setTranslate() {
8529
+          var swiper = this;
8530
+          if (swiper.params.effect !== 'coverflow') { return; }
8531
+          swiper.coverflowEffect.setTranslate();
8532
+        },
8533
+        setTransition: function setTransition(duration) {
8534
+          var swiper = this;
8535
+          if (swiper.params.effect !== 'coverflow') { return; }
8536
+          swiper.coverflowEffect.setTransition(duration);
8537
+        },
8538
+      },
8539
+    };
8540
+
8541
+    var Thumbs = {
8542
+      init: function init() {
8543
+        var swiper = this;
8544
+        var ref = swiper.params;
8545
+        var thumbsParams = ref.thumbs;
8546
+        var SwiperClass = swiper.constructor;
8547
+        if (thumbsParams.swiper instanceof SwiperClass) {
8548
+          swiper.thumbs.swiper = thumbsParams.swiper;
8549
+          Utils.extend(swiper.thumbs.swiper.originalParams, {
8550
+            watchSlidesProgress: true,
8551
+            slideToClickedSlide: false,
8552
+          });
8553
+          Utils.extend(swiper.thumbs.swiper.params, {
8554
+            watchSlidesProgress: true,
8555
+            slideToClickedSlide: false,
8556
+          });
8557
+        } else if (Utils.isObject(thumbsParams.swiper)) {
8558
+          swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
8559
+            watchSlidesVisibility: true,
8560
+            watchSlidesProgress: true,
8561
+            slideToClickedSlide: false,
8562
+          }));
8563
+          swiper.thumbs.swiperCreated = true;
8564
+        }
8565
+        swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
8566
+        swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
8567
+      },
8568
+      onThumbClick: function onThumbClick() {
8569
+        var swiper = this;
8570
+        var thumbsSwiper = swiper.thumbs.swiper;
8571
+        if (!thumbsSwiper) { return; }
8572
+        var clickedIndex = thumbsSwiper.clickedIndex;
8573
+        var clickedSlide = thumbsSwiper.clickedSlide;
8574
+        if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) { return; }
8575
+        if (typeof clickedIndex === 'undefined' || clickedIndex === null) { return; }
8576
+        var slideToIndex;
8577
+        if (thumbsSwiper.params.loop) {
8578
+          slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
8579
+        } else {
8580
+          slideToIndex = clickedIndex;
8581
+        }
8582
+        if (swiper.params.loop) {
8583
+          var currentIndex = swiper.activeIndex;
8584
+          if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
8585
+            swiper.loopFix();
8586
+            // eslint-disable-next-line
8587
+            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
8588
+            currentIndex = swiper.activeIndex;
8589
+          }
8590
+          var prevIndex = swiper.slides.eq(currentIndex).prevAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index();
8591
+          var nextIndex = swiper.slides.eq(currentIndex).nextAll(("[data-swiper-slide-index=\"" + slideToIndex + "\"]")).eq(0).index();
8592
+          if (typeof prevIndex === 'undefined') { slideToIndex = nextIndex; }
8593
+          else if (typeof nextIndex === 'undefined') { slideToIndex = prevIndex; }
8594
+          else if (nextIndex - currentIndex < currentIndex - prevIndex) { slideToIndex = nextIndex; }
8595
+          else { slideToIndex = prevIndex; }
8596
+        }
8597
+        swiper.slideTo(slideToIndex);
8598
+      },
8599
+      update: function update(initial) {
8600
+        var swiper = this;
8601
+        var thumbsSwiper = swiper.thumbs.swiper;
8602
+        if (!thumbsSwiper) { return; }
8603
+
8604
+        var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
8605
+          ? thumbsSwiper.slidesPerViewDynamic()
8606
+          : thumbsSwiper.params.slidesPerView;
8607
+
8608
+        var autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
8609
+        var useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
8610
+        if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
8611
+          var currentThumbsIndex = thumbsSwiper.activeIndex;
8612
+          var newThumbsIndex;
8613
+          var direction;
8614
+          if (thumbsSwiper.params.loop) {
8615
+            if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
8616
+              thumbsSwiper.loopFix();
8617
+              // eslint-disable-next-line
8618
+              thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
8619
+              currentThumbsIndex = thumbsSwiper.activeIndex;
8620
+            }
8621
+            // Find actual thumbs index to slide to
8622
+            var prevThumbsIndex = thumbsSwiper.slides
8623
+              .eq(currentThumbsIndex)
8624
+              .prevAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0)
8625
+              .index();
8626
+            var nextThumbsIndex = thumbsSwiper.slides
8627
+              .eq(currentThumbsIndex)
8628
+              .nextAll(("[data-swiper-slide-index=\"" + (swiper.realIndex) + "\"]")).eq(0)
8629
+              .index();
8630
+            if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; }
8631
+            else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; }
8632
+            else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = currentThumbsIndex; }
8633
+            else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; }
8634
+            else { newThumbsIndex = prevThumbsIndex; }
8635
+            direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
8636
+          } else {
8637
+            newThumbsIndex = swiper.realIndex;
8638
+            direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
8639
+          }
8640
+          if (useOffset) {
8641
+            newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
8642
+          }
8643
+
8644
+          if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
8645
+            if (thumbsSwiper.params.centeredSlides) {
8646
+              if (newThumbsIndex > currentThumbsIndex) {
8647
+                newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
8648
+              } else {
8649
+                newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
8650
+              }
8651
+            } else if (newThumbsIndex > currentThumbsIndex) {
8652
+              newThumbsIndex = newThumbsIndex - slidesPerView + 1;
8653
+            }
8654
+            thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
8655
+          }
8656
+        }
8657
+
8658
+        // Activate thumbs
8659
+        var thumbsToActivate = 1;
8660
+        var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
8661
+
8662
+        if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
8663
+          thumbsToActivate = swiper.params.slidesPerView;
8664
+        }
8665
+
8666
+        if (!swiper.params.thumbs.multipleActiveThumbs) {
8667
+          thumbsToActivate = 1;
8668
+        }
8669
+
8670
+        thumbsToActivate = Math.floor(thumbsToActivate);
8671
+
8672
+        thumbsSwiper.slides.removeClass(thumbActiveClass);
8673
+        if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
8674
+          for (var i = 0; i < thumbsToActivate; i += 1) {
8675
+            thumbsSwiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]")).addClass(thumbActiveClass);
8676
+          }
8677
+        } else {
8678
+          for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {
8679
+            thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);
8680
+          }
8681
+        }
8682
+      },
8683
+    };
8684
+    var Thumbs$1 = {
8685
+      name: 'thumbs',
8686
+      params: {
8687
+        thumbs: {
8688
+          swiper: null,
8689
+          multipleActiveThumbs: true,
8690
+          autoScrollOffset: 0,
8691
+          slideThumbActiveClass: 'swiper-slide-thumb-active',
8692
+          thumbsContainerClass: 'swiper-container-thumbs',
8693
+        },
8694
+      },
8695
+      create: function create() {
8696
+        var swiper = this;
8697
+        Utils.extend(swiper, {
8698
+          thumbs: {
8699
+            swiper: null,
8700
+            init: Thumbs.init.bind(swiper),
8701
+            update: Thumbs.update.bind(swiper),
8702
+            onThumbClick: Thumbs.onThumbClick.bind(swiper),
8703
+          },
8704
+        });
8705
+      },
8706
+      on: {
8707
+        beforeInit: function beforeInit() {
8708
+          var swiper = this;
8709
+          var ref = swiper.params;
8710
+          var thumbs = ref.thumbs;
8711
+          if (!thumbs || !thumbs.swiper) { return; }
8712
+          swiper.thumbs.init();
8713
+          swiper.thumbs.update(true);
8714
+        },
8715
+        slideChange: function slideChange() {
8716
+          var swiper = this;
8717
+          if (!swiper.thumbs.swiper) { return; }
8718
+          swiper.thumbs.update();
8719
+        },
8720
+        update: function update() {
8721
+          var swiper = this;
8722
+          if (!swiper.thumbs.swiper) { return; }
8723
+          swiper.thumbs.update();
8724
+        },
8725
+        resize: function resize() {
8726
+          var swiper = this;
8727
+          if (!swiper.thumbs.swiper) { return; }
8728
+          swiper.thumbs.update();
8729
+        },
8730
+        observerUpdate: function observerUpdate() {
8731
+          var swiper = this;
8732
+          if (!swiper.thumbs.swiper) { return; }
8733
+          swiper.thumbs.update();
8734
+        },
8735
+        setTransition: function setTransition(duration) {
8736
+          var swiper = this;
8737
+          var thumbsSwiper = swiper.thumbs.swiper;
8738
+          if (!thumbsSwiper) { return; }
8739
+          thumbsSwiper.setTransition(duration);
8740
+        },
8741
+        beforeDestroy: function beforeDestroy() {
8742
+          var swiper = this;
8743
+          var thumbsSwiper = swiper.thumbs.swiper;
8744
+          if (!thumbsSwiper) { return; }
8745
+          if (swiper.thumbs.swiperCreated && thumbsSwiper) {
8746
+            thumbsSwiper.destroy();
8747
+          }
8748
+        },
8749
+      },
8750
+    };
8751
+
8752
+    // Swiper Class
8753
+
8754
+    var components = [
8755
+      Device$1,
8756
+      Support$1,
8757
+      Browser$1,
8758
+      Resize,
8759
+      Observer$1,
8760
+      Virtual$1,
8761
+      Keyboard$1,
8762
+      Mousewheel$1,
8763
+      Navigation$1,
8764
+      Pagination$1,
8765
+      Scrollbar$1,
8766
+      Parallax$1,
8767
+      Zoom$1,
8768
+      Lazy$1,
8769
+      Controller$1,
8770
+      A11y,
8771
+      History$1,
8772
+      HashNavigation$1,
8773
+      Autoplay$1,
8774
+      EffectFade,
8775
+      EffectCube,
8776
+      EffectFlip,
8777
+      EffectCoverflow,
8778
+      Thumbs$1
8779
+    ];
8780
+
8781
+    if (typeof Swiper.use === 'undefined') {
8782
+      Swiper.use = Swiper.Class.use;
8783
+      Swiper.installModule = Swiper.Class.installModule;
8784
+    }
8785
+
8786
+    Swiper.use(components);
8787
+
8788
+    return Swiper;
8789
+
8790
+})));
8791
+//# sourceMappingURL=swiper.js.map
0 8792
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"file":"swiper.js.map","sources":["../../node_modules/ssr-window/dist/ssr-window.esm.js","../../node_modules/dom7/dist/dom7.modular.js","../../src/utils/dom.js","../../src/utils/utils.js","../../src/utils/support.js","../../src/utils/class.js","../../src/components/core/update/updateSize.js","../../src/components/core/update/updateSlides.js","../../src/components/core/update/updateAutoHeight.js","../../src/components/core/update/updateSlidesOffset.js","../../src/components/core/update/updateSlidesProgress.js","../../src/components/core/update/updateProgress.js","../../src/components/core/update/updateSlidesClasses.js","../../src/components/core/update/updateActiveIndex.js","../../src/components/core/update/updateClickedSlide.js","../../src/components/core/update/index.js","../../src/components/core/translate/getTranslate.js","../../src/components/core/translate/setTranslate.js","../../src/components/core/translate/minTranslate.js","../../src/components/core/translate/maxTranslate.js","../../src/components/core/translate/translateTo.js","../../src/components/core/translate/index.js","../../src/components/core/transition/setTransition.js","../../src/components/core/transition/transitionStart.js","../../src/components/core/transition/transitionEnd.js","../../src/components/core/transition/index.js","../../src/components/core/slide/slideTo.js","../../src/components/core/slide/slideToLoop.js","../../src/components/core/slide/slideNext.js","../../src/components/core/slide/slidePrev.js","../../src/components/core/slide/slideReset.js","../../src/components/core/slide/slideToClosest.js","../../src/components/core/slide/slideToClickedSlide.js","../../src/components/core/slide/index.js","../../src/components/core/loop/loopCreate.js","../../src/components/core/loop/loopFix.js","../../src/components/core/loop/loopDestroy.js","../../src/components/core/loop/index.js","../../src/components/core/grab-cursor/setGrabCursor.js","../../src/components/core/grab-cursor/unsetGrabCursor.js","../../src/components/core/grab-cursor/index.js","../../src/components/core/manipulation/appendSlide.js","../../src/components/core/manipulation/prependSlide.js","../../src/components/core/manipulation/addSlide.js","../../src/components/core/manipulation/removeSlide.js","../../src/components/core/manipulation/removeAllSlides.js","../../src/components/core/manipulation/index.js","../../src/utils/device.js","../../src/components/core/events/onTouchStart.js","../../src/components/core/events/onTouchMove.js","../../src/components/core/events/onTouchEnd.js","../../src/components/core/events/onResize.js","../../src/components/core/events/onClick.js","../../src/components/core/events/onScroll.js","../../src/components/core/events/index.js","../../src/components/core/breakpoints/setBreakpoint.js","../../src/components/core/breakpoints/getBreakpoint.js","../../src/components/core/breakpoints/index.js","../../src/components/core/classes/addClasses.js","../../src/components/core/classes/removeClasses.js","../../src/components/core/classes/index.js","../../src/components/core/images/loadImage.js","../../src/components/core/images/preloadImages.js","../../src/components/core/images/index.js","../../src/components/core/check-overflow/index.js","../../src/components/core/defaults.js","../../src/components/core/core-class.js","../../src/modules/device/device.js","../../src/modules/support/support.js","../../src/utils/browser.js","../../src/modules/browser/browser.js","../../src/modules/resize/resize.js","../../src/modules/observer/observer.js","../../src/components/virtual/virtual.js","../../src/components/keyboard/keyboard.js","../../src/components/mousewheel/mousewheel.js","../../src/components/navigation/navigation.js","../../src/components/pagination/pagination.js","../../src/components/scrollbar/scrollbar.js","../../src/components/parallax/parallax.js","../../src/components/zoom/zoom.js","../../src/components/lazy/lazy.js","../../src/components/controller/controller.js","../../src/components/a11y/a11y.js","../../src/components/history/history.js","../../src/components/hash-navigation/hash-navigation.js","../../src/components/autoplay/autoplay.js","../../src/components/effect-fade/effect-fade.js","../../src/components/effect-cube/effect-cube.js","../../src/components/effect-flip/effect-flip.js","../../src/components/effect-coverflow/effect-coverflow.js","../../src/components/thumbs/thumbs.js","../../src/swiper.js"],"sourcesContent":["/**\n * SSR Window 2.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 12, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n    return (obj !== null &&\n        typeof obj === 'object' &&\n        'constructor' in obj &&\n        obj.constructor === Object);\n}\nfunction extend(target, src) {\n    if (target === void 0) { target = {}; }\n    if (src === void 0) { src = {}; }\n    Object.keys(src).forEach(function (key) {\n        if (typeof target[key] === 'undefined')\n            target[key] = src[key];\n        else if (isObject(src[key]) &&\n            isObject(target[key]) &&\n            Object.keys(src[key]).length > 0) {\n            extend(target[key], src[key]);\n        }\n    });\n}\n\nvar doc = typeof document !== 'undefined' ? document : {};\nvar ssrDocument = {\n    body: {},\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    activeElement: {\n        blur: function () { },\n        nodeName: '',\n    },\n    querySelector: function () {\n        return null;\n    },\n    querySelectorAll: function () {\n        return [];\n    },\n    getElementById: function () {\n        return null;\n    },\n    createEvent: function () {\n        return {\n            initEvent: function () { },\n        };\n    },\n    createElement: function () {\n        return {\n            children: [],\n            childNodes: [],\n            style: {},\n            setAttribute: function () { },\n            getElementsByTagName: function () {\n                return [];\n            },\n        };\n    },\n    createElementNS: function () {\n        return {};\n    },\n    importNode: function () {\n        return null;\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n};\nextend(doc, ssrDocument);\n\nvar win = typeof window !== 'undefined' ? window : {};\nvar ssrWindow = {\n    document: ssrDocument,\n    navigator: {\n        userAgent: '',\n    },\n    location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: '',\n    },\n    history: {\n        replaceState: function () { },\n        pushState: function () { },\n        go: function () { },\n        back: function () { },\n    },\n    CustomEvent: function CustomEvent() {\n        return this;\n    },\n    addEventListener: function () { },\n    removeEventListener: function () { },\n    getComputedStyle: function () {\n        return {\n            getPropertyValue: function () {\n                return '';\n            },\n        };\n    },\n    Image: function () { },\n    Date: function () { },\n    screen: {},\n    setTimeout: function () { },\n    clearTimeout: function () { },\n    matchMedia: function () {\n        return {};\n    },\n};\nextend(win, ssrWindow);\n\nexport { doc as document, extend, win as window };\n","/**\n * Dom7 2.1.5\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: May 15, 2020\n */\nimport { document, window } from 'ssr-window';\n\nclass Dom7 {\n  constructor(arr) {\n    const self = this;\n    // Create array-like object\n    for (let i = 0; i < arr.length; i += 1) {\n      self[i] = arr[i];\n    }\n    self.length = arr.length;\n    // Return collection with methods\n    return this;\n  }\n}\n\nfunction $(selector, context) {\n  const arr = [];\n  let i = 0;\n  if (selector && !context) {\n    if (selector instanceof Dom7) {\n      return selector;\n    }\n  }\n  if (selector) {\n      // String\n    if (typeof selector === 'string') {\n      let els;\n      let tempParent;\n      const html = selector.trim();\n      if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n        let toCreate = 'div';\n        if (html.indexOf('<li') === 0) toCreate = 'ul';\n        if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n        if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n        if (html.indexOf('<tbody') === 0) toCreate = 'table';\n        if (html.indexOf('<option') === 0) toCreate = 'select';\n        tempParent = document.createElement(toCreate);\n        tempParent.innerHTML = html;\n        for (i = 0; i < tempParent.childNodes.length; i += 1) {\n          arr.push(tempParent.childNodes[i]);\n        }\n      } else {\n        if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {\n          // Pure ID selector\n          els = [document.getElementById(selector.trim().split('#')[1])];\n        } else {\n          // Other selectors\n          els = (context || document).querySelectorAll(selector.trim());\n        }\n        for (i = 0; i < els.length; i += 1) {\n          if (els[i]) arr.push(els[i]);\n        }\n      }\n    } else if (selector.nodeType || selector === window || selector === document) {\n      // Node/element\n      arr.push(selector);\n    } else if (selector.length > 0 && selector[0].nodeType) {\n      // Array of elements or instance of Dom\n      for (i = 0; i < selector.length; i += 1) {\n        arr.push(selector[i]);\n      }\n    }\n  }\n  return new Dom7(arr);\n}\n\n$.fn = Dom7.prototype;\n$.Class = Dom7;\n$.Dom7 = Dom7;\n\nfunction unique(arr) {\n  const uniqueArray = [];\n  for (let i = 0; i < arr.length; i += 1) {\n    if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n  }\n  return uniqueArray;\n}\nfunction toCamelCase(string) {\n  return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase());\n}\n\nfunction requestAnimationFrame(callback) {\n  if (window.requestAnimationFrame) return window.requestAnimationFrame(callback);\n  else if (window.webkitRequestAnimationFrame) return window.webkitRequestAnimationFrame(callback);\n  return window.setTimeout(callback, 1000 / 60);\n}\nfunction cancelAnimationFrame(id) {\n  if (window.cancelAnimationFrame) return window.cancelAnimationFrame(id);\n  else if (window.webkitCancelAnimationFrame) return window.webkitCancelAnimationFrame(id);\n  return window.clearTimeout(id);\n}\n\n// Classes and attributes\nfunction addClass(className) {\n  if (typeof className === 'undefined') {\n    return this;\n  }\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);\n    }\n  }\n  return this;\n}\nfunction removeClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);\n    }\n  }\n  return this;\n}\nfunction hasClass(className) {\n  if (!this[0]) return false;\n  return this[0].classList.contains(className);\n}\nfunction toggleClass(className) {\n  const classes = className.split(' ');\n  for (let i = 0; i < classes.length; i += 1) {\n    for (let j = 0; j < this.length; j += 1) {\n      if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);\n    }\n  }\n  return this;\n}\nfunction attr(attrs, value) {\n  if (arguments.length === 1 && typeof attrs === 'string') {\n    // Get attr\n    if (this[0]) return this[0].getAttribute(attrs);\n    return undefined;\n  }\n\n  // Set attrs\n  for (let i = 0; i < this.length; i += 1) {\n    if (arguments.length === 2) {\n      // String\n      this[i].setAttribute(attrs, value);\n    } else {\n      // Object\n      // eslint-disable-next-line\n      for (const attrName in attrs) {\n        this[i][attrName] = attrs[attrName];\n        this[i].setAttribute(attrName, attrs[attrName]);\n      }\n    }\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction removeAttr(attr) {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].removeAttribute(attr);\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction prop(props, value) {\n  if (arguments.length === 1 && typeof props === 'string') {\n    // Get prop\n    if (this[0]) return this[0][props];\n  } else {\n    // Set props\n    for (let i = 0; i < this.length; i += 1) {\n      if (arguments.length === 2) {\n        // String\n        this[i][props] = value;\n      } else {\n        // Object\n        // eslint-disable-next-line\n        for (const propName in props) {\n          this[i][propName] = props[propName];\n        }\n      }\n    }\n    return this;\n  }\n}\nfunction data(key, value) {\n  let el;\n  if (typeof value === 'undefined') {\n    el = this[0];\n    // Get value\n    if (el) {\n      if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n        return el.dom7ElementDataStorage[key];\n      }\n\n      const dataKey = el.getAttribute(`data-${key}`);\n      if (dataKey) {\n        return dataKey;\n      }\n      return undefined;\n    }\n    return undefined;\n  }\n\n  // Set value\n  for (let i = 0; i < this.length; i += 1) {\n    el = this[i];\n    if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n    el.dom7ElementDataStorage[key] = value;\n  }\n  return this;\n}\nfunction removeData(key) {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n      el.dom7ElementDataStorage[key] = null;\n      delete el.dom7ElementDataStorage[key];\n    }\n  }\n}\nfunction dataset() {\n  const el = this[0];\n  if (!el) return undefined;\n  const dataset = {}; // eslint-disable-line\n  if (el.dataset) {\n    // eslint-disable-next-line\n    for (const dataKey in el.dataset) {\n      dataset[dataKey] = el.dataset[dataKey];\n    }\n  } else {\n    for (let i = 0; i < el.attributes.length; i += 1) {\n      // eslint-disable-next-line\n      const attr = el.attributes[i];\n      if (attr.name.indexOf('data-') >= 0) {\n        dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n      }\n    }\n  }\n  // eslint-disable-next-line\n  for (const key in dataset) {\n    if (dataset[key] === 'false') dataset[key] = false;\n    else if (dataset[key] === 'true') dataset[key] = true;\n    else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n  }\n  return dataset;\n}\nfunction val(value) {\n  const dom = this;\n  if (typeof value === 'undefined') {\n    if (dom[0]) {\n      if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') {\n        const values = [];\n        for (let i = 0; i < dom[0].selectedOptions.length; i += 1) {\n          values.push(dom[0].selectedOptions[i].value);\n        }\n        return values;\n      }\n      return dom[0].value;\n    }\n    return undefined;\n  }\n\n  for (let i = 0; i < dom.length; i += 1) {\n    const el = dom[i];\n    if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n      for (let j = 0; j < el.options.length; j += 1) {\n        el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n      }\n    } else {\n      el.value = value;\n    }\n  }\n  return dom;\n}\n// Transforms\n// eslint-disable-next-line\nfunction transform(transform) {\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransform = transform;\n    elStyle.transform = transform;\n  }\n  return this;\n}\nfunction transition(duration) {\n  if (typeof duration !== 'string') {\n    duration = `${duration}ms`; // eslint-disable-line\n  }\n  for (let i = 0; i < this.length; i += 1) {\n    const elStyle = this[i].style;\n    elStyle.webkitTransitionDuration = duration;\n    elStyle.transitionDuration = duration;\n  }\n  return this;\n}\n// Events\nfunction on(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  if (!capture) capture = false;\n\n  function handleLiveEvent(e) {\n    const target = e.target;\n    if (!target) return;\n    const eventData = e.target.dom7EventData || [];\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    if ($(target).is(targetSelector)) listener.apply(target, eventData);\n    else {\n      const parents = $(target).parents(); // eslint-disable-line\n      for (let k = 0; k < parents.length; k += 1) {\n        if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n      }\n    }\n  }\n  function handleEvent(e) {\n    const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n    if (eventData.indexOf(e) < 0) {\n      eventData.unshift(e);\n    }\n    listener.apply(this, eventData);\n  }\n  const events = eventType.split(' ');\n  let j;\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (!targetSelector) {\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7Listeners) el.dom7Listeners = {};\n        if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n        el.dom7Listeners[event].push({\n          listener,\n          proxyListener: handleEvent,\n        });\n        el.addEventListener(event, handleEvent, capture);\n      }\n    } else {\n      // Live events\n      for (j = 0; j < events.length; j += 1) {\n        const event = events[j];\n        if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n        if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n        el.dom7LiveListeners[event].push({\n          listener,\n          proxyListener: handleLiveEvent,\n        });\n        el.addEventListener(event, handleLiveEvent, capture);\n      }\n    }\n  }\n  return this;\n}\nfunction off(...args) {\n  let [eventType, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventType, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  if (!capture) capture = false;\n\n  const events = eventType.split(' ');\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let handlers;\n      if (!targetSelector && el.dom7Listeners) {\n        handlers = el.dom7Listeners[event];\n      } else if (targetSelector && el.dom7LiveListeners) {\n        handlers = el.dom7LiveListeners[event];\n      }\n      if (handlers && handlers.length) {\n        for (let k = handlers.length - 1; k >= 0; k -= 1) {\n          const handler = handlers[k];\n          if (listener && handler.listener === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          } else if (!listener) {\n            el.removeEventListener(event, handler.proxyListener, capture);\n            handlers.splice(k, 1);\n          }\n        }\n      }\n    }\n  }\n  return this;\n}\nfunction once(...args) {\n  const dom = this;\n  let [eventName, targetSelector, listener, capture] = args;\n  if (typeof args[1] === 'function') {\n    [eventName, listener, capture] = args;\n    targetSelector = undefined;\n  }\n  function onceHandler(...eventArgs) {\n    listener.apply(this, eventArgs);\n    dom.off(eventName, targetSelector, onceHandler, capture);\n    if (onceHandler.dom7proxy) {\n      delete onceHandler.dom7proxy;\n    }\n  }\n  onceHandler.dom7proxy = listener;\n  return dom.on(eventName, targetSelector, onceHandler, capture);\n}\nfunction trigger(...args) {\n  const events = args[0].split(' ');\n  const eventData = args[1];\n  for (let i = 0; i < events.length; i += 1) {\n    const event = events[i];\n    for (let j = 0; j < this.length; j += 1) {\n      const el = this[j];\n      let evt;\n      try {\n        evt = new window.CustomEvent(event, {\n          detail: eventData,\n          bubbles: true,\n          cancelable: true,\n        });\n      } catch (e) {\n        evt = document.createEvent('Event');\n        evt.initEvent(event, true, true);\n        evt.detail = eventData;\n      }\n      // eslint-disable-next-line\n      el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n      el.dispatchEvent(evt);\n      el.dom7EventData = [];\n      delete el.dom7EventData;\n    }\n  }\n  return this;\n}\nfunction transitionEnd(callback) {\n  const events = ['webkitTransitionEnd', 'transitionend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    /* jshint validthis:true */\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\nfunction animationEnd(callback) {\n  const events = ['webkitAnimationEnd', 'animationend'];\n  const dom = this;\n  let i;\n  function fireCallBack(e) {\n    if (e.target !== this) return;\n    callback.call(this, e);\n    for (i = 0; i < events.length; i += 1) {\n      dom.off(events[i], fireCallBack);\n    }\n  }\n  if (callback) {\n    for (i = 0; i < events.length; i += 1) {\n      dom.on(events[i], fireCallBack);\n    }\n  }\n  return this;\n}\n// Sizing/Styles\nfunction width() {\n  if (this[0] === window) {\n    return window.innerWidth;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('width'));\n  }\n\n  return null;\n}\nfunction outerWidth(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n    }\n    return this[0].offsetWidth;\n  }\n  return null;\n}\nfunction height() {\n  if (this[0] === window) {\n    return window.innerHeight;\n  }\n\n  if (this.length > 0) {\n    return parseFloat(this.css('height'));\n  }\n\n  return null;\n}\nfunction outerHeight(includeMargins) {\n  if (this.length > 0) {\n    if (includeMargins) {\n      // eslint-disable-next-line\n      const styles = this.styles();\n      return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n    }\n    return this[0].offsetHeight;\n  }\n  return null;\n}\nfunction offset() {\n  if (this.length > 0) {\n    const el = this[0];\n    const box = el.getBoundingClientRect();\n    const body = document.body;\n    const clientTop = el.clientTop || body.clientTop || 0;\n    const clientLeft = el.clientLeft || body.clientLeft || 0;\n    const scrollTop = el === window ? window.scrollY : el.scrollTop;\n    const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n    return {\n      top: (box.top + scrollTop) - clientTop,\n      left: (box.left + scrollLeft) - clientLeft,\n    };\n  }\n\n  return null;\n}\nfunction hide() {\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].style.display = 'none';\n  }\n  return this;\n}\nfunction show() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.style.display === 'none') {\n      el.style.display = '';\n    }\n    if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n      // Still not visible\n      el.style.display = 'block';\n    }\n  }\n  return this;\n}\nfunction styles() {\n  if (this[0]) return window.getComputedStyle(this[0], null);\n  return {};\n}\nfunction css(props, value) {\n  let i;\n  if (arguments.length === 1) {\n    if (typeof props === 'string') {\n      if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n    } else {\n      for (i = 0; i < this.length; i += 1) {\n        // eslint-disable-next-line\n        for (let prop in props) {\n          this[i].style[prop] = props[prop];\n        }\n      }\n      return this;\n    }\n  }\n  if (arguments.length === 2 && typeof props === 'string') {\n    for (i = 0; i < this.length; i += 1) {\n      this[i].style[props] = value;\n    }\n    return this;\n  }\n  return this;\n}\n\n// Dom manipulation\nfunction toArray() {\n  const arr = [];\n  for (let i = 0; i < this.length; i += 1) {\n    arr.push(this[i]);\n  }\n  return arr;\n}\n// Iterate over the collection passing elements to `callback`\nfunction each(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], i, this[i]) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction forEach(callback) {\n  // Don't bother continuing without a callback\n  if (!callback) return this;\n  // Iterate over the current collection\n  for (let i = 0; i < this.length; i += 1) {\n    // If the callback returns false\n    if (callback.call(this[i], this[i], i) === false) {\n      // End the loop early\n      return this;\n    }\n  }\n  // Return `this` to allow chained DOM operations\n  return this;\n}\nfunction filter(callback) {\n  const matchedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]);\n  }\n  return new Dom7(matchedItems);\n}\nfunction map(callback) {\n  const modifiedItems = [];\n  const dom = this;\n  for (let i = 0; i < dom.length; i += 1) {\n    modifiedItems.push(callback.call(dom[i], i, dom[i]));\n  }\n  return new Dom7(modifiedItems);\n}\n// eslint-disable-next-line\nfunction html(html) {\n  if (typeof html === 'undefined') {\n    return this[0] ? this[0].innerHTML : undefined;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].innerHTML = html;\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction text(text) {\n  if (typeof text === 'undefined') {\n    if (this[0]) {\n      return this[0].textContent.trim();\n    }\n    return null;\n  }\n\n  for (let i = 0; i < this.length; i += 1) {\n    this[i].textContent = text;\n  }\n  return this;\n}\nfunction is(selector) {\n  const el = this[0];\n  let compareWith;\n  let i;\n  if (!el || typeof selector === 'undefined') return false;\n  if (typeof selector === 'string') {\n    if (el.matches) return el.matches(selector);\n    else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n    else if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n\n    compareWith = $(selector);\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  } else if (selector === document) return el === document;\n  else if (selector === window) return el === window;\n\n  if (selector.nodeType || selector instanceof Dom7) {\n    compareWith = selector.nodeType ? [selector] : selector;\n    for (i = 0; i < compareWith.length; i += 1) {\n      if (compareWith[i] === el) return true;\n    }\n    return false;\n  }\n  return false;\n}\nfunction indexOf(el) {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i] === el) return i;\n  }\n  return -1;\n}\nfunction index() {\n  let child = this[0];\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\n// eslint-disable-next-line\nfunction eq(index) {\n  if (typeof index === 'undefined') return this;\n  const length = this.length;\n  let returnIndex;\n  if (index > length - 1) {\n    return new Dom7([]);\n  }\n  if (index < 0) {\n    returnIndex = length + index;\n    if (returnIndex < 0) return new Dom7([]);\n    return new Dom7([this[returnIndex]]);\n  }\n  return new Dom7([this[index]]);\n}\nfunction append(...args) {\n  let newChild;\n\n  for (let k = 0; k < args.length; k += 1) {\n    newChild = args[k];\n    for (let i = 0; i < this.length; i += 1) {\n      if (typeof newChild === 'string') {\n        const tempDiv = document.createElement('div');\n        tempDiv.innerHTML = newChild;\n        while (tempDiv.firstChild) {\n          this[i].appendChild(tempDiv.firstChild);\n        }\n      } else if (newChild instanceof Dom7) {\n        for (let j = 0; j < newChild.length; j += 1) {\n          this[i].appendChild(newChild[j]);\n        }\n      } else {\n        this[i].appendChild(newChild);\n      }\n    }\n  }\n\n  return this;\n}\n// eslint-disable-next-line\nfunction appendTo(parent) {\n  $(parent).append(this);\n  return this;\n}\nfunction prepend(newChild) {\n  let i;\n  let j;\n  for (i = 0; i < this.length; i += 1) {\n    if (typeof newChild === 'string') {\n      const tempDiv = document.createElement('div');\n      tempDiv.innerHTML = newChild;\n      for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n        this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n      }\n    } else if (newChild instanceof Dom7) {\n      for (j = 0; j < newChild.length; j += 1) {\n        this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n      }\n    } else {\n      this[i].insertBefore(newChild, this[i].childNodes[0]);\n    }\n  }\n  return this;\n}\n// eslint-disable-next-line\nfunction prependTo(parent) {\n  $(parent).prepend(this);\n  return this;\n}\nfunction insertBefore(selector) {\n  const before = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (before.length === 1) {\n      before[0].parentNode.insertBefore(this[i], before[0]);\n    } else if (before.length > 1) {\n      for (let j = 0; j < before.length; j += 1) {\n        before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n      }\n    }\n  }\n}\nfunction insertAfter(selector) {\n  const after = $(selector);\n  for (let i = 0; i < this.length; i += 1) {\n    if (after.length === 1) {\n      after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n    } else if (after.length > 1) {\n      for (let j = 0; j < after.length; j += 1) {\n        after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n      }\n    }\n  }\n}\nfunction next(selector) {\n  if (this.length > 0) {\n    if (selector) {\n      if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n        return new Dom7([this[0].nextElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction nextAll(selector) {\n  const nextEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(next).is(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return new Dom7(nextEls);\n}\nfunction prev(selector) {\n  if (this.length > 0) {\n    const el = this[0];\n    if (selector) {\n      if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n        return new Dom7([el.previousElementSibling]);\n      }\n      return new Dom7([]);\n    }\n\n    if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);\n    return new Dom7([]);\n  }\n  return new Dom7([]);\n}\nfunction prevAll(selector) {\n  const prevEls = [];\n  let el = this[0];\n  if (!el) return new Dom7([]);\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if ($(prev).is(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return new Dom7(prevEls);\n}\nfunction siblings(selector) {\n  return this.nextAll(selector).add(this.prevAll(selector));\n}\nfunction parent(selector) {\n  const parents = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode !== null) {\n      if (selector) {\n        if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n      } else {\n        parents.push(this[i].parentNode);\n      }\n    }\n  }\n  return $(unique(parents));\n}\nfunction parents(selector) {\n  const parents = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    let parent = this[i].parentNode; // eslint-disable-line\n    while (parent) {\n      if (selector) {\n        if ($(parent).is(selector)) parents.push(parent);\n      } else {\n        parents.push(parent);\n      }\n      parent = parent.parentNode;\n    }\n  }\n  return $(unique(parents));\n}\nfunction closest(selector) {\n  let closest = this; // eslint-disable-line\n  if (typeof selector === 'undefined') {\n    return new Dom7([]);\n  }\n  if (!closest.is(selector)) {\n    closest = closest.parents(selector).eq(0);\n  }\n  return closest;\n}\nfunction find(selector) {\n  const foundElements = [];\n  for (let i = 0; i < this.length; i += 1) {\n    const found = this[i].querySelectorAll(selector);\n    for (let j = 0; j < found.length; j += 1) {\n      foundElements.push(found[j]);\n    }\n  }\n  return new Dom7(foundElements);\n}\nfunction children(selector) {\n  const children = []; // eslint-disable-line\n  for (let i = 0; i < this.length; i += 1) {\n    const childNodes = this[i].childNodes;\n\n    for (let j = 0; j < childNodes.length; j += 1) {\n      if (!selector) {\n        if (childNodes[j].nodeType === 1) children.push(childNodes[j]);\n      } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n        children.push(childNodes[j]);\n      }\n    }\n  }\n  return new Dom7(unique(children));\n}\nfunction remove() {\n  for (let i = 0; i < this.length; i += 1) {\n    if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n  }\n  return this;\n}\nfunction detach() {\n  return this.remove();\n}\nfunction add(...args) {\n  const dom = this;\n  let i;\n  let j;\n  for (i = 0; i < args.length; i += 1) {\n    const toAdd = $(args[i]);\n    for (j = 0; j < toAdd.length; j += 1) {\n      dom[dom.length] = toAdd[j];\n      dom.length += 1;\n    }\n  }\n  return dom;\n}\nfunction empty() {\n  for (let i = 0; i < this.length; i += 1) {\n    const el = this[i];\n    if (el.nodeType === 1) {\n      for (let j = 0; j < el.childNodes.length; j += 1) {\n        if (el.childNodes[j].parentNode) {\n          el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n        }\n      }\n      el.textContent = '';\n    }\n  }\n  return this;\n}\n\nfunction scrollTo(...args) {\n  let [left, top, duration, easing, callback] = args;\n  if (args.length === 4 && typeof easing === 'function') {\n    callback = easing;\n    [left, top, duration, callback, easing] = args;\n  }\n  if (typeof easing === 'undefined') easing = 'swing';\n\n  return this.each(function animate() {\n    const el = this;\n    let currentTop;\n    let currentLeft;\n    let maxTop;\n    let maxLeft;\n    let newTop;\n    let newLeft;\n    let scrollTop; // eslint-disable-line\n    let scrollLeft; // eslint-disable-line\n    let animateTop = top > 0 || top === 0;\n    let animateLeft = left > 0 || left === 0;\n    if (typeof easing === 'undefined') {\n      easing = 'swing';\n    }\n    if (animateTop) {\n      currentTop = el.scrollTop;\n      if (!duration) {\n        el.scrollTop = top;\n      }\n    }\n    if (animateLeft) {\n      currentLeft = el.scrollLeft;\n      if (!duration) {\n        el.scrollLeft = left;\n      }\n    }\n    if (!duration) return;\n    if (animateTop) {\n      maxTop = el.scrollHeight - el.offsetHeight;\n      newTop = Math.max(Math.min(top, maxTop), 0);\n    }\n    if (animateLeft) {\n      maxLeft = el.scrollWidth - el.offsetWidth;\n      newLeft = Math.max(Math.min(left, maxLeft), 0);\n    }\n    let startTime = null;\n    if (animateTop && newTop === currentTop) animateTop = false;\n    if (animateLeft && newLeft === currentLeft) animateLeft = false;\n    function render(time = new Date().getTime()) {\n      if (startTime === null) {\n        startTime = time;\n      }\n      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n      const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2));\n      let done;\n      if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop));\n      if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft));\n      if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n        el.scrollTop = newTop;\n        done = true;\n      }\n      if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n      if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n        el.scrollLeft = newLeft;\n        done = true;\n      }\n\n      if (done) {\n        if (callback) callback();\n        return;\n      }\n      if (animateTop) el.scrollTop = scrollTop;\n      if (animateLeft) el.scrollLeft = scrollLeft;\n      requestAnimationFrame(render);\n    }\n    requestAnimationFrame(render);\n  });\n}\n// scrollTop(top, duration, easing, callback) {\nfunction scrollTop(...args) {\n  let [top, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [top, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof top === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollTop;\n    return null;\n  }\n  return dom.scrollTo(undefined, top, duration, easing, callback);\n}\nfunction scrollLeft(...args) {\n  let [left, duration, easing, callback] = args;\n  if (args.length === 3 && typeof easing === 'function') {\n    [left, duration, callback, easing] = args;\n  }\n  const dom = this;\n  if (typeof left === 'undefined') {\n    if (dom.length > 0) return dom[0].scrollLeft;\n    return null;\n  }\n  return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n  const els = this;\n  const a = {\n    props: Object.assign({}, initialProps),\n    params: Object.assign({\n      duration: 300,\n      easing: 'swing', // or 'linear'\n      /* Callbacks\n      begin(elements)\n      complete(elements)\n      progress(elements, complete, remaining, start, tweenValue)\n      */\n    }, initialParams),\n\n    elements: els,\n    animating: false,\n    que: [],\n\n    easingProgress(easing, progress) {\n      if (easing === 'swing') {\n        return 0.5 - (Math.cos(progress * Math.PI) / 2);\n      }\n      if (typeof easing === 'function') {\n        return easing(progress);\n      }\n      return progress;\n    },\n    stop() {\n      if (a.frameId) {\n        cancelAnimationFrame(a.frameId);\n      }\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      a.que = [];\n    },\n    done(complete) {\n      a.animating = false;\n      a.elements.each((index, el) => {\n        const element = el;\n        delete element.dom7AnimateInstance;\n      });\n      if (complete) complete(els);\n      if (a.que.length > 0) {\n        const que = a.que.shift();\n        a.animate(que[0], que[1]);\n      }\n    },\n    animate(props, params) {\n      if (a.animating) {\n        a.que.push([props, params]);\n        return a;\n      }\n      const elements = [];\n\n      // Define & Cache Initials & Units\n      a.elements.each((index, el) => {\n        let initialFullValue;\n        let initialValue;\n        let unit;\n        let finalValue;\n        let finalFullValue;\n\n        if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n\n        elements[index] = {\n          container: el,\n        };\n        Object.keys(props).forEach((prop) => {\n          initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n          initialValue = parseFloat(initialFullValue);\n          unit = initialFullValue.replace(initialValue, '');\n          finalValue = parseFloat(props[prop]);\n          finalFullValue = props[prop] + unit;\n          elements[index][prop] = {\n            initialFullValue,\n            initialValue,\n            unit,\n            finalValue,\n            finalFullValue,\n            currentValue: initialValue,\n          };\n        });\n      });\n\n      let startTime = null;\n      let time;\n      let elementsDone = 0;\n      let propsDone = 0;\n      let done;\n      let began = false;\n\n      a.animating = true;\n\n      function render() {\n        time = new Date().getTime();\n        let progress;\n        let easeProgress;\n        // let el;\n        if (!began) {\n          began = true;\n          if (params.begin) params.begin(els);\n        }\n        if (startTime === null) {\n          startTime = time;\n        }\n        if (params.progress) {\n          // eslint-disable-next-line\n          params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime);\n        }\n\n        elements.forEach((element) => {\n          const el = element;\n          if (done || el.done) return;\n          Object.keys(props).forEach((prop) => {\n            if (done || el.done) return;\n            progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n            easeProgress = a.easingProgress(params.easing, progress);\n            const { initialValue, finalValue, unit } = el[prop];\n            el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue));\n            const currentValue = el[prop].currentValue;\n\n            if (\n              (finalValue > initialValue && currentValue >= finalValue) ||\n              (finalValue < initialValue && currentValue <= finalValue)) {\n              el.container.style[prop] = finalValue + unit;\n              propsDone += 1;\n              if (propsDone === Object.keys(props).length) {\n                el.done = true;\n                elementsDone += 1;\n              }\n              if (elementsDone === elements.length) {\n                done = true;\n              }\n            }\n            if (done) {\n              a.done(params.complete);\n              return;\n            }\n            el.container.style[prop] = currentValue + unit;\n          });\n        });\n        if (done) return;\n        // Then call\n        a.frameId = requestAnimationFrame(render);\n      }\n      a.frameId = requestAnimationFrame(render);\n      return a;\n    },\n  };\n\n  if (a.elements.length === 0) {\n    return els;\n  }\n\n  let animateInstance;\n  for (let i = 0; i < a.elements.length; i += 1) {\n    if (a.elements[i].dom7AnimateInstance) {\n      animateInstance = a.elements[i].dom7AnimateInstance;\n    } else a.elements[i].dom7AnimateInstance = a;\n  }\n  if (!animateInstance) {\n    animateInstance = a;\n  }\n\n  if (initialProps === 'stop') {\n    animateInstance.stop();\n  } else {\n    animateInstance.animate(a.props, a.params);\n  }\n\n  return els;\n}\n\nfunction stop() {\n  const els = this;\n  for (let i = 0; i < els.length; i += 1) {\n    if (els[i].dom7AnimateInstance) {\n      els[i].dom7AnimateInstance.stop();\n    }\n  }\n}\n\nconst noTrigger = ('resize scroll').split(' ');\nfunction eventShortcut(name, ...args) {\n  if (typeof args[0] === 'undefined') {\n    for (let i = 0; i < this.length; i += 1) {\n      if (noTrigger.indexOf(name) < 0) {\n        if (name in this[i]) this[i][name]();\n        else {\n          $(this[i]).trigger(name);\n        }\n      }\n    }\n    return this;\n  }\n  return this.on(name, ...args);\n}\n\nfunction click(...args) {\n  return eventShortcut.bind(this)('click', ...args);\n}\nfunction blur(...args) {\n  return eventShortcut.bind(this)('blur', ...args);\n}\nfunction focus(...args) {\n  return eventShortcut.bind(this)('focus', ...args);\n}\nfunction focusin(...args) {\n  return eventShortcut.bind(this)('focusin', ...args);\n}\nfunction focusout(...args) {\n  return eventShortcut.bind(this)('focusout', ...args);\n}\nfunction keyup(...args) {\n  return eventShortcut.bind(this)('keyup', ...args);\n}\nfunction keydown(...args) {\n  return eventShortcut.bind(this)('keydown', ...args);\n}\nfunction keypress(...args) {\n  return eventShortcut.bind(this)('keypress', ...args);\n}\nfunction submit(...args) {\n  return eventShortcut.bind(this)('submit', ...args);\n}\nfunction change(...args) {\n  return eventShortcut.bind(this)('change', ...args);\n}\nfunction mousedown(...args) {\n  return eventShortcut.bind(this)('mousedown', ...args);\n}\nfunction mousemove(...args) {\n  return eventShortcut.bind(this)('mousemove', ...args);\n}\nfunction mouseup(...args) {\n  return eventShortcut.bind(this)('mouseup', ...args);\n}\nfunction mouseenter(...args) {\n  return eventShortcut.bind(this)('mouseenter', ...args);\n}\nfunction mouseleave(...args) {\n  return eventShortcut.bind(this)('mouseleave', ...args);\n}\nfunction mouseout(...args) {\n  return eventShortcut.bind(this)('mouseout', ...args);\n}\nfunction mouseover(...args) {\n  return eventShortcut.bind(this)('mouseover', ...args);\n}\nfunction touchstart(...args) {\n  return eventShortcut.bind(this)('touchstart', ...args);\n}\nfunction touchend(...args) {\n  return eventShortcut.bind(this)('touchend', ...args);\n}\nfunction touchmove(...args) {\n  return eventShortcut.bind(this)('touchmove', ...args);\n}\nfunction resize(...args) {\n  return eventShortcut.bind(this)('resize', ...args);\n}\nfunction scroll(...args) {\n  return eventShortcut.bind(this)('scroll', ...args);\n}\n\nexport { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll };\n","import {\n  $,\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n} from 'dom7/dist/dom7.modular';\n\nconst Methods = {\n  addClass,\n  removeClass,\n  hasClass,\n  toggleClass,\n  attr,\n  removeAttr,\n  data,\n  transform,\n  transition,\n  on,\n  off,\n  trigger,\n  transitionEnd,\n  outerWidth,\n  outerHeight,\n  offset,\n  css,\n  each,\n  html,\n  text,\n  is,\n  index,\n  eq,\n  append,\n  prepend,\n  next,\n  nextAll,\n  prev,\n  prevAll,\n  parent,\n  parents,\n  closest,\n  find,\n  children,\n  filter,\n  remove,\n  add,\n  styles,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n  $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n});\n\nexport default $;\n","import { window } from 'ssr-window';\n\nconst Utils = {\n  deleteProps(obj) {\n    const object = obj;\n    Object.keys(object).forEach((key) => {\n      try {\n        object[key] = null;\n      } catch (e) {\n        // no getter for object\n      }\n      try {\n        delete object[key];\n      } catch (e) {\n        // something got wrong\n      }\n    });\n  },\n  nextTick(callback, delay = 0) {\n    return setTimeout(callback, delay);\n  },\n  now() {\n    return Date.now();\n  },\n  getTranslate(el, axis = 'x') {\n    let matrix;\n    let curTransform;\n    let transformMatrix;\n\n    const curStyle = window.getComputedStyle(el, null);\n\n    if (window.WebKitCSSMatrix) {\n      curTransform = curStyle.transform || curStyle.webkitTransform;\n      if (curTransform.split(',').length > 6) {\n        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');\n      }\n      // Some old versions of Webkit choke when 'none' is passed; pass\n      // empty string instead in this case\n      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n    } else {\n      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n      matrix = transformMatrix.toString().split(',');\n    }\n\n    if (axis === 'x') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[4]);\n    }\n    if (axis === 'y') {\n      // Latest Chrome and webkits Fix\n      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n      // Crazy IE10 Matrix\n      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n      // Normal Browsers\n      else curTransform = parseFloat(matrix[5]);\n    }\n    return curTransform || 0;\n  },\n  parseUrlQuery(url) {\n    const query = {};\n    let urlToParse = url || window.location.href;\n    let i;\n    let params;\n    let param;\n    let length;\n    if (typeof urlToParse === 'string' && urlToParse.length) {\n      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');\n      length = params.length;\n\n      for (i = 0; i < length; i += 1) {\n        param = params[i].replace(/#\\S+/g, '').split('=');\n        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n      }\n    }\n    return query;\n  },\n  isObject(o) {\n    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n  },\n  extend(...args) {\n    const to = Object(args[0]);\n    for (let i = 1; i < args.length; i += 1) {\n      const nextSource = args[i];\n      if (nextSource !== undefined && nextSource !== null) {\n        const keysArray = Object.keys(Object(nextSource));\n        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n          const nextKey = keysArray[nextIndex];\n          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n          if (desc !== undefined && desc.enumerable) {\n            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n              to[nextKey] = {};\n              Utils.extend(to[nextKey], nextSource[nextKey]);\n            } else {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n      }\n    }\n    return to;\n  },\n};\nexport default Utils;\n","import { window, document } from 'ssr-window';\n\nconst Support = (function Support() {\n  return {\n    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n\n    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,\n\n    observer: (function checkObserver() {\n      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);\n    }()),\n\n    passiveListener: (function checkPassiveListener() {\n      let supportsPassive = false;\n      try {\n        const opts = Object.defineProperty({}, 'passive', {\n          // eslint-disable-next-line\n          get() {\n            supportsPassive = true;\n          },\n        });\n        window.addEventListener('testPassiveListener', null, opts);\n      } catch (e) {\n        // No support\n      }\n      return supportsPassive;\n    }()),\n\n    gestures: (function checkGestures() {\n      return 'ongesturestart' in window;\n    }()),\n  };\n}());\n\nexport default Support;\n","import Utils from './utils';\n\nclass SwiperClass {\n  constructor(params = {}) {\n    const self = this;\n    self.params = params;\n\n    // Events\n    self.eventsListeners = {};\n\n    if (self.params && self.params.on) {\n      Object.keys(self.params.on).forEach((eventName) => {\n        self.on(eventName, self.params.on[eventName]);\n      });\n    }\n  }\n\n  on(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach((event) => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  }\n\n  once(events, handler, priority) {\n    const self = this;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.f7proxy) {\n        delete onceHandler.f7proxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.f7proxy = handler;\n    return self.on(events, onceHandler, priority);\n  }\n\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach((event) => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  }\n\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach((event) => {\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        const handlers = [];\n        self.eventsListeners[event].forEach((eventHandler) => {\n          handlers.push(eventHandler);\n        });\n        handlers.forEach((eventHandler) => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n\n  useModulesParams(instanceParams) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      // Extend params\n      if (module.params) {\n        Utils.extend(instanceParams, module.params);\n      }\n    });\n  }\n\n  useModules(modulesParams = {}) {\n    const instance = this;\n    if (!instance.modules) return;\n    Object.keys(instance.modules).forEach((moduleName) => {\n      const module = instance.modules[moduleName];\n      const moduleParams = modulesParams[moduleName] || {};\n      // Extend instance methods and props\n      if (module.instance) {\n        Object.keys(module.instance).forEach((modulePropName) => {\n          const moduleProp = module.instance[modulePropName];\n          if (typeof moduleProp === 'function') {\n            instance[modulePropName] = moduleProp.bind(instance);\n          } else {\n            instance[modulePropName] = moduleProp;\n          }\n        });\n      }\n      // Add event listeners\n      if (module.on && instance.on) {\n        Object.keys(module.on).forEach((moduleEventName) => {\n          instance.on(moduleEventName, module.on[moduleEventName]);\n        });\n      }\n\n      // Module create callback\n      if (module.create) {\n        module.create.bind(instance)(moduleParams);\n      }\n    });\n  }\n\n  static set components(components) {\n    const Class = this;\n    if (!Class.use) return;\n    Class.use(components);\n  }\n\n  static installModule(module, ...params) {\n    const Class = this;\n    if (!Class.prototype.modules) Class.prototype.modules = {};\n    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);\n    Class.prototype.modules[name] = module;\n    // Prototype\n    if (module.proto) {\n      Object.keys(module.proto).forEach((key) => {\n        Class.prototype[key] = module.proto[key];\n      });\n    }\n    // Class\n    if (module.static) {\n      Object.keys(module.static).forEach((key) => {\n        Class[key] = module.static[key];\n      });\n    }\n    // Callback\n    if (module.install) {\n      module.install.apply(Class, params);\n    }\n    return Class;\n  }\n\n  static use(module, ...params) {\n    const Class = this;\n    if (Array.isArray(module)) {\n      module.forEach((m) => Class.installModule(m));\n      return Class;\n    }\n    return Class.installModule(module, ...params);\n  }\n}\n\nexport default SwiperClass;\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  let width;\n  let height;\n  const $el = swiper.$el;\n  if (typeof swiper.params.width !== 'undefined') {\n    width = swiper.params.width;\n  } else {\n    width = $el[0].clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined') {\n    height = swiper.params.height;\n  } else {\n    height = $el[0].clientHeight;\n  }\n  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n  Utils.extend(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height,\n  });\n}\n","import { window } from 'ssr-window';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const params = swiper.params;\n\n  const {\n    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n\n  function slidesForMargin(slideIndex) {\n    if (!params.cssMode) return true;\n    if (slideIndex === slides.length - 1) {\n      return false;\n    }\n    return true;\n  }\n\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.snapGrid.length;\n\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n  }\n\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  if (rtl) slides.css({ marginLeft: '', marginTop: '' });\n  else slides.css({ marginRight: '', marginBottom: '' });\n\n  let slidesNumberEvenToRows;\n  if (params.slidesPerColumn > 1) {\n    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n    }\n    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n    }\n  }\n\n  // Calc slides\n  let slideSize;\n  const slidesPerColumn = params.slidesPerColumn;\n  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides.eq(i);\n    if (params.slidesPerColumn > 1) {\n      // Set slides order\n      let newSlideOrderIndex;\n      let column;\n      let row;\n      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n        const columnsInGroup = groupIndex === 0\n          ? params.slidesPerGroup\n          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n        row = Math.floor(slideIndexInGroup / columnsInGroup);\n        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n        slide\n          .css({\n            '-webkit-box-ordinal-group': newSlideOrderIndex,\n            '-moz-box-ordinal-group': newSlideOrderIndex,\n            '-ms-flex-order': newSlideOrderIndex,\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex,\n          });\n      } else if (params.slidesPerColumnFill === 'column') {\n        column = Math.floor(i / slidesPerColumn);\n        row = i - (column * slidesPerColumn);\n        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n          row += 1;\n          if (row >= slidesPerColumn) {\n            row = 0;\n            column += 1;\n          }\n        }\n      } else {\n        row = Math.floor(i / slidesPerRow);\n        column = i - (row * slidesPerRow);\n      }\n      slide.css(\n        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,\n        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)\n      );\n    }\n    if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      const slideStyles = window.getComputedStyle(slide[0], null);\n      const currentTransform = slide[0].style.transform;\n      const currentWebKitTransform = slide[0].style.webkitTransform;\n      if (currentTransform) {\n        slide[0].style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal()\n          ? slide.outerWidth(true)\n          : slide.outerHeight(true);\n      } else {\n        // eslint-disable-next-line\n        if (swiper.isHorizontal()) {\n          const width = parseFloat(slideStyles.getPropertyValue('width'));\n          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = width + marginLeft + marginRight;\n          } else {\n            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n          }\n        } else {\n          const height = parseFloat(slideStyles.getPropertyValue('height'));\n          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n          const boxSizing = slideStyles.getPropertyValue('box-sizing');\n          if (boxSizing && boxSizing === 'border-box') {\n            slideSize = height + marginTop + marginBottom;\n          } else {\n            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n          }\n        }\n      }\n      if (currentTransform) {\n        slide[0].style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide[0].style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n      if (slides[i]) {\n        if (swiper.isHorizontal()) {\n          slides[i].style.width = `${slideSize}px`;\n        } else {\n          slides[i].style.height = `${slideSize}px`;\n        }\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n\n\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n\n    swiper.virtualSize += slideSize + spaceBetween;\n\n    prevSlideSize = slideSize;\n\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  let newSlidesGrid;\n\n  if (\n    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n  if (params.setWrapperSize) {\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n  }\n\n  if (params.slidesPerColumn > 1) {\n    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });\n    if (params.centeredSlides) {\n      newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid = newSlidesGrid;\n    }\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n\n  if (params.spaceBetween !== 0) {\n    if (swiper.isHorizontal()) {\n      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });\n      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });\n    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });\n  }\n\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    const maxSnap = allSlidesSize - swiperSize;\n    snapGrid = snapGrid.map((snap) => {\n      if (snap < 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach((slideSizeValue) => {\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n    });\n    allSlidesSize -= params.spaceBetween;\n    if (allSlidesSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n\n  Utils.extend(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid,\n  });\n\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateSlidesOffset();\n  }\n}\n","export default function (speed) {\n  const swiper = this;\n  const activeSlides = [];\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      swiper.visibleSlides.each((index, slide) => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length) break;\n        activeSlides.push(swiper.slides.eq(index)[0]);\n      }\n    }\n  } else {\n    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function () {\n  const swiper = this;\n  const slides = swiper.slides;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (translate = (this && this.translate) || 0) {\n  const swiper = this;\n  const params = swiper.params;\n\n  const { slides, rtlTranslate: rtl } = swiper;\n\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n\n  // Visible Slides\n  slides.removeClass(params.slideVisibleClass);\n\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    const slideProgress = (\n      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n    ) / (slide.swiperSlideSize + params.spaceBetween);\n    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {\n      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n                || (slideAfter > 1 && slideAfter <= swiper.size)\n                || (slideBefore <= 0 && slideAfter >= swiper.size);\n      if (isVisible) {\n        swiper.visibleSlides.push(slide);\n        swiper.visibleSlidesIndexes.push(i);\n        slides.eq(i).addClass(params.slideVisibleClass);\n      }\n    }\n    slide.progress = rtl ? -slideProgress : slideProgress;\n  }\n  swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let { progress, isBeginning, isEnd } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / (translatesDiff);\n    isBeginning = progress <= 0;\n    isEnd = progress >= 1;\n  }\n  Utils.extend(swiper, {\n    progress,\n    isBeginning,\n    isEnd,\n  });\n\n  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);\n\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n    swiper.emit('fromEdge');\n  }\n\n  swiper.emit('progress', progress);\n}\n","export default function () {\n  const swiper = this;\n\n  const {\n    slides, params, $wrapperEl, activeIndex, realIndex,\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n\n  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n\n  let activeSlide;\n  if (isVirtual) {\n    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n  } else {\n    activeSlide = slides.eq(activeIndex);\n  }\n\n  // Active classes\n  activeSlide.addClass(params.slideActiveClass);\n\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (activeSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`)\n        .addClass(params.slideDuplicateActiveClass);\n    }\n  }\n  // Next Slide\n  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n  if (params.loop && nextSlide.length === 0) {\n    nextSlide = slides.eq(0);\n    nextSlide.addClass(params.slideNextClass);\n  }\n  // Prev Slide\n  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n  if (params.loop && prevSlide.length === 0) {\n    prevSlide = slides.eq(-1);\n    prevSlide.addClass(params.slidePrevClass);\n  }\n  if (params.loop) {\n    // Duplicate to all looped slides\n    if (nextSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicateNextClass);\n    }\n    if (prevSlide.hasClass(params.slideDuplicateClass)) {\n      $wrapperEl\n        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    } else {\n      $wrapperEl\n        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`)\n        .addClass(params.slideDuplicatePrevClass);\n    }\n  }\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  if (typeof activeIndex === 'undefined') {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n          activeIndex = i;\n        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n          activeIndex = i + 1;\n        }\n      } else if (translate >= slidesGrid[i]) {\n        activeIndex = i;\n      }\n    }\n    // Normalize slideIndex\n    if (params.normalizeSlideIndex) {\n      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n    }\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n\n  // Get real index\n  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n  Utils.extend(swiper, {\n    snapIndex,\n    realIndex,\n    previousIndex,\n    activeIndex,\n  });\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (previousRealIndex !== realIndex) {\n    swiper.emit('realIndexChange');\n  }\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    swiper.emit('slideChange');\n  }\n}\n","import $ from '../../../utils/dom';\n\nexport default function (e) {\n  const swiper = this;\n  const params = swiper.params;\n  const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n  let slideFound = false;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) slideFound = true;\n    }\n  }\n\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = $(slide).index();\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\n\nexport default {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function (axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n\n  const {\n    params, rtlTranslate: rtl, translate, $wrapperEl,\n  } = swiper;\n\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n\n  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n  if (rtl) currentTranslate = -currentTranslate;\n\n  return currentTranslate || 0;\n}\n","export default function (translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function () {\n  return (-this.snapGrid[0]);\n}\n","export default function () {\n  return (-this.snapGrid[this.snapGrid.length - 1]);\n}\n","export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n\n  const {\n    params,\n    wrapperEl,\n  } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n  else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: -newTranslate,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\n\nexport default {\n  getTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo,\n};\n","export default function (duration, byController) {\n  const swiper = this;\n\n  if (!swiper.params.cssMode) {\n    swiper.$wrapperEl.transition(duration);\n  }\n\n  swiper.emit('setTransition', duration, byController);\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, params, previousIndex } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionStart');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionStart');\n      return;\n    }\n    swiper.emit('slideChangeTransitionStart');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionStart');\n    } else {\n      swiper.emit('slidePrevTransitionStart');\n    }\n  }\n}\n","export default function (runCallbacks = true, direction) {\n  const swiper = this;\n  const { activeIndex, previousIndex, params } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';\n    else if (activeIndex < previousIndex) dir = 'prev';\n    else dir = 'reset';\n  }\n\n  swiper.emit('transitionEnd');\n\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit('slideResetTransitionEnd');\n      return;\n    }\n    swiper.emit('slideChangeTransitionEnd');\n    if (dir === 'next') {\n      swiper.emit('slideNextTransitionEnd');\n    } else {\n      swiper.emit('slidePrevTransitionEnd');\n    }\n  }\n}\n","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\n\nexport default {\n  setTransition,\n  transitionStart,\n  transitionEnd,\n};\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n\n  const {\n    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  const translate = -snapGrid[snapIndex];\n\n  // Update progress\n  swiper.updateProgress(translate);\n\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) return false;\n    }\n  }\n\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';\n  else if (slideIndex < activeIndex) direction = 'prev';\n  else direction = 'reset';\n\n\n  // Update Index\n  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    let t = -translate;\n    if (rtl) {\n      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n    }\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n    } else {\n      // eslint-disable-next-line\n      if (wrapperEl.scrollTo) {\n        wrapperEl.scrollTo({\n          [isH ? 'left' : 'top']: t,\n          behavior: 'smooth',\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n    }\n    return true;\n  }\n\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    swiper.transitionEnd(runCallbacks, direction);\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(translate);\n    swiper.updateActiveIndex(slideIndex);\n    swiper.updateSlidesClasses();\n    swiper.emit('beforeTransitionStart', speed, internal);\n    swiper.transitionStart(runCallbacks, direction);\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onSlideToWrapperTransitionEnd) {\n        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n          swiper.onSlideToWrapperTransitionEnd = null;\n          delete swiper.onSlideToWrapperTransitionEnd;\n          swiper.transitionEnd(runCallbacks, direction);\n        };\n      }\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n    }\n  }\n\n  return true;\n}\n","export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    newIndex += swiper.loopedSlides;\n  }\n\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const { params, animating } = swiper;\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params, animating, snapGrid, slidesGrid, rtlTranslate,\n  } = swiper;\n\n  if (params.loop) {\n    if (animating) return false;\n    swiper.loopFix();\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));\n\n  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    snapGrid.forEach((snap) => {\n      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n    });\n  }\n  let prevIndex;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal) {\n  const swiper = this;\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (\n        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n      ) {\n        swiper.loopFix();\n        slideToIndex = $wrapperEl\n          .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n          .eq(0)\n          .index();\n\n        Utils.nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = $wrapperEl\n        .children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`)\n        .eq(0)\n        .index();\n\n      Utils.nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\n\nexport default {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide,\n};\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function () {\n  const swiper = this;\n  const { params, $wrapperEl } = swiper;\n  // Remove duplicated slides\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n  let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n  if (params.loopFillGroupWithBlank) {\n    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n    if (blankSlidesNum !== params.slidesPerGroup) {\n      for (let i = 0; i < blankSlidesNum; i += 1) {\n        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n        $wrapperEl.append(blankNode);\n      }\n      slides = $wrapperEl.children(`.${params.slideClass}`);\n    }\n  }\n\n  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n  swiper.loopedSlides += params.loopAdditionalSlides;\n  if (swiper.loopedSlides > slides.length) {\n    swiper.loopedSlides = slides.length;\n  }\n\n  const prependSlides = [];\n  const appendSlides = [];\n  slides.each((index, el) => {\n    const slide = $(el);\n    if (index < swiper.loopedSlides) appendSlides.push(el);\n    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);\n    slide.attr('data-swiper-slide-index', index);\n  });\n  for (let i = 0; i < appendSlides.length; i += 1) {\n    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  swiper.emit('beforeLoopFix');\n\n  const {\n    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,\n  } = swiper;\n  let newIndex;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n\n  const snapTranslate = -snapGrid[activeIndex];\n  const diff = snapTranslate - swiper.getTranslate();\n\n  // Fix For Negative Oversliding\n  if (activeIndex < loopedSlides) {\n    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  } else if (activeIndex >= slides.length - loopedSlides) {\n    // Fix For Positive Oversliding\n    newIndex = -slides.length + activeIndex + loopedSlides;\n    newIndex += loopedSlides;\n    const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n    if (slideChanged && diff !== 0) {\n      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  swiper.emit('loopFix');\n}\n","export default function () {\n  const swiper = this;\n  const { $wrapperEl, params, slides } = swiper;\n  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n  slides.removeAttr('data-swiper-slide-index');\n}\n","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\n\nexport default {\n  loopCreate,\n  loopFix,\n  loopDestroy,\n};\n","import Support from '../../../utils/support';\n\nexport default function (moving) {\n  const swiper = this;\n  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  const el = swiper.el;\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","import Support from '../../../utils/support';\n\nexport default function () {\n  const swiper = this;\n  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;\n  swiper.el.style.cursor = '';\n}\n","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\n\nexport default {\n  setGrabCursor,\n  unsetGrabCursor,\n};\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { $wrapperEl, params } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n  } else {\n    $wrapperEl.append(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slides) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.prepend(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    $wrapperEl.prepend(slides);\n  }\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n","import Support from '../../../utils/support';\n\nexport default function (index, slides) {\n  const swiper = this;\n  const { $wrapperEl, params, activeIndex } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides.eq(i);\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) $wrapperEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    $wrapperEl.append(slides);\n  }\n\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    $wrapperEl.append(slidesBuffer[i]);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","import Support from '../../../utils/support';\n\nexport default function (slidesIndexes) {\n  const swiper = this;\n  const { params, $wrapperEl, activeIndex } = swiper;\n\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n\n  if (!(params.observer && Support.observer)) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\n\nexport default {\n  appendSlide,\n  prependSlide,\n  addSlide,\n  removeSlide,\n  removeAllSlides,\n};\n","import { window } from 'ssr-window';\nimport Support from './support';\n\nconst Device = (function Device() {\n  const platform = window.navigator.platform;\n  const ua = window.navigator.userAgent;\n\n  const device = {\n    ios: false,\n    android: false,\n    androidChrome: false,\n    desktop: false,\n    iphone: false,\n    ipod: false,\n    ipad: false,\n    edge: false,\n    ie: false,\n    firefox: false,\n    macos: false,\n    windows: false,\n    cordova: !!(window.cordova || window.phonegap),\n    phonegap: !!(window.cordova || window.phonegap),\n    electron: false,\n  };\n\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n  const edge = ua.indexOf('Edge/') >= 0;\n  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n  const windows = platform === 'Win32';\n  const electron = ua.toLowerCase().indexOf('electron') >= 0;\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  if (!ipad\n    && macos\n    && Support.touch\n    && (\n      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n      || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n      || (screenWidth === 768 && screenHeight === 1024) // other\n    )\n  ) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    macos = false;\n  }\n\n  device.ie = ie;\n  device.edge = edge;\n  device.firefox = firefox;\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.osVersion = android[2];\n    device.android = true;\n    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n  // iOS\n  if (iphone && !ipod) {\n    device.osVersion = iphone[2].replace(/_/g, '.');\n    device.iphone = true;\n  }\n  if (ipad) {\n    device.osVersion = ipad[2].replace(/_/g, '.');\n    device.ipad = true;\n  }\n  if (ipod) {\n    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    device.ipod = true;\n  }\n  // iOS 8+ changed UA\n  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n    if (device.osVersion.split('.')[0] === '10') {\n      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n    }\n  }\n\n  // Webview\n  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))\n    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\n  device.webview = device.webView;\n  device.standalone = device.webView;\n\n  // Desktop\n  device.desktop = !(device.ios || device.android) || electron;\n  if (device.desktop) {\n    device.electron = electron;\n    device.macos = macos;\n    device.windows = windows;\n    if (device.macos) {\n      device.os = 'macos';\n    }\n    if (device.windows) {\n      device.os = 'windows';\n    }\n  }\n\n  // Pixel Ratio\n  device.pixelRatio = window.devicePixelRatio || 1;\n\n  // Export object\n  return device;\n}());\n\nexport default Device;\n","import { window, document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches } = swiper;\n\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const $targetEl = $(e.target);\n\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!$targetEl.closest(swiper.wrapperEl).length) return;\n  }\n  data.isTouchEvent = e.type === 'touchstart';\n  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!$targetEl.closest(params.swipeHandler)[0]) return;\n  }\n\n  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n  if (\n    edgeSwipeDetection\n    && ((startX <= edgeSwipeThreshold)\n    || (startX >= window.screen.width - edgeSwipeThreshold))\n  ) {\n    return;\n  }\n\n  Utils.extend(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined,\n  });\n\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = Utils.now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  if (e.type !== 'touchstart') {\n    let preventDefault = true;\n    if ($targetEl.is(data.formElements)) preventDefault = false;\n    if (\n      document.activeElement\n      && $(document.activeElement).is(data.formElements)\n      && document.activeElement !== $targetEl[0]\n    ) {\n      document.activeElement.blur();\n    }\n\n    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n    if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n      e.preventDefault();\n    }\n  }\n  swiper.emit('touchStart', e);\n}\n","import { document } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const { params, touches, rtlTranslate: rtl } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  if (data.isTouchEvent && e.type !== 'touchmove') return;\n  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    // isMoved = true;\n    swiper.allowClick = false;\n    if (data.isTouched) {\n      Utils.extend(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY,\n      });\n      data.touchStartTime = Utils.now();\n    }\n    return;\n  }\n  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (\n        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n      ) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (\n      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n    ) {\n      return;\n    }\n  }\n  if (data.isTouchEvent && document.activeElement) {\n    if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  if (e.targetTouches && e.targetTouches.length > 1) return;\n\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;\n\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if ((diffX * diffX) + (diffY * diffY) >= 25) {\n        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n\n  if (!data.isMoved) {\n    if (params.loop) {\n      swiper.loopFix();\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  touches.diff = diff;\n\n  diff *= params.touchRatio;\n  if (rtl) diff = -diff;\n\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  data.currentTranslate = diff + data.startTranslate;\n\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);\n  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n    disableParentSwiper = false;\n    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);\n  }\n\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode) {\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime,\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: Utils.now(),\n    });\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n","import Utils from '../../../utils/utils';\n\nexport default function (event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n\n  const {\n    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,\n  } = swiper;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = Utils.now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    swiper.updateClickedSlide(e);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n\n  data.lastClickTime = Utils.now();\n  Utils.nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n\n  if (params.cssMode) {\n    return;\n  }\n\n  if (params.freeMode) {\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n\n    if (params.freeModeMomentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeModeMomentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeModeMomentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeModeSticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        swiper.once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeModeSticky) {\n          // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeModeSticky) {\n        swiper.slideToClosest();\n        return;\n      }\n\n      if (params.freeModeMomentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        $wrapperEl.transitionEnd(() => {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          swiper.emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(() => {\n            swiper.setTranslate(afterBouncePosition);\n            $wrapperEl.transitionEnd(() => {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          $wrapperEl.transitionEnd(() => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeModeSticky) {\n      swiper.slideToClosest();\n      return;\n    }\n\n    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    return;\n  }\n\n  // Find current slide\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {\n    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);\n\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);\n      else swiper.slideTo(stopIndex);\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n\n  const { params, el } = swiper;\n\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n\n  swiper.updateSize();\n  swiper.updateSlides();\n\n  swiper.updateSlidesClasses();\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    swiper.slideTo(swiper.activeIndex, 0, false, true);\n  }\n\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    swiper.autoplay.run();\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n","export default function (e) {\n  const swiper = this;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n","export default function () {\n  const swiper = this;\n  const { wrapperEl, rtlTranslate } = swiper;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    if (rtlTranslate) {\n      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);\n    } else {\n      swiper.translate = -wrapperEl.scrollLeft;\n    }\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === -0) swiper.translate = 0;\n\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { document } from 'ssr-window';\nimport Device from '../../../utils/device';\nimport Support from '../../../utils/support';\n\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n\n  swiper.onClick = onClick.bind(swiper);\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);\n      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n      if (!dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.addEventListener('mousedown', swiper.onTouchStart, false);\n      document.addEventListener('mousemove', swiper.onTouchMove, capture);\n      document.addEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.addEventListener('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl.addEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n  } else {\n    swiper.on('observerUpdate', onResize, true);\n  }\n}\n\nfunction detachEvents() {\n  const swiper = this;\n\n  const {\n    params, touchEvents, el, wrapperEl,\n  } = swiper;\n\n  const capture = !!params.nested;\n\n  // Touch Events\n  if (!Support.touch && Support.pointerEvents) {\n    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n  } else {\n    if (Support.touch) {\n      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n      if (touchEvents.cancel) {\n        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n      }\n    }\n    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n      el.removeEventListener('mousedown', swiper.onTouchStart, false);\n      document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n      document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n    }\n  }\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el.removeEventListener('click', swiper.onClick, true);\n  }\n\n  if (params.cssMode) {\n    wrapperEl.removeEventListener('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n}\n\nexport default {\n  attachEvents,\n  detachEvents,\n};\n","import Utils from '../../../utils/utils';\n\nexport default function () {\n  const swiper = this;\n  const {\n    activeIndex, initialized, loopedSlides = 0, params, $el,\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints);\n\n  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n    if (breakpointOnlyParams) {\n      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {\n        const paramValue = breakpointOnlyParams[param];\n        if (typeof paramValue === 'undefined') return;\n        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n          breakpointOnlyParams[param] = 'auto';\n        } else if (param === 'slidesPerView') {\n          breakpointOnlyParams[param] = parseFloat(paramValue);\n        } else {\n          breakpointOnlyParams[param] = parseInt(paramValue, 10);\n        }\n      });\n    }\n\n    const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n    const wasMultiRow = params.slidesPerColumn > 1;\n    const isMultiRow = breakpointParams.slidesPerColumn > 1;\n    if (wasMultiRow && !isMultiRow) {\n      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);\n    } else if (!wasMultiRow && isMultiRow) {\n      $el.addClass(`${params.containerModifierClass}multirow`);\n      if (breakpointParams.slidesPerColumnFill === 'column') {\n        $el.addClass(`${params.containerModifierClass}multirow-column`);\n      }\n    }\n\n    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n    if (directionChanged && initialized) {\n      swiper.changeDirection();\n    }\n\n    Utils.extend(swiper.params, breakpointParams);\n\n    Utils.extend(swiper, {\n      allowTouchMove: swiper.params.allowTouchMove,\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n    });\n\n    swiper.currentBreakpoint = breakpoint;\n\n    if (needsReLoop && initialized) {\n      swiper.loopDestroy();\n      swiper.loopCreate();\n      swiper.updateSlides();\n      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n    }\n\n    swiper.emit('breakpoint', breakpointParams);\n  }\n}\n","import { window } from 'ssr-window';\n\nexport default function (breakpoints) {\n  // Get breakpoint for window width\n  if (!breakpoints) return undefined;\n  let breakpoint = false;\n\n  const points = Object.keys(breakpoints).map((point) => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = window.innerHeight * minRatio;\n      return { value, point };\n    }\n    return { value: point, point };\n  });\n\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const { point, value } = points[i];\n    if (value <= window.innerWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\n\nexport default { setBreakpoint, getBreakpoint };\n","import Device from '../../../utils/device';\n\nexport default function () {\n  const swiper = this;\n  const {\n    classNames, params, rtl, $el,\n  } = swiper;\n  const suffixes = [];\n\n  suffixes.push('initialized');\n  suffixes.push(params.direction);\n\n  if (params.freeMode) {\n    suffixes.push('free-mode');\n  }\n  if (params.autoHeight) {\n    suffixes.push('autoheight');\n  }\n  if (rtl) {\n    suffixes.push('rtl');\n  }\n  if (params.slidesPerColumn > 1) {\n    suffixes.push('multirow');\n    if (params.slidesPerColumnFill === 'column') {\n      suffixes.push('multirow-column');\n    }\n  }\n  if (Device.android) {\n    suffixes.push('android');\n  }\n  if (Device.ios) {\n    suffixes.push('ios');\n  }\n\n  if (params.cssMode) {\n    suffixes.push('css-mode');\n  }\n\n  suffixes.forEach((suffix) => {\n    classNames.push(params.containerModifierClass + suffix);\n  });\n\n  $el.addClass(classNames.join(' '));\n}\n","export default function () {\n  const swiper = this;\n  const { $el, classNames } = swiper;\n\n  $el.removeClass(classNames.join(' '));\n}\n","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\n\nexport default { addClasses, removeClasses };\n","import { window } from 'ssr-window';\nimport $ from '../../../utils/dom';\n\nexport default function (imageEl, src, srcset, sizes, checkForComplete, callback) {\n  let image;\n  function onReady() {\n    if (callback) callback();\n  }\n  const isPicture = $(imageEl).parent('picture')[0];\n\n  if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n    if (src) {\n      image = new window.Image();\n      image.onload = onReady;\n      image.onerror = onReady;\n      if (sizes) {\n        image.sizes = sizes;\n      }\n      if (srcset) {\n        image.srcset = srcset;\n      }\n      if (src) {\n        image.src = src;\n      }\n    } else {\n      onReady();\n    }\n  } else {\n    // image already loaded...\n    onReady();\n  }\n}\n","export default function () {\n  const swiper = this;\n  swiper.imagesToLoad = swiper.$el.find('img');\n  function onReady() {\n    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n      if (swiper.params.updateOnImagesReady) swiper.update();\n      swiper.emit('imagesReady');\n    }\n  }\n  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n    const imageEl = swiper.imagesToLoad[i];\n    swiper.loadImage(\n      imageEl,\n      imageEl.currentSrc || imageEl.getAttribute('src'),\n      imageEl.srcset || imageEl.getAttribute('srcset'),\n      imageEl.sizes || imageEl.getAttribute('sizes'),\n      true,\n      onReady\n    );\n  }\n}\n","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\n\nexport default {\n  loadImage,\n  preloadImages,\n};\n","\nfunction checkOverflow() {\n  const swiper = this;\n  const params = swiper.params;\n  const wasLocked = swiper.isLocked;\n  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n    swiper.isLocked = lastSlidePosition <= swiper.size;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n\n  swiper.allowSlideNext = !swiper.isLocked;\n  swiper.allowSlidePrev = !swiper.isLocked;\n\n  // events\n  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n    swiper.navigation.update();\n  }\n}\n\nexport default { checkOverflow };\n","export default {\n  init: true,\n  direction: 'horizontal',\n  touchEventsTarget: 'container',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  //\n  preventInteractionOnTransition: false,\n\n  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n\n  // Free mode\n  freeMode: false,\n  freeModeMomentum: true,\n  freeModeMomentumRatio: 1,\n  freeModeMomentumBounce: true,\n  freeModeMomentumBounceRatio: 1,\n  freeModeMomentumVelocityRatio: 1,\n  freeModeSticky: false,\n  freeModeMinimumVelocity: 0.02,\n\n  // Autoheight\n  autoHeight: false,\n\n  // Set wrapper width\n  setWrapperSize: false,\n\n  // Virtual Translate\n  virtualTranslate: false,\n\n  // Effects\n  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerColumn: 1,\n  slidesPerColumnFill: 'column',\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0, // in px\n  slidesOffsetAfter: 0, // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: false,\n\n  // Round length\n  roundLengths: false,\n\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 0,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n\n  // Progress\n  watchSlidesProgress: false,\n  watchSlidesVisibility: false,\n\n  // Cursor\n  grabCursor: false,\n\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n\n  // Images\n  preloadImages: true,\n  updateOnImagesReady: true,\n\n  // loop\n  loop: false,\n  loopAdditionalSlides: 0,\n  loopedSlides: null,\n  loopFillGroupWithBlank: false,\n\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null, // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n\n  // Passive Listeners\n  passiveListeners: true,\n\n  // NS\n  containerModifierClass: 'swiper-container-', // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-invisible-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideDuplicateClass: 'swiper-slide-duplicate',\n  slideNextClass: 'swiper-slide-next',\n  slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n  slidePrevClass: 'swiper-slide-prev',\n  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n  wrapperClass: 'swiper-wrapper',\n\n  // Callbacks\n  runCallbacksOnInit: true,\n};\n","/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nimport SwiperClass from '../../utils/class';\n\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\n\nimport defaults from './defaults';\n\nconst prototypes = {\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  manipulation,\n  events,\n  breakpoints,\n  checkOverflow,\n  classes,\n  images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper extends SwiperClass {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n\n    params = Utils.extend({}, params);\n    if (el && !params.el) params.el = el;\n\n    super(params);\n\n    Object.keys(prototypes).forEach((prototypeGroup) => {\n      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n        if (!Swiper.prototype[protoMethod]) {\n          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n        }\n      });\n    });\n\n    // Swiper Instance\n    const swiper = this;\n    if (typeof swiper.modules === 'undefined') {\n      swiper.modules = {};\n    }\n    Object.keys(swiper.modules).forEach((moduleName) => {\n      const module = swiper.modules[moduleName];\n      if (module.params) {\n        const moduleParamName = Object.keys(module.params)[0];\n        const moduleParams = module.params[moduleParamName];\n        if (typeof moduleParams !== 'object' || moduleParams === null) return;\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = { enabled: true };\n        }\n        if (\n          typeof params[moduleParamName] === 'object'\n          && !('enabled' in params[moduleParamName])\n        ) {\n          params[moduleParamName].enabled = true;\n        }\n        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n      }\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = Utils.extend({}, defaults);\n    swiper.useModulesParams(swiperParams);\n\n    // Extend defaults with passed params\n    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = Utils.extend({}, swiper.params);\n    swiper.passedParams = Utils.extend({}, params);\n\n    // Save Dom lib\n    swiper.$ = $;\n\n    // Find el\n    const $el = $(swiper.params.el);\n    el = $el[0];\n\n    if (!el) {\n      return undefined;\n    }\n\n    if ($el.length > 1) {\n      const swipers = [];\n      $el.each((index, containerEl) => {\n        const newParams = Utils.extend({}, params, { el: containerEl });\n        swipers.push(new Swiper(newParams));\n      });\n      return swipers;\n    }\n\n    el.swiper = swiper;\n    $el.data('swiper', swiper);\n\n    // Find Wrapper\n    let $wrapperEl;\n    if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));\n      // Children needs to return slot items\n      $wrapperEl.children = (options) => $el.children(options);\n    } else {\n      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);\n    }\n    // Extend Swiper\n    Utils.extend(swiper, {\n      $el,\n      el,\n      $wrapperEl,\n      wrapperEl: $wrapperEl[0],\n\n      // Classes\n      classNames: [],\n\n      // Slides\n      slides: $(),\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // RTL\n      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n      wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n\n      //\n      isBeginning: true,\n      isEnd: false,\n\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n\n      // Touch Events\n      touchEvents: (function touchEvents() {\n        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n        let desktop = ['mousedown', 'mousemove', 'mouseup'];\n        if (Support.pointerEvents) {\n          desktop = ['pointerdown', 'pointermove', 'pointerup'];\n        }\n        swiper.touchEventsTouch = {\n          start: touch[0],\n          move: touch[1],\n          end: touch[2],\n          cancel: touch[3],\n        };\n        swiper.touchEventsDesktop = {\n          start: desktop[0],\n          move: desktop[1],\n          end: desktop[2],\n        };\n        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n      }()),\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        formElements: 'input, select, option, textarea, button, video, label',\n        // Last click time\n        lastClickTime: Utils.now(),\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        isTouchEvent: undefined,\n        startMoving: undefined,\n      },\n\n      // Clicks\n      allowClick: true,\n\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0,\n      },\n\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0,\n\n    });\n\n    // Install Modules\n    swiper.useModules();\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    return swiper;\n  }\n\n  slidesPerViewDynamic() {\n    const swiper = this;\n    const {\n      params, slides, slidesGrid, size: swiperSize, activeIndex,\n    } = swiper;\n    let spv = 1;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex].swiperSlideSize;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {\n          spv += 1;\n        }\n      }\n    }\n    return spv;\n  }\n\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const { snapGrid, params } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (swiper.params.freeMode) {\n      setTranslate();\n      if (swiper.params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n      return swiper;\n    }\n\n    swiper.$el\n      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n\n    swiper.params.direction = newDirection;\n\n    swiper.slides.each((slideIndex, slideEl) => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n\n    return swiper;\n  }\n\n  init() {\n    const swiper = this;\n    if (swiper.initialized) return;\n\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n\n    if (swiper.params.preloadImages) {\n      swiper.preloadImages();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n\n    // Init Flag\n    swiper.initialized = true;\n\n    // Emit\n    swiper.emit('init');\n  }\n\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params, $el, $wrapperEl, slides,\n    } = swiper;\n\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      $el.removeAttr('style');\n      $wrapperEl.removeAttr('style');\n      if (slides && slides.length) {\n        slides\n          .removeClass([\n            params.slideVisibleClass,\n            params.slideActiveClass,\n            params.slideNextClass,\n            params.slidePrevClass,\n          ].join(' '))\n          .removeAttr('style')\n          .removeAttr('data-swiper-slide-index');\n      }\n    }\n\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach((eventName) => {\n      swiper.off(eventName);\n    });\n\n    if (deleteInstance !== false) {\n      swiper.$el[0].swiper = null;\n      swiper.$el.data('swiper', null);\n      Utils.deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n\n    return null;\n  }\n\n  static extendDefaults(newDefaults) {\n    Utils.extend(extendedDefaults, newDefaults);\n  }\n\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n\n  static get defaults() {\n    return defaults;\n  }\n\n  static get Class() {\n    return SwiperClass;\n  }\n\n  static get $() {\n    return $;\n  }\n}\n\nexport default Swiper;\n","import Device from '../../utils/device';\n\nexport default {\n  name: 'device',\n  proto: {\n    device: Device,\n  },\n  static: {\n    device: Device,\n  },\n};\n","import Support from '../../utils/support';\n\nexport default {\n  name: 'support',\n  proto: {\n    support: Support,\n  },\n  static: {\n    support: Support,\n  },\n};\n","import { window } from 'ssr-window';\n\nconst Browser = (function Browser() {\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n  }\n  return {\n    isEdge: !!window.navigator.userAgent.match(/Edge/g),\n    isSafari: isSafari(),\n    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n  };\n}());\n\nexport default Browser;\n","import Browser from '../../utils/browser';\n\nexport default {\n  name: 'browser',\n  proto: {\n    browser: Browser,\n  },\n  static: {\n    browser: Browser,\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nexport default {\n  name: 'resize',\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      resize: {\n        resizeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('beforeResize');\n          swiper.emit('resize');\n        },\n        orientationChangeHandler() {\n          if (!swiper || swiper.destroyed || !swiper.initialized) return;\n          swiper.emit('orientationchange');\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      // Emit resize\n      window.addEventListener('resize', swiper.resize.resizeHandler);\n\n      // Emit orientationchange\n      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n    destroy() {\n      const swiper = this;\n      window.removeEventListener('resize', swiper.resize.resizeHandler);\n      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Observer = {\n  func: window.MutationObserver || window.WebkitMutationObserver,\n  attach(target, options = {}) {\n    const swiper = this;\n\n    const ObserverFunc = Observer.func;\n    const observer = new ObserverFunc((mutations) => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (mutations.length === 1) {\n        swiper.emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        swiper.emit('observerUpdate', mutations[0]);\n      };\n\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n    });\n\n    swiper.observer.observers.push(observer);\n  },\n  init() {\n    const swiper = this;\n    if (!Support.observer || !swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = swiper.$el.parents();\n      for (let i = 0; i < containerParents.length; i += 1) {\n        swiper.observer.attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n    // Observe wrapper\n    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n  },\n  destroy() {\n    const swiper = this;\n    swiper.observer.observers.forEach((observer) => {\n      observer.disconnect();\n    });\n    swiper.observer.observers = [];\n  },\n};\n\nexport default {\n  name: 'observer',\n  params: {\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false,\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      observer: {\n        init: Observer.init.bind(swiper),\n        attach: Observer.attach.bind(swiper),\n        destroy: Observer.destroy.bind(swiper),\n        observers: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.observer.init();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.observer.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Virtual = {\n  update(force) {\n    const swiper = this;\n    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      renderSlide,\n      offset: previousOffset,\n    } = swiper.virtual;\n    swiper.updateActiveIndex();\n    const activeIndex = swiper.activeIndex || 0;\n\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';\n    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;\n      slidesBefore = slidesPerGroup + addSlidesAfter;\n    }\n    const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n    Utils.extend(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n    });\n\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      if (swiper.lazy && swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    }\n\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.css(offsetProp, `${offset}px`);\n      }\n      swiper.updateProgress();\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: (function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()),\n      });\n      onRendered();\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    if (force) {\n      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      if (i >= from && i <= to) {\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(i);\n        } else {\n          if (i > previousTo) appendIndexes.push(i);\n          if (i < previousFrom) prependIndexes.push(i);\n        }\n      }\n    }\n    appendIndexes.forEach((index) => {\n      swiper.$wrapperEl.append(renderSlide(slides[index], index));\n    });\n    prependIndexes.sort((a, b) => b - a).forEach((index) => {\n      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n    });\n    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n    onRendered();\n  },\n  renderSlide(slide, index) {\n    const swiper = this;\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    const $slideEl = params.renderSlide\n      ? $(params.renderSlide.call(swiper, slide, index))\n      : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n    if (params.cache) swiper.virtual.cache[index] = $slideEl;\n    return $slideEl;\n  },\n  appendSlide(slides) {\n    const swiper = this;\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n    swiper.virtual.update(true);\n  },\n  prependSlide(slides) {\n    const swiper = this;\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach((cachedIndex) => {\n        const $cachedEl = cache[cachedIndex];\n        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n        if (cachedElIndex) {\n          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  },\n  removeSlide(slidesIndexes) {\n    const swiper = this;\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n        }\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n      }\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(activeIndex, 0);\n  },\n  removeAllSlides() {\n    const swiper = this;\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    swiper.virtual.update(true);\n    swiper.slideTo(0, 0);\n  },\n};\n\nexport default {\n  name: 'virtual',\n  params: {\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      virtual: {\n        update: Virtual.update.bind(swiper),\n        appendSlide: Virtual.appendSlide.bind(swiper),\n        prependSlide: Virtual.prependSlide.bind(swiper),\n        removeSlide: Virtual.removeSlide.bind(swiper),\n        removeAllSlides: Virtual.removeAllSlides.bind(swiper),\n        renderSlide: Virtual.renderSlide.bind(swiper),\n        slides: swiper.params.virtual.slides,\n        cache: {},\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n      const overwriteParams = {\n        watchSlidesProgress: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n\n      if (!swiper.params.initialSlide) {\n        swiper.virtual.update();\n      }\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.virtual.enabled) return;\n      swiper.virtual.update();\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Keyboard = {\n  handle(event) {\n    const swiper = this;\n    const { rtlTranslate: rtl } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    // Directions locks\n    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = swiper.$el.offset();\n      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n      const swiperCoord = [\n        [swiperOffset.left, swiperOffset.top],\n        [swiperOffset.left + swiper.width, swiperOffset.top],\n        [swiperOffset.left, swiperOffset.top + swiper.height],\n        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n      ];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (\n          point[0] >= 0 && point[0] <= windowWidth\n          && point[1] >= 0 && point[1] <= windowHeight\n        ) {\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();\n      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();\n    } else {\n      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {\n        if (e.preventDefault) e.preventDefault();\n        else e.returnValue = false;\n      }\n      if (kc === 34 || kc === 40) swiper.slideNext();\n      if (kc === 33 || kc === 38) swiper.slidePrev();\n    }\n    swiper.emit('keyPress', kc);\n    return undefined;\n  },\n  enable() {\n    const swiper = this;\n    if (swiper.keyboard.enabled) return;\n    $(document).on('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = true;\n  },\n  disable() {\n    const swiper = this;\n    if (!swiper.keyboard.enabled) return;\n    $(document).off('keydown', swiper.keyboard.handle);\n    swiper.keyboard.enabled = false;\n  },\n};\n\nexport default {\n  name: 'keyboard',\n  params: {\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      keyboard: {\n        enabled: false,\n        enable: Keyboard.enable.bind(swiper),\n        disable: Keyboard.disable.bind(swiper),\n        handle: Keyboard.handle.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.keyboard.enabled) {\n        swiper.keyboard.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.keyboard.enabled) {\n        swiper.keyboard.disable();\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nfunction isEventSupported() {\n  const eventName = 'onwheel';\n  let isSupported = eventName in document;\n\n  if (!isSupported) {\n    const element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported\n    && document.implementation\n    && document.implementation.hasFeature\n    // always returns true in newer browsers as per the standard.\n    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n    && document.implementation.hasFeature('', '') !== true\n  ) {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\nconst Mousewheel = {\n  lastScrollTime: Utils.now(),\n  lastEventBeforeSnap: undefined,\n  recentWheelEvents: [],\n  event() {\n    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';\n    return isEventSupported() ? 'wheel' : 'mousewheel';\n  },\n  normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n\n    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) { // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else { // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = (pX < 1) ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = (pY < 1) ? -1 : 1;\n    }\n\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY,\n    };\n  },\n  handleMouseEnter() {\n    const swiper = this;\n    swiper.mouseEntered = true;\n  },\n  handleMouseLeave() {\n    const swiper = this;\n    swiper.mouseEntered = false;\n  },\n  handle(event) {\n    let e = event;\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n    const data = Mousewheel.normalize(e);\n\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;\n        else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;\n      else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n\n    if (delta === 0) return true;\n\n    if (params.invert) delta = -delta;\n\n    if (!swiper.params.freeMode) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: Utils.now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event,\n      };\n\n      // Keep the most recent events\n      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          swiper.mousewheel.animateSlider(newEvent);\n        }\n      } else {\n        swiper.mousewheel.animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (swiper.mousewheel.releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n      const { lastEventBeforeSnap } = swiper.mousewheel;\n      const ignoreWheelEvents = lastEventBeforeSnap\n        && newEvent.time < lastEventBeforeSnap.time + 500\n        && newEvent.delta <= lastEventBeforeSnap.delta\n        && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n        if (swiper.params.loop) {\n          swiper.loopFix();\n        }\n        let position = swiper.getTranslate() + (delta * params.sensitivity);\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n\n        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n          swiper.updateSlidesClasses();\n        }\n\n        if (swiper.params.freeModeSticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(swiper.mousewheel.timeout);\n          swiper.mousewheel.timeout = undefined;\n          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            recentWheelEvents.splice(0);\n          } else if (recentWheelEvents.length >= 15\n              && newEvent.time - firstEvent.time < 500\n              && firstEvent.delta - newEvent.delta >= 1\n              && newEvent.delta <= 6\n          ) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            swiper.mousewheel.lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n          if (!swiper.mousewheel.timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            swiper.mousewheel.timeout = Utils.nextTick(() => {\n              const snapToThreshold = 0.5;\n              swiper.mousewheel.lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) swiper.emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n      }\n    }\n\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    return false;\n  },\n  animateSlider(newEvent) {\n    const swiper = this;\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        swiper.emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      swiper.emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();\n    // Return false as a default\n    return false;\n  },\n  releaseScroll(newEvent) {\n    const swiper = this;\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  },\n  enable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n    target.on(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = true;\n    return true;\n  },\n  disable() {\n    const swiper = this;\n    const event = Mousewheel.event();\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n      return true;\n    }\n    if (!event) return false;\n    if (!swiper.mousewheel.enabled) return false;\n    let target = swiper.$el;\n    if (swiper.params.mousewheel.eventsTarged !== 'container') {\n      target = $(swiper.params.mousewheel.eventsTarged);\n    }\n    target.off(event, swiper.mousewheel.handle);\n    swiper.mousewheel.enabled = false;\n    return true;\n  },\n};\n\nexport default {\n  name: 'mousewheel',\n  params: {\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarged: 'container',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      mousewheel: {\n        enabled: false,\n        enable: Mousewheel.enable.bind(swiper),\n        disable: Mousewheel.disable.bind(swiper),\n        handle: Mousewheel.handle.bind(swiper),\n        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n        animateSlider: Mousewheel.animateSlider.bind(swiper),\n        releaseScroll: Mousewheel.releaseScroll.bind(swiper),\n        lastScrollTime: Utils.now(),\n        lastEventBeforeSnap: undefined,\n        recentWheelEvents: [],\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n        swiper.mousewheel.disable();\n      }\n      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.cssMode) {\n        swiper.mousewheel.enable();\n      }\n      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Navigation = {\n  update() {\n    // Update Navigation Buttons\n    const swiper = this;\n    const params = swiper.params.navigation;\n\n    if (swiper.params.loop) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        $prevEl.addClass(params.disabledClass);\n      } else {\n        $prevEl.removeClass(params.disabledClass);\n      }\n      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        $nextEl.addClass(params.disabledClass);\n      } else {\n        $nextEl.removeClass(params.disabledClass);\n      }\n      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n    }\n  },\n  onPrevClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop) return;\n    swiper.slidePrev();\n  },\n  onNextClick(e) {\n    const swiper = this;\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop) return;\n    swiper.slideNext();\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.navigation;\n    if (!(params.nextEl || params.prevEl)) return;\n\n    let $nextEl;\n    let $prevEl;\n    if (params.nextEl) {\n      $nextEl = $(params.nextEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.nextEl === 'string'\n        && $nextEl.length > 1\n        && swiper.$el.find(params.nextEl).length === 1\n      ) {\n        $nextEl = swiper.$el.find(params.nextEl);\n      }\n    }\n    if (params.prevEl) {\n      $prevEl = $(params.prevEl);\n      if (\n        swiper.params.uniqueNavElements\n        && typeof params.prevEl === 'string'\n        && $prevEl.length > 1\n        && swiper.$el.find(params.prevEl).length === 1\n      ) {\n        $prevEl = swiper.$el.find(params.prevEl);\n      }\n    }\n\n    if ($nextEl && $nextEl.length > 0) {\n      $nextEl.on('click', swiper.navigation.onNextClick);\n    }\n    if ($prevEl && $prevEl.length > 0) {\n      $prevEl.on('click', swiper.navigation.onPrevClick);\n    }\n\n    Utils.extend(swiper.navigation, {\n      $nextEl,\n      nextEl: $nextEl && $nextEl[0],\n      $prevEl,\n      prevEl: $prevEl && $prevEl[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const { $nextEl, $prevEl } = swiper.navigation;\n    if ($nextEl && $nextEl.length) {\n      $nextEl.off('click', swiper.navigation.onNextClick);\n      $nextEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n    if ($prevEl && $prevEl.length) {\n      $prevEl.off('click', swiper.navigation.onPrevClick);\n      $prevEl.removeClass(swiper.params.navigation.disabledClass);\n    }\n  },\n};\n\nexport default {\n  name: 'navigation',\n  params: {\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      navigation: {\n        init: Navigation.init.bind(swiper),\n        update: Navigation.update.bind(swiper),\n        destroy: Navigation.destroy.bind(swiper),\n        onNextClick: Navigation.onNextClick.bind(swiper),\n        onPrevClick: Navigation.onPrevClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.navigation.init();\n      swiper.navigation.update();\n    },\n    toEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    fromEdge() {\n      const swiper = this;\n      swiper.navigation.update();\n    },\n    destroy() {\n      const swiper = this;\n      swiper.navigation.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      const { $nextEl, $prevEl } = swiper.navigation;\n      if (\n        swiper.params.navigation.hideOnClick\n        && !$(e.target).is($prevEl)\n        && !$(e.target).is($nextEl)\n      ) {\n        let isHidden;\n        if ($nextEl) {\n          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n        } else if ($prevEl) {\n          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n        }\n        if (isHidden === true) {\n          swiper.emit('navigationShow', swiper);\n        } else {\n          swiper.emit('navigationHide', swiper);\n        }\n        if ($nextEl) {\n          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n        if ($prevEl) {\n          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n        }\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Pagination = {\n  update() {\n    // Render || Update Pagination bullets/items\n    const swiper = this;\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const $el = swiper.pagination.$el;\n    // Current/Total\n    let current;\n    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n        current -= (slidesLength - (swiper.loopedSlides * 2));\n      }\n      if (current > total - 1) current -= total;\n      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n    } else {\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (swiper.pagination.dynamicBulletIndex < 0) {\n            swiper.pagination.dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = current - swiper.pagination.dynamicBulletIndex;\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);\n      if ($el.length > 1) {\n        bullets.each((index, bullet) => {\n          const $bullet = $(bullet);\n          const bulletIndex = $bullet.index();\n          if (bulletIndex === current) {\n            $bullet.addClass(params.bulletActiveClass);\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              $bullet.addClass(`${params.bulletActiveClass}-main`);\n            }\n            if (bulletIndex === firstIndex) {\n              $bullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n            }\n            if (bulletIndex === lastIndex) {\n              $bullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          }\n        });\n      } else {\n        const $bullet = bullets.eq(current);\n        const bulletIndex = $bullet.index();\n        $bullet.addClass(params.bulletActiveClass);\n        if (params.dynamicBullets) {\n          const $firstDisplayedBullet = bullets.eq(firstIndex);\n          const $lastDisplayedBullet = bullets.eq(lastIndex);\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n          }\n          if (swiper.params.loop) {\n            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n              }\n              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n            } else {\n              $firstDisplayedBullet\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev`)\n                .prev()\n                .addClass(`${params.bulletActiveClass}-prev-prev`);\n              $lastDisplayedBullet\n                .next()\n                .addClass(`${params.bulletActiveClass}-next`)\n                .next()\n                .addClass(`${params.bulletActiveClass}-next-next`);\n            }\n          } else {\n            $firstDisplayedBullet\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev`)\n              .prev()\n              .addClass(`${params.bulletActiveClass}-prev-prev`);\n            $lastDisplayedBullet\n              .next()\n              .addClass(`${params.bulletActiveClass}-next`)\n              .next()\n              .addClass(`${params.bulletActiveClass}-next-next`);\n          }\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n      }\n    }\n    if (params.type === 'fraction') {\n      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));\n      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));\n    }\n    if (params.type === 'progressbar') {\n      let progressbarDirection;\n      if (params.progressbarOpposite) {\n        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n      } else {\n        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n      }\n      const scale = (current + 1) / total;\n      let scaleX = 1;\n      let scaleY = 1;\n      if (progressbarDirection === 'horizontal') {\n        scaleX = scale;\n      } else {\n        scaleY = scale;\n      }\n      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n    }\n    if (params.type === 'custom' && params.renderCustom) {\n      $el.html(params.renderCustom(swiper, current + 1, total));\n      swiper.emit('paginationRender', swiper, $el[0]);\n    } else {\n      swiper.emit('paginationUpdate', swiper, $el[0]);\n    }\n    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n  },\n  render() {\n    // Render Container\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n    const $el = swiper.pagination.$el;\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n      $el.html(paginationHTML);\n      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>`\n        + ' / '\n        + `<span class=\"${params.totalClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n      $el.html(paginationHTML);\n    }\n    if (params.type !== 'custom') {\n      swiper.emit('paginationRender', swiper.pagination.$el[0]);\n    }\n  },\n  init() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n\n    let $el = $(params.el);\n    if ($el.length === 0) return;\n\n    if (\n      swiper.params.uniqueNavElements\n      && typeof params.el === 'string'\n      && $el.length > 1\n      && swiper.$el.find(params.el).length === 1\n    ) {\n      $el = swiper.$el.find(params.el);\n    }\n\n    if (params.type === 'bullets' && params.clickable) {\n      $el.addClass(params.clickableClass);\n    }\n\n    $el.addClass(params.modifierClass + params.type);\n\n    if (params.type === 'bullets' && params.dynamicBullets) {\n      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n      swiper.pagination.dynamicBulletIndex = 0;\n      if (params.dynamicMainBullets < 1) {\n        params.dynamicMainBullets = 1;\n      }\n    }\n    if (params.type === 'progressbar' && params.progressbarOpposite) {\n      $el.addClass(params.progressbarOppositeClass);\n    }\n\n    if (params.clickable) {\n      $el.on('click', `.${params.bulletClass}`, function onClick(e) {\n        e.preventDefault();\n        let index = $(this).index() * swiper.params.slidesPerGroup;\n        if (swiper.params.loop) index += swiper.loopedSlides;\n        swiper.slideTo(index);\n      });\n    }\n\n    Utils.extend(swiper.pagination, {\n      $el,\n      el: $el[0],\n    });\n  },\n  destroy() {\n    const swiper = this;\n    const params = swiper.params.pagination;\n    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;\n    const $el = swiper.pagination.$el;\n\n    $el.removeClass(params.hiddenClass);\n    $el.removeClass(params.modifierClass + params.type);\n    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n    if (params.clickable) {\n      $el.off('click', `.${params.bulletClass}`);\n    }\n  },\n};\n\nexport default {\n  name: 'pagination',\n  params: {\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: (number) => number,\n      formatFractionTotal: (number) => number,\n      bulletClass: 'swiper-pagination-bullet',\n      bulletActiveClass: 'swiper-pagination-bullet-active',\n      modifierClass: 'swiper-pagination-', // NEW\n      currentClass: 'swiper-pagination-current',\n      totalClass: 'swiper-pagination-total',\n      hiddenClass: 'swiper-pagination-hidden',\n      progressbarFillClass: 'swiper-pagination-progressbar-fill',\n      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n      clickableClass: 'swiper-pagination-clickable', // NEW\n      lockClass: 'swiper-pagination-lock',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      pagination: {\n        init: Pagination.init.bind(swiper),\n        render: Pagination.render.bind(swiper),\n        update: Pagination.update.bind(swiper),\n        destroy: Pagination.destroy.bind(swiper),\n        dynamicBulletIndex: 0,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.pagination.init();\n      swiper.pagination.render();\n      swiper.pagination.update();\n    },\n    activeIndexChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.update();\n      } else if (typeof swiper.snapIndex === 'undefined') {\n        swiper.pagination.update();\n      }\n    },\n    snapIndexChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.update();\n      }\n    },\n    slidesLengthChange() {\n      const swiper = this;\n      if (swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    snapGridLengthChange() {\n      const swiper = this;\n      if (!swiper.params.loop) {\n        swiper.pagination.render();\n        swiper.pagination.update();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.pagination.destroy();\n    },\n    click(e) {\n      const swiper = this;\n      if (\n        swiper.params.pagination.el\n        && swiper.params.pagination.hideOnClick\n        && swiper.pagination.$el.length > 0\n        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n      ) {\n        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n        if (isHidden === true) {\n          swiper.emit('paginationShow', swiper);\n        } else {\n          swiper.emit('paginationHide', swiper);\n        }\n        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n      }\n    },\n  },\n};\n","import { document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Support from '../../utils/support';\n\nconst Scrollbar = {\n  setTranslate() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n    const {\n      dragSize, trackSize, $dragEl, $el,\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n      $dragEl[0].style.width = `${newSize}px`;\n    } else {\n      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n      $dragEl[0].style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.timeout);\n      $el[0].style.opacity = 1;\n      swiper.scrollbar.timeout = setTimeout(() => {\n        $el[0].style.opacity = 0;\n        $el.transition(400);\n      }, 1000);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.$dragEl.transition(duration);\n  },\n  updateSize() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n    const { scrollbar } = swiper;\n    const { $dragEl, $el } = scrollbar;\n\n    $dragEl[0].style.width = '';\n    $dragEl[0].style.height = '';\n    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n    const divider = swiper.size / swiper.virtualSize;\n    const moveDivider = divider * (trackSize / swiper.size);\n    let dragSize;\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n\n    if (swiper.isHorizontal()) {\n      $dragEl[0].style.width = `${dragSize}px`;\n    } else {\n      $dragEl[0].style.height = `${dragSize}px`;\n    }\n\n    if (divider >= 1) {\n      $el[0].style.display = 'none';\n    } else {\n      $el[0].style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      $el[0].style.opacity = 0;\n    }\n    Utils.extend(scrollbar, {\n      trackSize,\n      divider,\n      moveDivider,\n      dragSize,\n    });\n    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n  },\n  getPointerPosition(e) {\n    const swiper = this;\n    if (swiper.isHorizontal()) {\n      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);\n    }\n    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);\n  },\n  setDragPosition(e) {\n    const swiper = this;\n    const { scrollbar, rtlTranslate: rtl } = swiper;\n    const {\n      $el,\n      dragSize,\n      trackSize,\n      dragStartPos,\n    } = scrollbar;\n\n    let positionRatio;\n    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']\n      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n\n    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);\n\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  },\n  onDragStart(e) {\n    const swiper = this;\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n    swiper.scrollbar.isTouched = true;\n    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)\n      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n\n    $wrapperEl.transition(100);\n    $dragEl.transition(100);\n    scrollbar.setDragPosition(e);\n\n    clearTimeout(swiper.scrollbar.dragTimeout);\n\n    $el.transition(0);\n    if (params.hide) {\n      $el.css('opacity', 1);\n    }\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', 'none');\n    }\n    swiper.emit('scrollbarDragStart', e);\n  },\n  onDragMove(e) {\n    const swiper = this;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el, $dragEl } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n    scrollbar.setDragPosition(e);\n    $wrapperEl.transition(0);\n    $el.transition(0);\n    $dragEl.transition(0);\n    swiper.emit('scrollbarDragMove', e);\n  },\n  onDragEnd(e) {\n    const swiper = this;\n\n    const params = swiper.params.scrollbar;\n    const { scrollbar, $wrapperEl } = swiper;\n    const { $el } = scrollbar;\n\n    if (!swiper.scrollbar.isTouched) return;\n    swiper.scrollbar.isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.$wrapperEl.css('scroll-snap-type', '');\n      $wrapperEl.transition('');\n    }\n    if (params.hide) {\n      clearTimeout(swiper.scrollbar.dragTimeout);\n      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {\n        $el.css('opacity', 0);\n        $el.transition(400);\n      }, 1000);\n    }\n    swiper.emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  },\n  enableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  disableDraggable() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const {\n      scrollbar, touchEventsTouch, touchEventsDesktop, params,\n    } = swiper;\n    const $el = scrollbar.$el;\n    const target = $el[0];\n    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;\n    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n    if (!Support.touch) {\n      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);\n      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);\n      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);\n    } else {\n      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);\n      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);\n      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.scrollbar.el) return;\n    const { scrollbar, $el: $swiperEl } = swiper;\n    const params = swiper.params.scrollbar;\n\n    let $el = $(params.el);\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n      $el = $swiperEl.find(params.el);\n    }\n\n    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n    if ($dragEl.length === 0) {\n      $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n      $el.append($dragEl);\n    }\n\n    Utils.extend(scrollbar, {\n      $el,\n      el: $el[0],\n      $dragEl,\n      dragEl: $dragEl[0],\n    });\n\n    if (params.draggable) {\n      scrollbar.enableDraggable();\n    }\n  },\n  destroy() {\n    const swiper = this;\n    swiper.scrollbar.disableDraggable();\n  },\n};\n\nexport default {\n  name: 'scrollbar',\n  params: {\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      scrollbar: {\n        init: Scrollbar.init.bind(swiper),\n        destroy: Scrollbar.destroy.bind(swiper),\n        updateSize: Scrollbar.updateSize.bind(swiper),\n        setTranslate: Scrollbar.setTranslate.bind(swiper),\n        setTransition: Scrollbar.setTransition.bind(swiper),\n        enableDraggable: Scrollbar.enableDraggable.bind(swiper),\n        disableDraggable: Scrollbar.disableDraggable.bind(swiper),\n        setDragPosition: Scrollbar.setDragPosition.bind(swiper),\n        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),\n        onDragStart: Scrollbar.onDragStart.bind(swiper),\n        onDragMove: Scrollbar.onDragMove.bind(swiper),\n        onDragEnd: Scrollbar.onDragEnd.bind(swiper),\n        isTouched: false,\n        timeout: null,\n        dragTimeout: null,\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      swiper.scrollbar.init();\n      swiper.scrollbar.updateSize();\n      swiper.scrollbar.setTranslate();\n    },\n    update() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    resize() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    observerUpdate() {\n      const swiper = this;\n      swiper.scrollbar.updateSize();\n    },\n    setTranslate() {\n      const swiper = this;\n      swiper.scrollbar.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      swiper.scrollbar.setTransition(duration);\n    },\n    destroy() {\n      const swiper = this;\n      swiper.scrollbar.destroy();\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Parallax = {\n  setTransform(el, progress) {\n    const swiper = this;\n    const { rtl } = swiper;\n\n    const $el = $(el);\n    const rtlFactor = rtl ? -1 : 1;\n\n    const p = $el.attr('data-swiper-parallax') || '0';\n    let x = $el.attr('data-swiper-parallax-x');\n    let y = $el.attr('data-swiper-parallax-y');\n    const scale = $el.attr('data-swiper-parallax-scale');\n    const opacity = $el.attr('data-swiper-parallax-opacity');\n\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n\n    if ((x).indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if ((y).indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));\n      $el[0].style.opacity = currentOpacity;\n    }\n    if (typeof scale === 'undefined' || scale === null) {\n      $el.transform(`translate3d(${x}, ${y}, 0px)`);\n    } else {\n      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));\n      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n    }\n  },\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, slides, progress, snapGrid,\n    } = swiper;\n    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, el) => {\n        swiper.parallax.setTransform(el, progress);\n      });\n    slides.each((slideIndex, slideEl) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n        .each((index, el) => {\n          swiper.parallax.setTransform(el, slideProgress);\n        });\n    });\n  },\n  setTransition(duration = this.params.speed) {\n    const swiper = this;\n    const { $el } = swiper;\n    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')\n      .each((index, parallaxEl) => {\n        const $parallaxEl = $(parallaxEl);\n        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n        if (duration === 0) parallaxDuration = 0;\n        $parallaxEl.transition(parallaxDuration);\n      });\n  },\n};\n\nexport default {\n  name: 'parallax',\n  params: {\n    parallax: {\n      enabled: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      parallax: {\n        setTransform: Parallax.setTransform.bind(swiper),\n        setTranslate: Parallax.setTranslate.bind(swiper),\n        setTransition: Parallax.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    init() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTranslate() {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (!swiper.params.parallax.enabled) return;\n      swiper.parallax.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Device from '../../utils/device';\nimport Support from '../../utils/support';\n\nconst Zoom = {\n  // Calc Scale From Multi-touches\n  getDistanceBetweenTouches(e) {\n    if (e.targetTouches.length < 2) return 1;\n    const x1 = e.targetTouches[0].pageX;\n    const y1 = e.targetTouches[0].pageY;\n    const x2 = e.targetTouches[1].pageX;\n    const y2 = e.targetTouches[1].pageY;\n    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));\n    return distance;\n  },\n  // Events\n  onGestureStart(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    zoom.fakeGestureTouched = false;\n    zoom.fakeGestureMoved = false;\n    if (!Support.gestures) {\n      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureTouched = true;\n      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$slideEl || !gesture.$slideEl.length) {\n      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n      if (gesture.$imageWrapEl.length === 0) {\n        gesture.$imageEl = undefined;\n        return;\n      }\n    }\n    if (gesture.$imageEl) {\n      gesture.$imageEl.transition(0);\n    }\n    swiper.zoom.isScaling = true;\n  },\n  onGestureChange(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n        return;\n      }\n      zoom.fakeGestureMoved = true;\n      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (Support.gestures) {\n      zoom.scale = e.scale * zoom.currentScale;\n    } else {\n      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;\n    }\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);\n    }\n    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  onGestureEnd(e) {\n    const swiper = this;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (!Support.gestures) {\n      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {\n        return;\n      }\n      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {\n        return;\n      }\n      zoom.fakeGestureTouched = false;\n      zoom.fakeGestureMoved = false;\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n    zoom.currentScale = zoom.scale;\n    zoom.isScaling = false;\n    if (zoom.scale === 1) gesture.$slideEl = undefined;\n  },\n  onTouchStart(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (image.isTouched) return;\n    if (Device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n  },\n  onTouchMove(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    swiper.allowClick = false;\n    if (!image.isTouched || !gesture.$slideEl) return;\n\n    if (!image.isMoved) {\n      image.width = gesture.$imageEl[0].offsetWidth;\n      image.height = gesture.$imageEl[0].offsetHeight;\n      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n      gesture.$imageWrapEl.transition(0);\n      if (swiper.rtl) {\n        image.startX = -image.startX;\n        image.startY = -image.startY;\n      }\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n\n    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n    if (!image.isMoved && !zoom.isScaling) {\n      if (\n        swiper.isHorizontal()\n        && (\n          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)\n          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      } if (\n        !swiper.isHorizontal()\n        && (\n          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)\n          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)\n        )\n      ) {\n        image.isTouched = false;\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n\n    image.isMoved = true;\n    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;\n    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;\n\n    if (image.currentX < image.minX) {\n      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);\n    }\n\n    if (image.currentY < image.minY) {\n      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n\n    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTouchEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture, image, velocity } = zoom;\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n  },\n  onTransitionEnd() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    const { gesture } = zoom;\n    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n      if (gesture.$imageEl) {\n        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n      }\n      if (gesture.$imageWrapEl) {\n        gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n      }\n\n      zoom.scale = 1;\n      zoom.currentScale = 1;\n\n      gesture.$slideEl = undefined;\n      gesture.$imageEl = undefined;\n      gesture.$imageWrapEl = undefined;\n    }\n  },\n  // Toggle Zoom\n  toggle(e) {\n    const swiper = this;\n    const zoom = swiper.zoom;\n\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoom.out();\n    } else {\n      // Zoom In\n      zoom.in(e);\n    }\n  },\n  in(e) {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture, image } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n\n    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n    if (e) {\n      slideWidth = gesture.$slideEl[0].offsetWidth;\n      slideHeight = gesture.$slideEl[0].offsetHeight;\n      offsetX = gesture.$slideEl.offset().left;\n      offsetY = gesture.$slideEl.offset().top;\n      diffX = (offsetX + (slideWidth / 2)) - touchX;\n      diffY = (offsetY + (slideHeight / 2)) - touchY;\n\n      imageWidth = gesture.$imageEl[0].offsetWidth;\n      imageHeight = gesture.$imageEl[0].offsetHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n\n      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);\n      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n  },\n  out() {\n    const swiper = this;\n\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    const { gesture } = zoom;\n\n    if (!gesture.$slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n      } else {\n        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n      }\n      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');\n      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n    }\n    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n    zoom.scale = 1;\n    zoom.currentScale = 1;\n    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n    gesture.$slideEl = undefined;\n  },\n  // Attach/Detach Events\n  enable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n  disable() {\n    const swiper = this;\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n\n    swiper.zoom.enabled = false;\n\n    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;\n    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;\n\n    const slideSelector = `.${swiper.params.slideClass}`;\n\n    // Scale image\n    if (Support.gestures) {\n      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);\n      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);\n    } else if (swiper.touchEvents.start === 'touchstart') {\n      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);\n      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);\n      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);\n      if (swiper.touchEvents.cancel) {\n        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);\n      }\n    }\n\n    // Move image\n    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);\n  },\n};\n\nexport default {\n  name: 'zoom',\n  params: {\n    zoom: {\n      enabled: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed',\n    },\n  },\n  create() {\n    const swiper = this;\n    const zoom = {\n      enabled: false,\n      scale: 1,\n      currentScale: 1,\n      isScaling: false,\n      gesture: {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3,\n      },\n      image: {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {},\n      },\n      velocity: {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined,\n      },\n    };\n\n    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {\n      zoom[methodName] = Zoom[methodName].bind(swiper);\n    });\n    Utils.extend(swiper, {\n      zoom,\n    });\n\n    let scale = 1;\n    Object.defineProperty(swiper.zoom, 'scale', {\n      get() {\n        return scale;\n      },\n      set(value) {\n        if (scale !== value) {\n          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;\n          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;\n          swiper.emit('zoomChange', value, imageEl, slideEl);\n        }\n        scale = value;\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.zoom.enabled) {\n        swiper.zoom.enable();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      swiper.zoom.disable();\n    },\n    touchStart(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchStart(e);\n    },\n    touchEnd(e) {\n      const swiper = this;\n      if (!swiper.zoom.enabled) return;\n      swiper.zoom.onTouchEnd(e);\n    },\n    doubleTap(e) {\n      const swiper = this;\n      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n        swiper.zoom.toggle(e);\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n        swiper.zoom.onTransitionEnd();\n      }\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Lazy = {\n  loadInSlide(index, loadInDuplicate = true) {\n    const swiper = this;\n    const params = swiper.params.lazy;\n    if (typeof index === 'undefined') return;\n    if (swiper.slides.length === 0) return;\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n    const $slideEl = isVirtual\n      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n      : swiper.slides.eq(index);\n\n    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n      $images = $images.add($slideEl[0]);\n    }\n    if ($images.length === 0) return;\n\n    $images.each((imageIndex, imageEl) => {\n      const $imageEl = $(imageEl);\n      $imageEl.addClass(params.loadingClass);\n\n      const background = $imageEl.attr('data-background');\n      const src = $imageEl.attr('data-src');\n      const srcset = $imageEl.attr('data-srcset');\n      const sizes = $imageEl.attr('data-sizes');\n      const $pictureEl = $imageEl.parent('picture');\n\n      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;\n        if (background) {\n          $imageEl.css('background-image', `url(\"${background}\")`);\n          $imageEl.removeAttr('data-background');\n        } else {\n          if (srcset) {\n            $imageEl.attr('srcset', srcset);\n            $imageEl.removeAttr('data-srcset');\n          }\n          if (sizes) {\n            $imageEl.attr('sizes', sizes);\n            $imageEl.removeAttr('data-sizes');\n          }\n          if ($pictureEl.length) {\n            $pictureEl.children('source').each((sourceIndex, sourceEl) => {\n              const $source = $(sourceEl);\n\n              if ($source.attr('data-srcset')) {\n                $source.attr('srcset', $source.attr('data-srcset'));\n                $source.removeAttr('data-srcset');\n              }\n            });\n          }\n          if (src) {\n            $imageEl.attr('src', src);\n            $imageEl.removeAttr('data-src');\n          }\n        }\n\n        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n        $slideEl.find(`.${params.preloaderClass}`).remove();\n        if (swiper.params.loop && loadInDuplicate) {\n          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n            swiper.lazy.loadInSlide(originalSlide.index(), false);\n          } else {\n            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);\n          }\n        }\n        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n        if (swiper.params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n      });\n\n      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n    });\n  },\n  load() {\n    const swiper = this;\n    const {\n      $wrapperEl, params: swiperParams, slides, activeIndex,\n    } = swiper;\n    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n    const params = swiperParams.lazy;\n\n    let slidesPerView = swiperParams.slidesPerView;\n    if (slidesPerView === 'auto') {\n      slidesPerView = 0;\n    }\n\n    function slideExist(index) {\n      if (isVirtual) {\n        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n          return true;\n        }\n      } else if (slides[index]) return true;\n      return false;\n    }\n\n    function slideIndex(slideEl) {\n      if (isVirtual) {\n        return $(slideEl).attr('data-swiper-slide-index');\n      }\n      return $(slideEl).index();\n    }\n\n    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;\n    if (swiper.params.watchSlidesVisibility) {\n      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {\n        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n        swiper.lazy.loadInSlide(index);\n      });\n    } else if (slidesPerView > 1) {\n      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n        if (slideExist(i)) swiper.lazy.loadInSlide(i);\n      }\n    } else {\n      swiper.lazy.loadInSlide(activeIndex);\n    }\n    if (params.loadPrevNext) {\n      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n        const amount = params.loadPrevNextAmount;\n        const spv = slidesPerView;\n        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n        // Next Slides\n        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n        // Prev Slides\n        for (let i = minIndex; i < activeIndex; i += 1) {\n          if (slideExist(i)) swiper.lazy.loadInSlide(i);\n        }\n      } else {\n        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));\n\n        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));\n      }\n    }\n  },\n};\n\nexport default {\n  name: 'lazy',\n  params: {\n    lazy: {\n      enabled: false,\n      loadPrevNext: false,\n      loadPrevNextAmount: 1,\n      loadOnTransitionStart: false,\n\n      elementClass: 'swiper-lazy',\n      loadingClass: 'swiper-lazy-loading',\n      loadedClass: 'swiper-lazy-loaded',\n      preloaderClass: 'swiper-lazy-preloader',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      lazy: {\n        initialImageLoaded: false,\n        load: Lazy.load.bind(swiper),\n        loadInSlide: Lazy.loadInSlide.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n        swiper.params.preloadImages = false;\n      }\n    },\n    init() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {\n        swiper.lazy.load();\n      }\n    },\n    scroll() {\n      const swiper = this;\n      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {\n        swiper.lazy.load();\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    scrollbarDragMove() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        swiper.lazy.load();\n      }\n    },\n    transitionStart() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled) {\n        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {\n          swiper.lazy.load();\n        }\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n        swiper.lazy.load();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.params.lazy.enabled && swiper.params.cssMode) {\n        swiper.lazy.load();\n      }\n    },\n  },\n};\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport Swiper from '../core/core-class';\nimport Utils from '../../utils/utils';\n\nconst Controller = {\n  LinearSpline: function LinearSpline(x, y) {\n    const binarySearch = (function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }());\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n    };\n    return this;\n  },\n  // xxx: for now i will just save one spline function to to\n  getInterpolateFunction(c) {\n    const swiper = this;\n    if (!swiper.controller.spline) {\n      swiper.controller.spline = swiper.params.loop\n        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n    }\n  },\n  setTranslate(setTranslate, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    function setControlledTranslate(c) {\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        swiper.controller.getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n      }\n\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  },\n  setTransition(duration, byController) {\n    const swiper = this;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          Utils.nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        c.$wrapperEl.transitionEnd(() => {\n          if (!controlled) return;\n          if (c.params.loop && swiper.params.controller.by === 'slide') {\n            c.loopFix();\n          }\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  },\n};\nexport default {\n  name: 'controller',\n  params: {\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide', // or 'container'\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      controller: {\n        control: swiper.params.controller.control,\n        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n        setTranslate: Controller.setTranslate.bind(swiper),\n        setTransition: Controller.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    update() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      if (swiper.controller.spline) {\n        swiper.controller.spline = undefined;\n        delete swiper.controller.spline;\n      }\n    },\n    setTranslate(translate, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTranslate(translate, byController);\n    },\n    setTransition(duration, byController) {\n      const swiper = this;\n      if (!swiper.controller.control) return;\n      swiper.controller.setTransition(duration, byController);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst a11y = {\n  makeElFocusable($el) {\n    $el.attr('tabIndex', '0');\n    return $el;\n  },\n  makeElNotFocusable($el) {\n    $el.attr('tabIndex', '-1');\n    return $el;\n  },\n  addElRole($el, role) {\n    $el.attr('role', role);\n    return $el;\n  },\n  addElLabel($el, label) {\n    $el.attr('aria-label', label);\n    return $el;\n  },\n  disableEl($el) {\n    $el.attr('aria-disabled', true);\n    return $el;\n  },\n  enableEl($el) {\n    $el.attr('aria-disabled', false);\n    return $el;\n  },\n  onEnterKey(e) {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (e.keyCode !== 13) return;\n    const $targetEl = $(e.target);\n    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n      if (!(swiper.isEnd && !swiper.params.loop)) {\n        swiper.slideNext();\n      }\n      if (swiper.isEnd) {\n        swiper.a11y.notify(params.lastSlideMessage);\n      } else {\n        swiper.a11y.notify(params.nextSlideMessage);\n      }\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\n        swiper.slidePrev();\n      }\n      if (swiper.isBeginning) {\n        swiper.a11y.notify(params.firstSlideMessage);\n      } else {\n        swiper.a11y.notify(params.prevSlideMessage);\n      }\n    }\n    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {\n      $targetEl[0].click();\n    }\n  },\n  notify(message) {\n    const swiper = this;\n    const notification = swiper.a11y.liveRegion;\n    if (notification.length === 0) return;\n    notification.html('');\n    notification.html(message);\n  },\n  updateNavigation() {\n    const swiper = this;\n\n    if (swiper.params.loop || !swiper.navigation) return;\n    const { $nextEl, $prevEl } = swiper.navigation;\n\n    if ($prevEl && $prevEl.length > 0) {\n      if (swiper.isBeginning) {\n        swiper.a11y.disableEl($prevEl);\n        swiper.a11y.makeElNotFocusable($prevEl);\n      } else {\n        swiper.a11y.enableEl($prevEl);\n        swiper.a11y.makeElFocusable($prevEl);\n      }\n    }\n    if ($nextEl && $nextEl.length > 0) {\n      if (swiper.isEnd) {\n        swiper.a11y.disableEl($nextEl);\n        swiper.a11y.makeElNotFocusable($nextEl);\n      } else {\n        swiper.a11y.enableEl($nextEl);\n        swiper.a11y.makeElFocusable($nextEl);\n      }\n    }\n  },\n  updatePagination() {\n    const swiper = this;\n    const params = swiper.params.a11y;\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {\n        const $bulletEl = $(bulletEl);\n        swiper.a11y.makeElFocusable($bulletEl);\n        swiper.a11y.addElRole($bulletEl, 'button');\n        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n      });\n    }\n  },\n  init() {\n    const swiper = this;\n\n    swiper.$el.append(swiper.a11y.liveRegion);\n\n    // Navigation\n    const params = swiper.params.a11y;\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      swiper.a11y.makeElFocusable($nextEl);\n      swiper.a11y.addElRole($nextEl, 'button');\n      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n      $nextEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      swiper.a11y.makeElFocusable($prevEl);\n      swiper.a11y.addElRole($prevEl, 'button');\n      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n      $prevEl.on('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();\n\n    let $nextEl;\n    let $prevEl;\n    if (swiper.navigation && swiper.navigation.$nextEl) {\n      $nextEl = swiper.navigation.$nextEl;\n    }\n    if (swiper.navigation && swiper.navigation.$prevEl) {\n      $prevEl = swiper.navigation.$prevEl;\n    }\n    if ($nextEl) {\n      $nextEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n    if ($prevEl) {\n      $prevEl.off('keydown', swiper.a11y.onEnterKey);\n    }\n\n    // Pagination\n    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);\n    }\n  },\n};\nexport default {\n  name: 'a11y',\n  params: {\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      a11y: {\n        liveRegion: $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`),\n      },\n    });\n    Object.keys(a11y).forEach((methodName) => {\n      swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.init();\n      swiper.a11y.updateNavigation();\n    },\n    toEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    fromEdge() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updateNavigation();\n    },\n    paginationUpdate() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.updatePagination();\n    },\n    destroy() {\n      const swiper = this;\n      if (!swiper.params.a11y.enabled) return;\n      swiper.a11y.destroy();\n    },\n  },\n};\n","import { window } from 'ssr-window';\nimport Utils from '../../utils/utils';\n\nconst History = {\n  init() {\n    const swiper = this;\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    const history = swiper.history;\n    history.initialized = true;\n    history.paths = History.getPathValues();\n    if (!history.paths.key && !history.paths.value) return;\n    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', swiper.history.setHistoryPopState);\n    }\n  },\n  setHistoryPopState() {\n    const swiper = this;\n    swiper.history.paths = History.getPathValues();\n    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);\n  },\n  getPathValues() {\n    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');\n    const total = pathArray.length;\n    const key = pathArray[total - 2];\n    const value = pathArray[total - 1];\n    return { key, value };\n  },\n  setHistory(key, index) {\n    const swiper = this;\n    if (!swiper.history.initialized || !swiper.params.history.enabled) return;\n    const slide = swiper.slides.eq(index);\n    let value = History.slugify(slide.attr('data-history'));\n    if (!window.location.pathname.includes(key)) {\n      value = `${key}/${value}`;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({ value }, null, value);\n    } else {\n      window.history.pushState({ value }, null, value);\n    }\n  },\n  slugify(text) {\n    return text.toString()\n      .replace(/\\s+/g, '-')\n      .replace(/[^\\w-]+/g, '')\n      .replace(/--+/g, '-')\n      .replace(/^-+/, '')\n      .replace(/-+$/, '');\n  },\n  scrollToSlide(speed, value, runCallbacks) {\n    const swiper = this;\n    if (value) {\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHistory = History.slugify(slide.attr('data-history'));\n        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  },\n};\n\nexport default {\n  name: 'history',\n  params: {\n    history: {\n      enabled: false,\n      replaceState: false,\n      key: 'slides',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      history: {\n        init: History.init.bind(swiper),\n        setHistory: History.setHistory.bind(swiper),\n        setHistoryPopState: History.setHistoryPopState.bind(swiper),\n        scrollToSlide: History.scrollToSlide.bind(swiper),\n        destroy: History.destroy.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.history.enabled) {\n        swiper.history.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.history.initialized) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.history.initialized && swiper.params.cssMode) {\n        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);\n      }\n    },\n  },\n};\n","import { window, document } from 'ssr-window';\nimport $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst HashNavigation = {\n  onHashCange() {\n    const swiper = this;\n    swiper.emit('hashChange');\n    const newHash = document.location.hash.replace('#', '');\n    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n    if (newHash !== activeSlideHash) {\n      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n      if (typeof newIndex === 'undefined') return;\n      swiper.slideTo(newIndex);\n    }\n  },\n  setHash() {\n    const swiper = this;\n    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));\n      swiper.emit('hashSet');\n    } else {\n      const slide = swiper.slides.eq(swiper.activeIndex);\n      const hash = slide.attr('data-hash') || slide.attr('data-history');\n      document.location.hash = hash || '';\n      swiper.emit('hashSet');\n    }\n  },\n  init() {\n    const swiper = this;\n    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;\n    swiper.hashNavigation.initialized = true;\n    const hash = document.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides.eq(i);\n        const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n          const index = slide.index();\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n        }\n      }\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).on('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n  destroy() {\n    const swiper = this;\n    if (swiper.params.hashNavigation.watchState) {\n      $(window).off('hashchange', swiper.hashNavigation.onHashCange);\n    }\n  },\n};\nexport default {\n  name: 'hash-navigation',\n  params: {\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      hashNavigation: {\n        initialized: false,\n        init: HashNavigation.init.bind(swiper),\n        destroy: HashNavigation.destroy.bind(swiper),\n        setHash: HashNavigation.setHash.bind(swiper),\n        onHashCange: HashNavigation.onHashCange.bind(swiper),\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.init();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.params.hashNavigation.enabled) {\n        swiper.hashNavigation.destroy();\n      }\n    },\n    transitionEnd() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n    slideChange() {\n      const swiper = this;\n      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {\n        swiper.hashNavigation.setHash();\n      }\n    },\n  },\n};\n","/* eslint no-underscore-dangle: \"off\" */\nimport Utils from '../../utils/utils';\n\nconst Autoplay = {\n  run() {\n    const swiper = this;\n    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n    let delay = swiper.params.autoplay.delay;\n    if ($activeSlideEl.attr('data-swiper-autoplay')) {\n      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n    }\n    clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.timeout = Utils.nextTick(() => {\n      if (swiper.params.autoplay.reverseDirection) {\n        if (swiper.params.loop) {\n          swiper.loopFix();\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.isBeginning) {\n          swiper.slidePrev(swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n          swiper.emit('autoplay');\n        } else {\n          swiper.autoplay.stop();\n        }\n      } else if (swiper.params.loop) {\n        swiper.loopFix();\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.isEnd) {\n        swiper.slideNext(swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else if (!swiper.params.autoplay.stopOnLastSlide) {\n        swiper.slideTo(0, swiper.params.speed, true, true);\n        swiper.emit('autoplay');\n      } else {\n        swiper.autoplay.stop();\n      }\n      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();\n    }, delay);\n  },\n  start() {\n    const swiper = this;\n    if (typeof swiper.autoplay.timeout !== 'undefined') return false;\n    if (swiper.autoplay.running) return false;\n    swiper.autoplay.running = true;\n    swiper.emit('autoplayStart');\n    swiper.autoplay.run();\n    return true;\n  },\n  stop() {\n    const swiper = this;\n    if (!swiper.autoplay.running) return false;\n    if (typeof swiper.autoplay.timeout === 'undefined') return false;\n\n    if (swiper.autoplay.timeout) {\n      clearTimeout(swiper.autoplay.timeout);\n      swiper.autoplay.timeout = undefined;\n    }\n    swiper.autoplay.running = false;\n    swiper.emit('autoplayStop');\n    return true;\n  },\n  pause(speed) {\n    const swiper = this;\n    if (!swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) return;\n    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);\n    swiper.autoplay.paused = true;\n    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n      swiper.autoplay.paused = false;\n      swiper.autoplay.run();\n    } else {\n      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n    }\n  },\n};\n\nexport default {\n  name: 'autoplay',\n  params: {\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: true,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      autoplay: {\n        running: false,\n        paused: false,\n        run: Autoplay.run.bind(swiper),\n        start: Autoplay.start.bind(swiper),\n        stop: Autoplay.stop.bind(swiper),\n        pause: Autoplay.pause.bind(swiper),\n        onVisibilityChange() {\n          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n            swiper.autoplay.pause();\n          }\n          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n            swiper.autoplay.run();\n            swiper.autoplay.paused = false;\n          }\n        },\n        onTransitionEnd(e) {\n          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n          if (e.target !== this) return;\n          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n          swiper.autoplay.paused = false;\n          if (!swiper.autoplay.running) {\n            swiper.autoplay.stop();\n          } else {\n            swiper.autoplay.run();\n          }\n        },\n      },\n    });\n  },\n  on: {\n    init() {\n      const swiper = this;\n      if (swiper.params.autoplay.enabled) {\n        swiper.autoplay.start();\n        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n      }\n    },\n    beforeTransitionStart(speed, internal) {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (internal || !swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.pause(speed);\n        } else {\n          swiper.autoplay.stop();\n        }\n      }\n    },\n    sliderFirstMove() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          swiper.autoplay.stop();\n        } else {\n          swiper.autoplay.pause();\n        }\n      }\n    },\n    touchEnd() {\n      const swiper = this;\n      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n        swiper.autoplay.run();\n      }\n    },\n    destroy() {\n      const swiper = this;\n      if (swiper.autoplay.running) {\n        swiper.autoplay.stop();\n      }\n      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\n\nconst Fade = {\n  setTranslate() {\n    const swiper = this;\n    const { slides } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = swiper.slides.eq(i);\n      const offset = $slideEl[0].swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade\n        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n      $slideEl\n        .css({\n          opacity: slideOpacity,\n        })\n        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, $wrapperEl } = swiper;\n    slides.transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      slides.transitionEnd(() => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-fade',\n  params: {\n    fadeEffect: {\n      crossFade: false,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      fadeEffect: {\n        setTranslate: Fade.setTranslate.bind(swiper),\n        setTransition: Fade.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'fade') return;\n      swiper.fadeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\nimport Browser from '../../utils/browser';\n\nconst Cube = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,\n    } = swiper;\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let $cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $wrapperEl.append($cubeShadowEl);\n        }\n        $cubeShadowEl.css({ height: `${swiperWidth}px` });\n      } else {\n        $cubeShadowEl = $el.find('.swiper-cube-shadow');\n        if ($cubeShadowEl.length === 0) {\n          $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n          $el.append($cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + (round * 4 * swiperSize);\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = (3 * swiperSize) + (swiperSize * 4 * round);\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = (slideIndex * 90) + (progress * 90);\n        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);\n      }\n      $slideEl.transform(transform);\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n    }\n    $wrapperEl.css({\n      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,\n      'transform-origin': `50% 50% -${swiperSize / 2}px`,\n    });\n\n    if (params.shadow) {\n      if (isHorizontal) {\n        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n      } else {\n        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);\n        const multiplier = 1.5 - (\n          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)\n          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)\n        );\n        const scale1 = params.shadowScale;\n        const scale2 = params.shadowScale / multiplier;\n        const offset = params.shadowOffset;\n        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n      }\n    }\n    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;\n    $wrapperEl\n      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { $el, slides } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      $el.find('.swiper-cube-shadow').transition(duration);\n    }\n  },\n};\n\nexport default {\n  name: 'effect-cube',\n  params: {\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      cubeEffect: {\n        setTranslate: Cube.setTranslate.bind(swiper),\n        setTransition: Cube.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        resistanceRatio: 0,\n        spaceBetween: 0,\n        centeredSlides: false,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'cube') return;\n      swiper.cubeEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Utils from '../../utils/utils';\n\nconst Flip = {\n  setTranslate() {\n    const swiper = this;\n    const { slides, rtlTranslate: rtl } = swiper;\n    for (let i = 0; i < slides.length; i += 1) {\n      const $slideEl = slides.eq(i);\n      let progress = $slideEl[0].progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n      }\n      const offset = $slideEl[0].swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n      if (swiper.params.flipEffect.slideShadows) {\n        // Set shadows\n        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if (shadowBefore.length === 0) {\n          shadowBefore = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}\"></div>`);\n          $slideEl.append(shadowBefore);\n        }\n        if (shadowAfter.length === 0) {\n          shadowAfter = $(`<div class=\"swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append(shadowAfter);\n        }\n        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n      }\n      $slideEl\n        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    const { slides, activeIndex, $wrapperEl } = swiper;\n    slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n    if (swiper.params.virtualTranslate && duration !== 0) {\n      let eventTriggered = false;\n      // eslint-disable-next-line\n      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n        for (let i = 0; i < triggerEvents.length; i += 1) {\n          $wrapperEl.trigger(triggerEvents[i]);\n        }\n      });\n    }\n  },\n};\n\nexport default {\n  name: 'effect-flip',\n  params: {\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      flipEffect: {\n        setTranslate: Flip.setTranslate.bind(swiper),\n        setTransition: Flip.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n      const overwriteParams = {\n        slidesPerView: 1,\n        slidesPerColumn: 1,\n        slidesPerGroup: 1,\n        watchSlidesProgress: true,\n        spaceBetween: 0,\n        virtualTranslate: true,\n      };\n      Utils.extend(swiper.params, overwriteParams);\n      Utils.extend(swiper.originalParams, overwriteParams);\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'flip') return;\n      swiper.flipEffect.setTransition(duration);\n    },\n  },\n};\n","import $ from '../../utils/dom';\nimport Support from '../../utils/support';\nimport Utils from '../../utils/utils';\n\nconst Coverflow = {\n  setTranslate() {\n    const swiper = this;\n    const {\n      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,\n    } = swiper;\n    const params = swiper.params.coverflowEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const transform = swiper.translate;\n    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\n    const translate = params.depth;\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const $slideEl = slides.eq(i);\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = $slideEl[0].swiperSlideOffset;\n      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;\n\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = ((parseFloat(params.stretch) / 100) * slideSize);\n      }\n      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);\n      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n\n      $slideEl.transform(slideTransform);\n      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n      if (params.slideShadows) {\n        // Set shadows\n        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n        if ($shadowBeforeEl.length === 0) {\n          $shadowBeforeEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n          $slideEl.append($shadowBeforeEl);\n        }\n        if ($shadowAfterEl.length === 0) {\n          $shadowAfterEl = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n          $slideEl.append($shadowAfterEl);\n        }\n        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;\n      }\n    }\n\n    // Set correct perspective for IE10\n    if (Support.pointerEvents || Support.prefixedPointerEvents) {\n      const ws = $wrapperEl[0].style;\n      ws.perspectiveOrigin = `${center}px 50%`;\n    }\n  },\n  setTransition(duration) {\n    const swiper = this;\n    swiper.slides\n      .transition(duration)\n      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')\n      .transition(duration);\n  },\n};\n\nexport default {\n  name: 'effect-coverflow',\n  params: {\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      modifier: 1,\n      slideShadows: true,\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      coverflowEffect: {\n        setTranslate: Coverflow.setTranslate.bind(swiper),\n        setTransition: Coverflow.setTransition.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n\n      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n\n      swiper.params.watchSlidesProgress = true;\n      swiper.originalParams.watchSlidesProgress = true;\n    },\n    setTranslate() {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTranslate();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      if (swiper.params.effect !== 'coverflow') return;\n      swiper.coverflowEffect.setTransition(duration);\n    },\n  },\n};\n","import Utils from '../../utils/utils';\nimport $ from '../../utils/dom';\n\nconst Thumbs = {\n  init() {\n    const swiper = this;\n    const { thumbs: thumbsParams } = swiper.params;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Utils.extend(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n      Utils.extend(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      });\n    } else if (Utils.isObject(thumbsParams.swiper)) {\n      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {\n        watchSlidesVisibility: true,\n        watchSlidesProgress: true,\n        slideToClickedSlide: false,\n      }));\n      swiper.thumbs.swiperCreated = true;\n    }\n    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);\n  },\n  onThumbClick() {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      let currentIndex = swiper.activeIndex;\n      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n        swiper.loopFix();\n        // eslint-disable-next-line\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n        currentIndex = swiper.activeIndex;\n      }\n      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n      else slideToIndex = prevIndex;\n    }\n    swiper.slideTo(slideToIndex);\n  },\n  update(initial) {\n    const swiper = this;\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper) return;\n\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'\n      ? thumbsSwiper.slidesPerViewDynamic()\n      : thumbsSwiper.params.slidesPerView;\n\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      let currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n          thumbsSwiper.loopFix();\n          // eslint-disable-next-line\n          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n          currentThumbsIndex = thumbsSwiper.activeIndex;\n        }\n        // Find actual thumbs index to slide to\n        const prevThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        const nextThumbsIndex = thumbsSwiper.slides\n          .eq(currentThumbsIndex)\n          .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0)\n          .index();\n        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;\n        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;\n        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;\n        else newThumbsIndex = prevThumbsIndex;\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex) {\n          newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n        }\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n\n    thumbsToActivate = Math.floor(thumbsToActivate);\n\n    thumbsSwiper.slides.removeClass(thumbActiveClass);\n    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n      }\n    }\n  },\n};\nexport default {\n  name: 'thumbs',\n  params: {\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-container-thumbs',\n    },\n  },\n  create() {\n    const swiper = this;\n    Utils.extend(swiper, {\n      thumbs: {\n        swiper: null,\n        init: Thumbs.init.bind(swiper),\n        update: Thumbs.update.bind(swiper),\n        onThumbClick: Thumbs.onThumbClick.bind(swiper),\n      },\n    });\n  },\n  on: {\n    beforeInit() {\n      const swiper = this;\n      const { thumbs } = swiper.params;\n      if (!thumbs || !thumbs.swiper) return;\n      swiper.thumbs.init();\n      swiper.thumbs.update(true);\n    },\n    slideChange() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    update() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    resize() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    observerUpdate() {\n      const swiper = this;\n      if (!swiper.thumbs.swiper) return;\n      swiper.thumbs.update();\n    },\n    setTransition(duration) {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      thumbsSwiper.setTransition(duration);\n    },\n    beforeDestroy() {\n      const swiper = this;\n      const thumbsSwiper = swiper.thumbs.swiper;\n      if (!thumbsSwiper) return;\n      if (swiper.thumbs.swiperCreated && thumbsSwiper) {\n        thumbsSwiper.destroy();\n      }\n    },\n  },\n};\n","// Swiper Class\nimport Swiper from './components/core/core-class';\n\n// Core Modules\nimport Device from './modules/device/device';\nimport Support from './modules/support/support';\nimport Browser from './modules/browser/browser';\nimport Resize from './modules/resize/resize';\nimport Observer from './modules/observer/observer';\n\n//IMPORT_COMPONENTS\n\nconst components = [\n  Device,\n  Support,\n  Browser,\n  Resize,\n  Observer,\n  //INSTALL_COMPONENTS\n];\n\nif (typeof Swiper.use === 'undefined') {\n  Swiper.use = Swiper.Class.use;\n  Swiper.installModule = Swiper.Class.installModule;\n}\n\nSwiper.use(components);\n\n//EXPORT\n"],"names":["const","let","document","window","arguments","event","boxSizing","i","slidesGridItem","allSlidesSize","transitionEnd","currentSnap","slideChanged","increment","transition","checkOverflow","super","newEvent","recentWheelEvents","prevEvent","setTranslate","Device","Support","Browser","Observer","Virtual"],"mappings":"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"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,14 @@
1
+/**
2
+ * Swiper 5.4.0
3
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
4
+ * http://swiperjs.com
5
+ *
6
+ * Copyright 2014-2020 Vladimir Kharlampidi
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: May 15, 2020
11
+ */
12
+
13
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(i,s){void 0===i&&(i={}),void 0===s&&(s={}),Object.keys(s).forEach((function(a){void 0===i[a]?i[a]=s[a]:e(s[a])&&e(i[a])&&Object.keys(s[a]).length>0&&t(i[a],s[a])}))}var i="undefined"!=typeof document?document:{},s={body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},createElementNS:function(){return{}},importNode:function(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};t(i,s);var a="undefined"!=typeof window?window:{};t(a,{document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState:function(){},pushState:function(){},go:function(){},back:function(){}},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){},matchMedia:function(){return{}}});var r=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function n(e,t){var s=[],n=0;if(e&&!t&&e instanceof r)return e;if(e)if("string"==typeof e){var o,l,d=e.trim();if(d.indexOf("<")>=0&&d.indexOf(">")>=0){var h="div";for(0===d.indexOf("<li")&&(h="ul"),0===d.indexOf("<tr")&&(h="tbody"),0!==d.indexOf("<td")&&0!==d.indexOf("<th")||(h="tr"),0===d.indexOf("<tbody")&&(h="table"),0===d.indexOf("<option")&&(h="select"),(l=i.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)s.push(l.childNodes[n])}else for(o=t||"#"!==e[0]||e.match(/[ .<>:~]/)?(t||i).querySelectorAll(e.trim()):[i.getElementById(e.trim().split("#")[1])],n=0;n<o.length;n+=1)o[n]&&s.push(o[n])}else if(e.nodeType||e===a||e===i)s.push(e);else if(e.length>0&&e[0].nodeType)for(n=0;n<e.length;n+=1)s.push(e[n]);return new r(s)}function o(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}n.fn=r.prototype,n.Class=r,n.Dom7=r;var l={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var s=t[0],a=t[1],r=t[2],o=t[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.indexOf(e)<0&&i.unshift(e),n(t).is(a))r.apply(t,i);else for(var s=n(t).parents(),o=0;o<s.length;o+=1)n(s[o]).is(a)&&r.apply(s[o],i)}}function d(e){var t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),r.apply(this,t)}"function"==typeof t[1]&&(s=(e=t)[0],r=e[1],o=e[2],a=void 0),o||(o=!1);for(var h,p=s.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(a)for(h=0;h<p.length;h+=1){var v=p[h];u.dom7LiveListeners||(u.dom7LiveListeners={}),u.dom7LiveListeners[v]||(u.dom7LiveListeners[v]=[]),u.dom7LiveListeners[v].push({listener:r,proxyListener:l}),u.addEventListener(v,l,o)}else for(h=0;h<p.length;h+=1){var f=p[h];u.dom7Listeners||(u.dom7Listeners={}),u.dom7Listeners[f]||(u.dom7Listeners[f]=[]),u.dom7Listeners[f].push({listener:r,proxyListener:d}),u.addEventListener(f,d,o)}}return this},off:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var s=t[0],a=t[1],r=t[2],n=t[3];"function"==typeof t[1]&&(s=(e=t)[0],r=e[1],n=e[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=o[l],h=0;h<this.length;h+=1){var p=this[h],c=void 0;if(!a&&p.dom7Listeners?c=p.dom7Listeners[d]:a&&p.dom7LiveListeners&&(c=p.dom7LiveListeners[d]),c&&c.length)for(var u=c.length-1;u>=0;u-=1){var v=c[u];r&&v.listener===r||r&&v.listener&&v.listener.dom7proxy&&v.listener.dom7proxy===r?(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1)):r||(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1))}}return this},trigger:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var s=e[0].split(" "),r=e[1],n=0;n<s.length;n+=1)for(var o=s[n],l=0;l<this.length;l+=1){var d=this[l],h=void 0;try{h=new a.CustomEvent(o,{detail:r,bubbles:!0,cancelable:!0})}catch(e){(h=i.createEvent("Event")).initEvent(o,!0,!0),h.detail=r}d.dom7EventData=e.filter((function(e,t){return t>0})),d.dispatchEvent(h),d.dom7EventData=[],delete d.dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionEnd","transitionend"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var e=this[0],t=e.getBoundingClientRect(),s=i.body,r=e.clientTop||s.clientTop||0,n=e.clientLeft||s.clientLeft||0,o=e===a?a.scrollY:e.scrollTop,l=e===a?a.scrollX:e.scrollLeft;return{top:t.top+o-r,left:t.left+l-n}}return null},css:function(e,t){var i;if(1===arguments.length){if("string"!=typeof e){for(i=0;i<this.length;i+=1)for(var s in e)this[i].style[s]=e[s];return this}if(this[0])return a.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(i=0;i<this.length;i+=1)this[i].style[e]=t;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){var t,s,o=this[0];if(!o||void 0===e)return!1;if("string"==typeof e){if(o.matches)return o.matches(e);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(e);if(o.msMatchesSelector)return o.msMatchesSelector(e);for(t=n(e),s=0;s<t.length;s+=1)if(t[s]===o)return!0;return!1}if(e===i)return o===i;if(e===a)return o===a;if(e.nodeType||e instanceof r){for(t=e.nodeType?[e]:e,s=0;s<t.length;s+=1)if(t[s]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,i=this.length;return new r(e>i-1?[]:e<0?(t=i+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var e,t=[],s=arguments.length;s--;)t[s]=arguments[s];for(var a=0;a<t.length;a+=1){e=t[a];for(var n=0;n<this.length;n+=1)if("string"==typeof e){var o=i.createElement("div");for(o.innerHTML=e;o.firstChild;)this[n].appendChild(o.firstChild)}else if(e instanceof r)for(var l=0;l<e.length;l+=1)this[n].appendChild(e[l]);else this[n].appendChild(e)}return this},prepend:function(e){var t,s;for(t=0;t<this.length;t+=1)if("string"==typeof e){var a=i.createElement("div");for(a.innerHTML=e,s=a.childNodes.length-1;s>=0;s-=1)this[t].insertBefore(a.childNodes[s],this[t].childNodes[0])}else if(e instanceof r)for(s=0;s<e.length;s+=1)this[t].insertBefore(e[s],this[t].childNodes[0]);else this[t].insertBefore(e,this[t].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&n(this[0].nextElementSibling).is(e)?new r([this[0].nextElementSibling]):new r([]):this[0].nextElementSibling?new r([this[0].nextElementSibling]):new r([]):new r([])},nextAll:function(e){var t=[],i=this[0];if(!i)return new r([]);for(;i.nextElementSibling;){var s=i.nextElementSibling;e?n(s).is(e)&&t.push(s):t.push(s),i=s}return new r(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&n(t.previousElementSibling).is(e)?new r([t.previousElementSibling]):new r([]):t.previousElementSibling?new r([t.previousElementSibling]):new r([])}return new r([])},prevAll:function(e){var t=[],i=this[0];if(!i)return new r([]);for(;i.previousElementSibling;){var s=i.previousElementSibling;e?n(s).is(e)&&t.push(s):t.push(s),i=s}return new r(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?n(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return n(o(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var s=this[i].parentNode;s;)e?n(s).is(e)&&t.push(s):t.push(s),s=s.parentNode;return n(o(t))},closest:function(e){var t=this;return void 0===e?new r([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var s=this[i].querySelectorAll(e),a=0;a<s.length;a+=1)t.push(s[a]);return new r(t)},children:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var s=this[i].childNodes,a=0;a<s.length;a+=1)e?1===s[a].nodeType&&n(s[a]).is(e)&&t.push(s[a]):1===s[a].nodeType&&t.push(s[a]);return new r(o(t))},filter:function(e){for(var t=[],i=0;i<this.length;i+=1)e.call(this[i],i,this[i])&&t.push(this[i]);return new r(t)},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a=this;for(i=0;i<e.length;i+=1){var r=n(e[i]);for(s=0;s<r.length;s+=1)a[a.length]=r[s],a.length+=1}return a},styles:function(){return this[0]?a.getComputedStyle(this[0],null):{}}};Object.keys(l).forEach((function(e){n.fn[e]=n.fn[e]||l[e]}));var d={deleteProps:function(e){var t=e;Object.keys(t).forEach((function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,t){var i,s,r;void 0===t&&(t="x");var n=a.getComputedStyle(e,null);return a.WebKitCSSMatrix?((s=n.transform||n.webkitTransform).split(",").length>6&&(s=s.split(", ").map((function(e){return e.replace(",",".")})).join(", ")),r=new a.WebKitCSSMatrix("none"===s?"":s)):i=(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===t&&(s=a.WebKitCSSMatrix?r.m41:16===i.length?parseFloat(i[12]):parseFloat(i[4])),"y"===t&&(s=a.WebKitCSSMatrix?r.m42:16===i.length?parseFloat(i[13]):parseFloat(i[5])),s||0},parseUrlQuery:function(e){var t,i,s,r,n={},o=e||a.location.href;if("string"==typeof o&&o.length)for(r=(i=(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"").split("&").filter((function(e){return""!==e}))).length,t=0;t<r;t+=1)s=i[t].replace(/#\S+/g,"").split("="),n[decodeURIComponent(s[0])]=void 0===s[1]?void 0:decodeURIComponent(s[1])||"";return n},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(null!=a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var l=r[n],h=Object.getOwnPropertyDescriptor(a,l);void 0!==h&&h.enumerable&&(d.isObject(i[l])&&d.isObject(a[l])?d.extend(i[l],a[l]):!d.isObject(i[l])&&d.isObject(a[l])?(i[l]={},d.extend(i[l],a[l])):i[l]=a[l])}}return i}},h={touch:!!("ontouchstart"in a||a.DocumentTouch&&i instanceof a.DocumentTouch),pointerEvents:!!a.PointerEvent&&"maxTouchPoints"in a.navigator&&a.navigator.maxTouchPoints>=0,observer:"MutationObserver"in a||"WebkitMutationObserver"in a,passiveListener:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});a.addEventListener("testPassiveListener",null,t)}catch(e){}return e}(),gestures:"ongesturestart"in a},p=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach((function(e){t.on(e,t.params.on[e])}))},c={components:{configurable:!0}};p.prototype.on=function(e,t,i){var s=this;if("function"!=typeof t)return s;var a=i?"unshift":"push";return e.split(" ").forEach((function(e){s.eventsListeners[e]||(s.eventsListeners[e]=[]),s.eventsListeners[e][a](t)})),s},p.prototype.once=function(e,t,i){var s=this;if("function"!=typeof t)return s;function a(){for(var i=[],r=arguments.length;r--;)i[r]=arguments[r];s.off(e,a),a.f7proxy&&delete a.f7proxy,t.apply(s,i)}return a.f7proxy=t,s.on(e,a,i)},p.prototype.off=function(e,t){var i=this;return i.eventsListeners?(e.split(" ").forEach((function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e]&&i.eventsListeners[e].length&&i.eventsListeners[e].forEach((function(s,a){(s===t||s.f7proxy&&s.f7proxy===t)&&i.eventsListeners[e].splice(a,1)}))})),i):i},p.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;if(!r.eventsListeners)return r;"string"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r);var n=Array.isArray(i)?i:i.split(" ");return n.forEach((function(e){if(r.eventsListeners&&r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach((function(e){t.push(e)})),t.forEach((function(e){e.apply(a,s)}))}})),r},p.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach((function(i){var s=t.modules[i];s.params&&d.extend(e,s.params)}))},p.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach((function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach((function(e){var i=s.instance[e];t[e]="function"==typeof i?i.bind(t):i})),s.on&&t.on&&Object.keys(s.on).forEach((function(e){t.on(e,s.on[e])})),s.create&&s.create.bind(t)(a)}))},c.components.set=function(e){this.use&&this.use(e)},p.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+"_"+d.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach((function(t){s.prototype[t]=e.proto[t]})),e.static&&Object.keys(e.static).forEach((function(t){s[t]=e.static[t]})),e.install&&e.install.apply(s,t),s},p.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach((function(e){return s.installModule(e)})),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(p,c);var u={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),d.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,t=this.$wrapperEl,i=this.size,s=this.rtlTranslate,r=this.wrongRTL,n=this.virtual&&e.virtual.enabled,o=n?this.virtual.slides.length:this.slides.length,l=t.children("."+this.params.slideClass),h=n?this.virtual.slides.length:l.length,p=[],c=[],u=[];function v(t){return!e.cssMode||t!==l.length-1}var f=e.slidesOffsetBefore;"function"==typeof f&&(f=e.slidesOffsetBefore.call(this));var m=e.slidesOffsetAfter;"function"==typeof m&&(m=e.slidesOffsetAfter.call(this));var g=this.snapGrid.length,b=this.snapGrid.length,w=e.spaceBetween,y=-f,x=0,E=0;if(void 0!==i){var T,S;"string"==typeof w&&w.indexOf("%")>=0&&(w=parseFloat(w.replace("%",""))/100*i),this.virtualSize=-w,s?l.css({marginLeft:"",marginTop:""}):l.css({marginRight:"",marginBottom:""}),e.slidesPerColumn>1&&(T=Math.floor(h/e.slidesPerColumn)===h/this.params.slidesPerColumn?h:Math.ceil(h/e.slidesPerColumn)*e.slidesPerColumn,"auto"!==e.slidesPerView&&"row"===e.slidesPerColumnFill&&(T=Math.max(T,e.slidesPerView*e.slidesPerColumn)));for(var C,M=e.slidesPerColumn,P=T/M,z=Math.floor(h/e.slidesPerColumn),k=0;k<h;k+=1){S=0;var $=l.eq(k);if(e.slidesPerColumn>1){var L=void 0,I=void 0,O=void 0;if("row"===e.slidesPerColumnFill&&e.slidesPerGroup>1){var D=Math.floor(k/(e.slidesPerGroup*e.slidesPerColumn)),A=k-e.slidesPerColumn*e.slidesPerGroup*D,G=0===D?e.slidesPerGroup:Math.min(Math.ceil((h-D*M*e.slidesPerGroup)/M),e.slidesPerGroup);L=(I=A-(O=Math.floor(A/G))*G+D*e.slidesPerGroup)+O*T/M,$.css({"-webkit-box-ordinal-group":L,"-moz-box-ordinal-group":L,"-ms-flex-order":L,"-webkit-order":L,order:L})}else"column"===e.slidesPerColumnFill?(O=k-(I=Math.floor(k/M))*M,(I>z||I===z&&O===M-1)&&(O+=1)>=M&&(O=0,I+=1)):I=k-(O=Math.floor(k/P))*P;$.css("margin-"+(this.isHorizontal()?"top":"left"),0!==O&&e.spaceBetween&&e.spaceBetween+"px")}if("none"!==$.css("display")){if("auto"===e.slidesPerView){var H=a.getComputedStyle($[0],null),B=$[0].style.transform,N=$[0].style.webkitTransform;if(B&&($[0].style.transform="none"),N&&($[0].style.webkitTransform="none"),e.roundLengths)S=this.isHorizontal()?$.outerWidth(!0):$.outerHeight(!0);else if(this.isHorizontal()){var X=parseFloat(H.getPropertyValue("width")),V=parseFloat(H.getPropertyValue("padding-left")),Y=parseFloat(H.getPropertyValue("padding-right")),F=parseFloat(H.getPropertyValue("margin-left")),W=parseFloat(H.getPropertyValue("margin-right")),R=H.getPropertyValue("box-sizing");S=R&&"border-box"===R?X+F+W:X+V+Y+F+W}else{var q=parseFloat(H.getPropertyValue("height")),j=parseFloat(H.getPropertyValue("padding-top")),K=parseFloat(H.getPropertyValue("padding-bottom")),U=parseFloat(H.getPropertyValue("margin-top")),_=parseFloat(H.getPropertyValue("margin-bottom")),Z=H.getPropertyValue("box-sizing");S=Z&&"border-box"===Z?q+U+_:q+j+K+U+_}B&&($[0].style.transform=B),N&&($[0].style.webkitTransform=N),e.roundLengths&&(S=Math.floor(S))}else S=(i-(e.slidesPerView-1)*w)/e.slidesPerView,e.roundLengths&&(S=Math.floor(S)),l[k]&&(this.isHorizontal()?l[k].style.width=S+"px":l[k].style.height=S+"px");l[k]&&(l[k].swiperSlideSize=S),u.push(S),e.centeredSlides?(y=y+S/2+x/2+w,0===x&&0!==k&&(y=y-i/2-w),0===k&&(y=y-i/2-w),Math.abs(y)<.001&&(y=0),e.roundLengths&&(y=Math.floor(y)),E%e.slidesPerGroup==0&&p.push(y),c.push(y)):(e.roundLengths&&(y=Math.floor(y)),(E-Math.min(this.params.slidesPerGroupSkip,E))%this.params.slidesPerGroup==0&&p.push(y),c.push(y),y=y+S+w),this.virtualSize+=S+w,x=S,E+=1}}if(this.virtualSize=Math.max(this.virtualSize,i)+m,s&&r&&("slide"===e.effect||"coverflow"===e.effect)&&t.css({width:this.virtualSize+e.spaceBetween+"px"}),e.setWrapperSize&&(this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"})),e.slidesPerColumn>1&&(this.virtualSize=(S+e.spaceBetween)*T,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"}),e.centeredSlides)){C=[];for(var Q=0;Q<p.length;Q+=1){var J=p[Q];e.roundLengths&&(J=Math.floor(J)),p[Q]<this.virtualSize+p[0]&&C.push(J)}p=C}if(!e.centeredSlides){C=[];for(var ee=0;ee<p.length;ee+=1){var te=p[ee];e.roundLengths&&(te=Math.floor(te)),p[ee]<=this.virtualSize-i&&C.push(te)}p=C,Math.floor(this.virtualSize-i)-Math.floor(p[p.length-1])>1&&p.push(this.virtualSize-i)}if(0===p.length&&(p=[0]),0!==e.spaceBetween&&(this.isHorizontal()?s?l.filter(v).css({marginLeft:w+"px"}):l.filter(v).css({marginRight:w+"px"}):l.filter(v).css({marginBottom:w+"px"})),e.centeredSlides&&e.centeredSlidesBounds){var ie=0;u.forEach((function(t){ie+=t+(e.spaceBetween?e.spaceBetween:0)}));var se=(ie-=e.spaceBetween)-i;p=p.map((function(e){return e<0?-f:e>se?se+m:e}))}if(e.centerInsufficientSlides){var ae=0;if(u.forEach((function(t){ae+=t+(e.spaceBetween?e.spaceBetween:0)})),(ae-=e.spaceBetween)<i){var re=(i-ae)/2;p.forEach((function(e,t){p[t]=e-re})),c.forEach((function(e,t){c[t]=e+re}))}}d.extend(this,{slides:l,snapGrid:p,slidesGrid:c,slidesSizesGrid:u}),h!==o&&this.emit("slidesLengthChange"),p.length!==g&&(this.params.watchOverflow&&this.checkOverflow(),this.emit("snapGridLengthChange")),c.length!==b&&this.emit("slidesGridLengthChange"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(e){var t,i=[],s=0;if("number"==typeof e?this.setTransition(e):!0===e&&this.setTransition(this.params.speed),"auto"!==this.params.slidesPerView&&this.params.slidesPerView>1)if(this.params.centeredSlides)this.visibleSlides.each((function(e,t){i.push(t)}));else for(t=0;t<Math.ceil(this.params.slidesPerView);t+=1){var a=this.activeIndex+t;if(a>this.slides.length)break;i.push(this.slides.eq(a)[0])}else i.push(this.slides.eq(this.activeIndex)[0]);for(t=0;t<i.length;t+=1)if(void 0!==i[t]){var r=i[t].offsetHeight;s=r>s?r:s}s&&this.$wrapperEl.css("height",s+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this.params,i=this.slides,s=this.rtlTranslate;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var a=-e;s&&(a=e),i.removeClass(t.slideVisibleClass),this.visibleSlidesIndexes=[],this.visibleSlides=[];for(var r=0;r<i.length;r+=1){var o=i[r],l=(a+(t.centeredSlides?this.minTranslate():0)-o.swiperSlideOffset)/(o.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility||t.centeredSlides&&t.autoHeight){var d=-(a-o.swiperSlideOffset),h=d+this.slidesSizesGrid[r];(d>=0&&d<this.size-1||h>1&&h<=this.size||d<=0&&h>=this.size)&&(this.visibleSlides.push(o),this.visibleSlidesIndexes.push(r),i.eq(r).addClass(t.slideVisibleClass))}o.progress=s?-l:l}this.visibleSlides=n(this.visibleSlides)}},updateProgress:function(e){if(void 0===e){var t=this.rtlTranslate?-1:1;e=this&&this.translate&&this.translate*t||0}var i=this.params,s=this.maxTranslate()-this.minTranslate(),a=this.progress,r=this.isBeginning,n=this.isEnd,o=r,l=n;0===s?(a=0,r=!0,n=!0):(r=(a=(e-this.minTranslate())/s)<=0,n=a>=1),d.extend(this,{progress:a,isBeginning:r,isEnd:n}),(i.watchSlidesProgress||i.watchSlidesVisibility||i.centeredSlides&&i.autoHeight)&&this.updateSlidesProgress(e),r&&!o&&this.emit("reachBeginning toEdge"),n&&!l&&this.emit("reachEnd toEdge"),(o&&!r||l&&!n)&&this.emit("fromEdge"),this.emit("progress",a)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+a+'"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtlTranslate?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,l=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if(a.indexOf(i)>=0)t=a.indexOf(i);else{var c=Math.min(r.slidesPerGroupSkip,h);t=c+Math.floor((h-c)/r.slidesPerGroup)}if(t>=a.length&&(t=a.length-1),h!==n){var u=parseInt(this.slides.eq(h).attr("data-swiper-slide-index")||h,10);d.extend(this,{snapIndex:t,realIndex:u,previousIndex:n,activeIndex:h}),this.emit("activeIndexChange"),this.emit("snapIndexChange"),o!==u&&this.emit("realIndexChange"),(this.initialized||this.params.runCallbacksOnInit)&&this.emit("slideChange")}else t!==l&&(this.snapIndex=t,this.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this.params,i=n(e.target).closest("."+t.slideClass)[0],s=!1;if(i)for(var a=0;a<this.slides.length;a+=1)this.slides[a]===i&&(s=!0);if(!i||!s)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(n(i).attr("data-swiper-slide-index"),10):this.clickedIndex=n(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}};var v={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,i=this.rtlTranslate,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;if(t.cssMode)return s;var r=d.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtlTranslate,s=this.params,a=this.$wrapperEl,r=this.wrapperEl,n=this.progress,o=0,l=0;this.isHorizontal()?o=i?-e:e:l=e,s.roundLengths&&(o=Math.floor(o),l=Math.floor(l)),s.cssMode?r[this.isHorizontal()?"scrollLeft":"scrollTop"]=this.isHorizontal()?-o:-l:s.virtualTranslate||a.transform("translate3d("+o+"px, "+l+"px, 0px)"),this.previousTranslate=this.translate,this.translate=this.isHorizontal()?o:l;var d=this.maxTranslate()-this.minTranslate();(0===d?0:(e-this.minTranslate())/d)!==n&&this.updateProgress(e),this.emit("setTranslate",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e,t,i,s,a){var r;void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0),void 0===s&&(s=!0);var n=this,o=n.params,l=n.wrapperEl;if(n.animating&&o.preventInteractionOnTransition)return!1;var d,h=n.minTranslate(),p=n.maxTranslate();if(d=s&&e>h?h:s&&e<p?p:e,n.updateProgress(d),o.cssMode){var c=n.isHorizontal();return 0===t?l[c?"scrollLeft":"scrollTop"]=-d:l.scrollTo?l.scrollTo(((r={})[c?"left":"top"]=-d,r.behavior="smooth",r)):l[c?"scrollLeft":"scrollTop"]=-d,!0}return 0===t?(n.setTransition(0),n.setTranslate(d),i&&(n.emit("beforeTransitionStart",t,a),n.emit("transitionEnd"))):(n.setTransition(t),n.setTranslate(d),i&&(n.emit("beforeTransitionStart",t,a),n.emit("transitionStart")),n.animating||(n.animating=!0,n.onTranslateToWrapperTransitionEnd||(n.onTranslateToWrapperTransitionEnd=function(e){n&&!n.destroyed&&e.target===this&&(n.$wrapperEl[0].removeEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].removeEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd),n.onTranslateToWrapperTransitionEnd=null,delete n.onTranslateToWrapperTransitionEnd,i&&n.emit("transitionEnd"))}),n.$wrapperEl[0].addEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].addEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd))),!0}};var f={setTransition:function(e,t){this.params.cssMode||this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;if(!s.cssMode){s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),this.emit("transitionStart"),e&&i!==a){if("reset"===r)return void this.emit("slideResetTransitionStart");this.emit("slideChangeTransitionStart"),"next"===r?this.emit("slideNextTransitionStart"):this.emit("slidePrevTransitionStart")}}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex,a=this.params;if(this.animating=!1,!a.cssMode){this.setTransition(0);var r=t;if(r||(r=i>s?"next":i<s?"prev":"reset"),this.emit("transitionEnd"),e&&i!==s){if("reset"===r)return void this.emit("slideResetTransitionEnd");this.emit("slideChangeTransitionEnd"),"next"===r?this.emit("slideNextTransitionEnd"):this.emit("slidePrevTransitionEnd")}}}};var m={slideTo:function(e,t,i,s){var a;void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var r=this,n=e;n<0&&(n=0);var o=r.params,l=r.snapGrid,d=r.slidesGrid,h=r.previousIndex,p=r.activeIndex,c=r.rtlTranslate,u=r.wrapperEl;if(r.animating&&o.preventInteractionOnTransition)return!1;var v=Math.min(r.params.slidesPerGroupSkip,n),f=v+Math.floor((n-v)/r.params.slidesPerGroup);f>=l.length&&(f=l.length-1),(p||o.initialSlide||0)===(h||0)&&i&&r.emit("beforeSlideChangeStart");var m,g=-l[f];if(r.updateProgress(g),o.normalizeSlideIndex)for(var b=0;b<d.length;b+=1)-Math.floor(100*g)>=Math.floor(100*d[b])&&(n=b);if(r.initialized&&n!==p){if(!r.allowSlideNext&&g<r.translate&&g<r.minTranslate())return!1;if(!r.allowSlidePrev&&g>r.translate&&g>r.maxTranslate()&&(p||0)!==n)return!1}if(m=n>p?"next":n<p?"prev":"reset",c&&-g===r.translate||!c&&g===r.translate)return r.updateActiveIndex(n),o.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==o.effect&&r.setTranslate(g),"reset"!==m&&(r.transitionStart(i,m),r.transitionEnd(i,m)),!1;if(o.cssMode){var w=r.isHorizontal(),y=-g;return c&&(y=u.scrollWidth-u.offsetWidth-y),0===t?u[w?"scrollLeft":"scrollTop"]=y:u.scrollTo?u.scrollTo(((a={})[w?"left":"top"]=y,a.behavior="smooth",a)):u[w?"scrollLeft":"scrollTop"]=y,!0}return 0===t?(r.setTransition(0),r.setTranslate(g),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,s),r.transitionStart(i,m),r.transitionEnd(i,m)):(r.setTransition(t),r.setTranslate(g),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,s),r.transitionStart(i,m),r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(i,m))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd))),!0},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating,r=this.activeIndex<s.slidesPerGroupSkip?1:s.slidesPerGroup;if(s.loop){if(a)return!1;this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft}return this.slideTo(this.activeIndex+r,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating,r=this.snapGrid,n=this.slidesGrid,o=this.rtlTranslate;if(s.loop){if(a)return!1;this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft}function l(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}var d,h=l(o?this.translate:-this.translate),p=r.map((function(e){return l(e)})),c=(n.map((function(e){return l(e)})),r[p.indexOf(h)],r[p.indexOf(h)-1]);return void 0===c&&s.cssMode&&r.forEach((function(e){!c&&h>=e&&(c=e)})),void 0!==c&&(d=n.indexOf(c))<0&&(d=this.activeIndex-1),this.slideTo(d,e,t,i)},slideReset:function(e,t,i){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,i)},slideToClosest:function(e,t,i,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===s&&(s=.5);var a=this.activeIndex,r=Math.min(this.params.slidesPerGroupSkip,a),n=r+Math.floor((a-r)/this.params.slidesPerGroup),o=this.rtlTranslate?this.translate:-this.translate;if(o>=this.snapGrid[n]){var l=this.snapGrid[n];o-l>(this.snapGrid[n+1]-l)*s&&(a+=this.params.slidesPerGroup)}else{var d=this.snapGrid[n-1];o-d<=(this.snapGrid[n]-d)*s&&(a-=this.params.slidesPerGroup)}return a=Math.max(a,0),a=Math.min(a,this.slidesGrid.length-1),this.slideTo(a,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,s=t.$wrapperEl,a="auto"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,r=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(n(t.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?r<t.loopedSlides-a/2||r>t.slides.length-t.loopedSlides+a/2?(t.loopFix(),r=s.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick((function(){t.slideTo(r)}))):t.slideTo(r):r>t.slides.length-a?(t.loopFix(),r=s.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick((function(){t.slideTo(r)}))):t.slideTo(r)}else t.slideTo(r)}};var g={loopCreate:function(){var e=this,t=e.params,s=e.$wrapperEl;s.children("."+t.slideClass+"."+t.slideDuplicateClass).remove();var a=s.children("."+t.slideClass);if(t.loopFillGroupWithBlank){var r=t.slidesPerGroup-a.length%t.slidesPerGroup;if(r!==t.slidesPerGroup){for(var o=0;o<r;o+=1){var l=n(i.createElement("div")).addClass(t.slideClass+" "+t.slideBlankClass);s.append(l)}a=s.children("."+t.slideClass)}}"auto"!==t.slidesPerView||t.loopedSlides||(t.loopedSlides=a.length),e.loopedSlides=Math.ceil(parseFloat(t.loopedSlides||t.slidesPerView,10)),e.loopedSlides+=t.loopAdditionalSlides,e.loopedSlides>a.length&&(e.loopedSlides=a.length);var d=[],h=[];a.each((function(t,i){var s=n(i);t<e.loopedSlides&&h.push(i),t<a.length&&t>=a.length-e.loopedSlides&&d.push(i),s.attr("data-swiper-slide-index",t)}));for(var p=0;p<h.length;p+=1)s.append(n(h[p].cloneNode(!0)).addClass(t.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)s.prepend(n(d[c].cloneNode(!0)).addClass(t.slideDuplicateClass))},loopFix:function(){this.emit("beforeLoopFix");var e,t=this.activeIndex,i=this.slides,s=this.loopedSlides,a=this.allowSlidePrev,r=this.allowSlideNext,n=this.snapGrid,o=this.rtlTranslate;this.allowSlidePrev=!0,this.allowSlideNext=!0;var l=-n[t]-this.getTranslate();if(t<s)e=i.length-3*s+t,e+=s,this.slideTo(e,0,!1,!0)&&0!==l&&this.setTranslate((o?-this.translate:this.translate)-l);else if(t>=i.length-s){e=-i.length+t+s,e+=s,this.slideTo(e,0,!1,!0)&&0!==l&&this.setTranslate((o?-this.translate:this.translate)-l)}this.allowSlidePrev=a,this.allowSlideNext=r,this.emit("loopFix")},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass+",."+t.slideClass+"."+t.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}};var b={setGrabCursor:function(e){if(!(h.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked||this.params.cssMode)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){h.touch||this.params.watchOverflow&&this.isLocked||this.params.cssMode||(this.el.style.cursor="")}};var w,y,x,E,T,S,C,M,P,z,k,$,L,I,O,D={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&h.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if("object"==typeof e&&"length"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),this.slideTo(a,0,!1)},addSlide:function(e,t){var i=this.$wrapperEl,s=this.params,a=this.activeIndex;s.loop&&(a-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+s.slideClass));var r=this.slides.length;if(e<=0)this.prependSlide(t);else if(e>=r)this.appendSlide(t);else{for(var n=a>e?a+1:a,o=[],l=r-1;l>=e;l-=1){var d=this.slides.eq(l);d.remove(),o.unshift(d)}if("object"==typeof t&&"length"in t){for(var p=0;p<t.length;p+=1)t[p]&&i.append(t[p]);n=a>e?a+t.length:a}else i.append(t);for(var c=0;c<o.length;c+=1)i.append(o[c]);s.loop&&this.loopCreate(),s.observer&&h.observer||this.update(),s.loop?this.slideTo(n+this.loopedSlides,0,!1):this.slideTo(n,0,!1)}},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(s-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+t.slideClass));var a,r=s;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},A=(w=a.navigator.platform,y=a.navigator.userAgent,x={ios:!1,android:!1,androidChrome:!1,desktop:!1,iphone:!1,ipod:!1,ipad:!1,edge:!1,ie:!1,firefox:!1,macos:!1,windows:!1,cordova:!(!a.cordova&&!a.phonegap),phonegap:!(!a.cordova&&!a.phonegap),electron:!1},E=a.screen.width,T=a.screen.height,S=y.match(/(Android);?[\s\/]+([\d.]+)?/),C=y.match(/(iPad).*OS\s([\d_]+)/),M=y.match(/(iPod)(.*OS\s([\d_]+))?/),P=!C&&y.match(/(iPhone\sOS|iOS)\s([\d_]+)/),z=y.indexOf("MSIE ")>=0||y.indexOf("Trident/")>=0,k=y.indexOf("Edge/")>=0,$=y.indexOf("Gecko/")>=0&&y.indexOf("Firefox/")>=0,L="Win32"===w,I=y.toLowerCase().indexOf("electron")>=0,O="MacIntel"===w,!C&&O&&h.touch&&(1024===E&&1366===T||834===E&&1194===T||834===E&&1112===T||768===E&&1024===T)&&(C=y.match(/(Version)\/([\d.]+)/),O=!1),x.ie=z,x.edge=k,x.firefox=$,S&&!L&&(x.os="android",x.osVersion=S[2],x.android=!0,x.androidChrome=y.toLowerCase().indexOf("chrome")>=0),(C||P||M)&&(x.os="ios",x.ios=!0),P&&!M&&(x.osVersion=P[2].replace(/_/g,"."),x.iphone=!0),C&&(x.osVersion=C[2].replace(/_/g,"."),x.ipad=!0),M&&(x.osVersion=M[3]?M[3].replace(/_/g,"."):null,x.ipod=!0),x.ios&&x.osVersion&&y.indexOf("Version/")>=0&&"10"===x.osVersion.split(".")[0]&&(x.osVersion=y.toLowerCase().split("version/")[1].split(" ")[0]),x.webView=!(!(P||C||M)||!y.match(/.*AppleWebKit(?!.*Safari)/i)&&!a.navigator.standalone)||a.matchMedia&&a.matchMedia("(display-mode: standalone)").matches,x.webview=x.webView,x.standalone=x.webView,x.desktop=!(x.ios||x.android)||I,x.desktop&&(x.electron=I,x.macos=O,x.windows=L,x.macos&&(x.os="macos"),x.windows&&(x.os="windows")),x.pixelRatio=a.devicePixelRatio||1,x);function G(e){var t=this.touchEventsData,s=this.params,r=this.touches;if(!this.animating||!s.preventInteractionOnTransition){var o=e;o.originalEvent&&(o=o.originalEvent);var l=n(o.target);if(("wrapper"!==s.touchEventsTarget||l.closest(this.wrapperEl).length)&&(t.isTouchEvent="touchstart"===o.type,(t.isTouchEvent||!("which"in o)||3!==o.which)&&!(!t.isTouchEvent&&"button"in o&&o.button>0||t.isTouched&&t.isMoved)))if(s.noSwiping&&l.closest(s.noSwipingSelector?s.noSwipingSelector:"."+s.noSwipingClass)[0])this.allowClick=!0;else if(!s.swipeHandler||l.closest(s.swipeHandler)[0]){r.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,r.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var h=r.currentX,p=r.currentY,c=s.edgeSwipeDetection||s.iOSEdgeSwipeDetection,u=s.edgeSwipeThreshold||s.iOSEdgeSwipeThreshold;if(!c||!(h<=u||h>=a.screen.width-u)){if(d.extend(t,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),r.startX=h,r.startY=p,t.touchStartTime=d.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,s.threshold>0&&(t.allowThresholdMove=!1),"touchstart"!==o.type){var v=!0;l.is(t.formElements)&&(v=!1),i.activeElement&&n(i.activeElement).is(t.formElements)&&i.activeElement!==l[0]&&i.activeElement.blur();var f=v&&this.allowTouchMove&&s.touchStartPreventDefault;(s.touchStartForcePreventDefault||f)&&o.preventDefault()}this.emit("touchStart",o)}}}}function H(e){var t=this.touchEventsData,s=this.params,a=this.touches,r=this.rtlTranslate,o=e;if(o.originalEvent&&(o=o.originalEvent),t.isTouched){if(!t.isTouchEvent||"touchmove"===o.type){var l="touchmove"===o.type&&o.targetTouches&&(o.targetTouches[0]||o.changedTouches[0]),h="touchmove"===o.type?l.pageX:o.pageX,p="touchmove"===o.type?l.pageY:o.pageY;if(o.preventedByNestedSwiper)return a.startX=h,void(a.startY=p);if(!this.allowTouchMove)return this.allowClick=!1,void(t.isTouched&&(d.extend(a,{startX:h,startY:p,currentX:h,currentY:p}),t.touchStartTime=d.now()));if(t.isTouchEvent&&s.touchReleaseOnEdges&&!s.loop)if(this.isVertical()){if(p<a.startY&&this.translate<=this.maxTranslate()||p>a.startY&&this.translate>=this.minTranslate())return t.isTouched=!1,void(t.isMoved=!1)}else if(h<a.startX&&this.translate<=this.maxTranslate()||h>a.startX&&this.translate>=this.minTranslate())return;if(t.isTouchEvent&&i.activeElement&&o.target===i.activeElement&&n(o.target).is(t.formElements))return t.isMoved=!0,void(this.allowClick=!1);if(t.allowTouchCallbacks&&this.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){a.currentX=h,a.currentY=p;var c=a.currentX-a.startX,u=a.currentY-a.startY;if(!(this.params.threshold&&Math.sqrt(Math.pow(c,2)+Math.pow(u,2))<this.params.threshold)){var v;if(void 0===t.isScrolling)this.isHorizontal()&&a.currentY===a.startY||this.isVertical()&&a.currentX===a.startX?t.isScrolling=!1:c*c+u*u>=25&&(v=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,t.isScrolling=this.isHorizontal()?v>s.touchAngle:90-v>s.touchAngle);if(t.isScrolling&&this.emit("touchMoveOpposite",o),void 0===t.startMoving&&(a.currentX===a.startX&&a.currentY===a.startY||(t.startMoving=!0)),t.isScrolling)t.isTouched=!1;else if(t.startMoving){this.allowClick=!1,!s.cssMode&&o.cancelable&&o.preventDefault(),s.touchMoveStopPropagation&&!s.nested&&o.stopPropagation(),t.isMoved||(s.loop&&this.loopFix(),t.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger("webkitTransitionEnd transitionend"),t.allowMomentumBounce=!1,!s.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit("sliderFirstMove",o)),this.emit("sliderMove",o),t.isMoved=!0;var f=this.isHorizontal()?c:u;a.diff=f,f*=s.touchRatio,r&&(f=-f),this.swipeDirection=f>0?"prev":"next",t.currentTranslate=f+t.startTranslate;var m=!0,g=s.resistanceRatio;if(s.touchReleaseOnEdges&&(g=0),f>0&&t.currentTranslate>this.minTranslate()?(m=!1,s.resistance&&(t.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+t.startTranslate+f,g))):f<0&&t.currentTranslate<this.maxTranslate()&&(m=!1,s.resistance&&(t.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-t.startTranslate-f,g))),m&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&"next"===this.swipeDirection&&t.currentTranslate<t.startTranslate&&(t.currentTranslate=t.startTranslate),!this.allowSlidePrev&&"prev"===this.swipeDirection&&t.currentTranslate>t.startTranslate&&(t.currentTranslate=t.startTranslate),s.threshold>0){if(!(Math.abs(f)>s.threshold||t.allowThresholdMove))return void(t.currentTranslate=t.startTranslate);if(!t.allowThresholdMove)return t.allowThresholdMove=!0,a.startX=a.currentX,a.startY=a.currentY,t.currentTranslate=t.startTranslate,void(a.diff=this.isHorizontal()?a.currentX-a.startX:a.currentY-a.startY)}s.followFinger&&!s.cssMode&&((s.freeMode||s.watchSlidesProgress||s.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),s.freeMode&&(0===t.velocities.length&&t.velocities.push({position:a[this.isHorizontal()?"startX":"startY"],time:t.touchStartTime}),t.velocities.push({position:a[this.isHorizontal()?"currentX":"currentY"],time:d.now()})),this.updateProgress(t.currentTranslate),this.setTranslate(t.currentTranslate))}}}}}else t.startMoving&&t.isScrolling&&this.emit("touchMoveOpposite",o)}function B(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=d.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit("tap click",h),u<300&&c-i.lastClickTime<300&&t.emit("doubleTap doubleClick",h)),i.lastClickTime=d.now(),d.nextTick((function(){t.destroyed||(t.allowClick=!0)})),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,!s.cssMode)if(s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||d.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,E,T=!1,S=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-S&&(y=t.maxTranslate()-S),x=t.maxTranslate(),T=!0,i.allowMomentumBounce=!0):y=t.maxTranslate(),s.loop&&s.centeredSlides&&(E=!0);else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>S&&(y=t.minTranslate()+S),x=t.minTranslate(),T=!0,i.allowMomentumBounce=!0):y=t.minTranslate(),s.loop&&s.centeredSlides&&(E=!0);else if(s.freeModeSticky){for(var C,M=0;M<l.length;M+=1)if(l[M]>-y){C=M;break}y=-(y=Math.abs(l[C]-y)<Math.abs(l[C-1]-y)||"next"===t.swipeDirection?l[C]:l[C-1])}if(E&&t.once("transitionEnd",(function(){t.loopFix()})),0!==t.velocity){if(b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity),s.freeModeSticky){var P=Math.abs((r?-y:y)-t.translate),z=t.slidesSizesGrid[t.activeIndex];b=P<z?s.speed:P<2*z?1.5*s.speed:2.5*s.speed}}else if(s.freeModeSticky)return void t.slideToClosest();s.freeModeMomentumBounce&&T?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd((function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(s.speed),setTimeout((function(){t.setTranslate(x),n.transitionEnd((function(){t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd((function(){t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}else if(s.freeModeSticky)return void t.slideToClosest();(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var k=0,$=t.slidesSizesGrid[0],L=0;L<o.length;L+=L<s.slidesPerGroupSkip?1:s.slidesPerGroup){var I=L<s.slidesPerGroupSkip-1?1:s.slidesPerGroup;void 0!==o[L+I]?p>=o[L]&&p<o[L+I]&&(k=L,$=o[L+I]-o[L]):p>=o[L]&&(k=L,$=o[o.length-1]-o[o.length-2])}var O=(p-o[k])/$,D=k<s.slidesPerGroupSkip-1?1:s.slidesPerGroup;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(O>=s.longSwipesRatio?t.slideTo(k+D):t.slideTo(k)),"prev"===t.swipeDirection&&(O>1-s.longSwipesRatio?t.slideTo(k+D):t.slideTo(k))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(h.target===t.navigation.nextEl||h.target===t.navigation.prevEl)?h.target===t.navigation.nextEl?t.slideTo(k+D):t.slideTo(k):("next"===t.swipeDirection&&t.slideTo(k+D),"prev"===t.swipeDirection&&t.slideTo(k))}}}function N(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev,a=this.snapGrid;this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),this.updateSlidesClasses(),("auto"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0),this.autoplay&&this.autoplay.running&&this.autoplay.paused&&this.autoplay.run(),this.allowSlidePrev=s,this.allowSlideNext=i,this.params.watchOverflow&&a!==this.snapGrid&&this.checkOverflow()}}function X(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}function V(){var e=this.wrapperEl,t=this.rtlTranslate;this.previousTranslate=this.translate,this.isHorizontal()?this.translate=t?e.scrollWidth-e.offsetWidth-e.scrollLeft:-e.scrollLeft:this.translate=-e.scrollTop,-0===this.translate&&(this.translate=0),this.updateActiveIndex(),this.updateSlidesClasses();var i=this.maxTranslate()-this.minTranslate();(0===i?0:(this.translate-this.minTranslate())/i)!==this.progress&&this.updateProgress(t?-this.translate:this.translate),this.emit("setTranslate",this.translate,!1)}var Y=!1;function F(){}var W={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,preventInteractionOnTransition:!1,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,slidesPerGroupSkip:0,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},R={update:u,translate:v,transition:f,slide:m,loop:g,grabCursor:b,manipulation:D,events:{attachEvents:function(){var e=this.params,t=this.touchEvents,s=this.el,a=this.wrapperEl;this.onTouchStart=G.bind(this),this.onTouchMove=H.bind(this),this.onTouchEnd=B.bind(this),e.cssMode&&(this.onScroll=V.bind(this)),this.onClick=X.bind(this);var r=!!e.nested;if(!h.touch&&h.pointerEvents)s.addEventListener(t.start,this.onTouchStart,!1),i.addEventListener(t.move,this.onTouchMove,r),i.addEventListener(t.end,this.onTouchEnd,!1);else{if(h.touch){var n=!("touchstart"!==t.start||!h.passiveListener||!e.passiveListeners)&&{passive:!0,capture:!1};s.addEventListener(t.start,this.onTouchStart,n),s.addEventListener(t.move,this.onTouchMove,h.passiveListener?{passive:!1,capture:r}:r),s.addEventListener(t.end,this.onTouchEnd,n),t.cancel&&s.addEventListener(t.cancel,this.onTouchEnd,n),Y||(i.addEventListener("touchstart",F),Y=!0)}(e.simulateTouch&&!A.ios&&!A.android||e.simulateTouch&&!h.touch&&A.ios)&&(s.addEventListener("mousedown",this.onTouchStart,!1),i.addEventListener("mousemove",this.onTouchMove,r),i.addEventListener("mouseup",this.onTouchEnd,!1))}(e.preventClicks||e.preventClicksPropagation)&&s.addEventListener("click",this.onClick,!0),e.cssMode&&a.addEventListener("scroll",this.onScroll),e.updateOnWindowResize?this.on(A.ios||A.android?"resize orientationchange observerUpdate":"resize observerUpdate",N,!0):this.on("observerUpdate",N,!0)},detachEvents:function(){var e=this.params,t=this.touchEvents,s=this.el,a=this.wrapperEl,r=!!e.nested;if(!h.touch&&h.pointerEvents)s.removeEventListener(t.start,this.onTouchStart,!1),i.removeEventListener(t.move,this.onTouchMove,r),i.removeEventListener(t.end,this.onTouchEnd,!1);else{if(h.touch){var n=!("onTouchStart"!==t.start||!h.passiveListener||!e.passiveListeners)&&{passive:!0,capture:!1};s.removeEventListener(t.start,this.onTouchStart,n),s.removeEventListener(t.move,this.onTouchMove,r),s.removeEventListener(t.end,this.onTouchEnd,n),t.cancel&&s.removeEventListener(t.cancel,this.onTouchEnd,n)}(e.simulateTouch&&!A.ios&&!A.android||e.simulateTouch&&!h.touch&&A.ios)&&(s.removeEventListener("mousedown",this.onTouchStart,!1),i.removeEventListener("mousemove",this.onTouchMove,r),i.removeEventListener("mouseup",this.onTouchEnd,!1))}(e.preventClicks||e.preventClicksPropagation)&&s.removeEventListener("click",this.onClick,!0),e.cssMode&&a.removeEventListener("scroll",this.onScroll),this.off(A.ios||A.android?"resize orientationchange observerUpdate":"resize observerUpdate",N)}},breakpoints:{setBreakpoint:function(){var e=this.activeIndex,t=this.initialized,i=this.loopedSlides;void 0===i&&(i=0);var s=this.params,a=this.$el,r=s.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var n=this.getBreakpoint(r);if(n&&this.currentBreakpoint!==n){var o=n in r?r[n]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup","slidesPerGroupSkip","slidesPerColumn"].forEach((function(e){var t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")}));var l=o||this.originalParams,h=s.slidesPerColumn>1,p=l.slidesPerColumn>1;h&&!p?a.removeClass(s.containerModifierClass+"multirow "+s.containerModifierClass+"multirow-column"):!h&&p&&(a.addClass(s.containerModifierClass+"multirow"),"column"===l.slidesPerColumnFill&&a.addClass(s.containerModifierClass+"multirow-column"));var c=l.direction&&l.direction!==s.direction,u=s.loop&&(l.slidesPerView!==s.slidesPerView||c);c&&t&&this.changeDirection(),d.extend(this.params,l),d.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=n,u&&t&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-i+this.loopedSlides,0,!1)),this.emit("breakpoint",l)}}},getBreakpoint:function(e){if(e){var t=!1,i=Object.keys(e).map((function(e){if("string"==typeof e&&0===e.indexOf("@")){var t=parseFloat(e.substr(1));return{value:a.innerHeight*t,point:e}}return{value:e,point:e}}));i.sort((function(e,t){return parseInt(e.value,10)-parseInt(t.value,10)}));for(var s=0;s<i.length;s+=1){var r=i[s],n=r.point;r.value<=a.innerWidth&&(t=n)}return t||"max"}}},checkOverflow:{checkOverflow:function(){var e=this.params,t=this.isLocked,i=this.slides.length>0&&e.slidesOffsetBefore+e.spaceBetween*(this.slides.length-1)+this.slides[0].offsetWidth*this.slides.length;e.slidesOffsetBefore&&e.slidesOffsetAfter&&i?this.isLocked=i<=this.size:this.isLocked=1===this.snapGrid.length,this.allowSlideNext=!this.isLocked,this.allowSlidePrev=!this.isLocked,t!==this.isLocked&&this.emit(this.isLocked?"lock":"unlock"),t&&t!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push("initialized"),a.push(t.direction),t.freeMode&&a.push("free-mode"),t.autoHeight&&a.push("autoheight"),i&&a.push("rtl"),t.slidesPerColumn>1&&(a.push("multirow"),"column"===t.slidesPerColumnFill&&a.push("multirow-column")),A.android&&a.push("android"),A.ios&&a.push("ios"),t.cssMode&&a.push("css-mode"),a.forEach((function(i){e.push(t.containerModifierClass+i)})),s.addClass(e.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,t,i,s,r,o){var l;function d(){o&&o()}n(e).parent("picture")[0]||e.complete&&r?d():t?((l=new a.Image).onload=d,l.onerror=d,s&&(l.sizes=s),i&&(l.srcset=i),t&&(l.src=t)):d()},preloadImages:function(){var e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute("src"),s.srcset||s.getAttribute("srcset"),s.sizes||s.getAttribute("sizes"),!0,t)}}}},q={},j=function(e){function t(){for(var i,s,a,r=[],o=arguments.length;o--;)r[o]=arguments[o];1===r.length&&r[0].constructor&&r[0].constructor===Object?a=r[0]:(s=(i=r)[0],a=i[1]),a||(a={}),a=d.extend({},a),s&&!a.el&&(a.el=s),e.call(this,a),Object.keys(R).forEach((function(e){Object.keys(R[e]).forEach((function(i){t.prototype[i]||(t.prototype[i]=R[e][i])}))}));var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach((function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s||null===s)return;if(!(i in a)||!("enabled"in s))return;!0===a[i]&&(a[i]={enabled:!0}),"object"!=typeof a[i]||"enabled"in a[i]||(a[i].enabled=!0),a[i]||(a[i]={enabled:!1})}}));var p=d.extend({},W);l.useModulesParams(p),l.params=d.extend({},p,q,a),l.originalParams=d.extend({},l.params),l.passedParams=d.extend({},a),l.$=n;var c=n(l.params.el);if(s=c[0]){if(c.length>1){var u=[];return c.each((function(e,i){var s=d.extend({},a,{el:i});u.push(new t(s))})),u}var v,f,m;return s.swiper=l,c.data("swiper",l),s&&s.shadowRoot&&s.shadowRoot.querySelector?(v=n(s.shadowRoot.querySelector("."+l.params.wrapperClass))).children=function(e){return c.children(e)}:v=c.children("."+l.params.wrapperClass),d.extend(l,{$el:c,el:s,$wrapperEl:v,wrapperEl:v[0],classNames:[],slides:n(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},rtl:"rtl"===s.dir.toLowerCase()||"rtl"===c.css("direction"),rtlTranslate:"horizontal"===l.params.direction&&("rtl"===s.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===v.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(f=["touchstart","touchmove","touchend","touchcancel"],m=["mousedown","mousemove","mouseup"],h.pointerEvents&&(m=["pointerdown","pointermove","pointerup"]),l.touchEventsTouch={start:f[0],move:f[1],end:f[2],cancel:f[3]},l.touchEventsDesktop={start:m[0],move:m[1],end:m[2]},h.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video, label",lastClickTime:d.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(r+=1,(o+=t[l].swiperSlideSize)>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(r+=1,(o+=t[d].swiperSlideSize)>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;if(e&&!e.destroyed){var t=e.snapGrid,i=e.params;i.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(s(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||s(),i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}function s(){var t=e.rtlTranslate?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.changeDirection=function(e,t){void 0===t&&(t=!0);var i=this.params.direction;return e||(e="horizontal"===i?"vertical":"horizontal"),e===i||"horizontal"!==e&&"vertical"!==e||(this.$el.removeClass(""+this.params.containerModifierClass+i).addClass(""+this.params.containerModifierClass+e),this.params.direction=e,this.slides.each((function(t,i){"vertical"===e?i.style.width="":i.style.height=""})),this.emit("changeDirection"),t&&this.update()),this},t.prototype.init=function(){this.initialized||(this.emit("beforeInit"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit("init"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;return void 0===i.params||i.destroyed||(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach((function(e){i.off(e)})),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),d.deleteProps(i)),i.destroyed=!0),null},t.extendDefaults=function(e){d.extend(q,e)},i.extendedDefaults.get=function(){return q},i.defaults.get=function(){return W},i.Class.get=function(){return e},i.$.get=function(){return n},Object.defineProperties(t,i),t}(p),K={name:"device",proto:{device:A},static:{device:A}},U={name:"support",proto:{support:h},static:{support:h}},_={isEdge:!!a.navigator.userAgent.match(/Edge/g),isSafari:function(){var e=a.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(a.navigator.userAgent)},Z={name:"browser",proto:{browser:_},static:{browser:_}},Q={name:"resize",create:function(){var e=this;d.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){a.addEventListener("resize",this.resize.resizeHandler),a.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){a.removeEventListener("resize",this.resize.resizeHandler),a.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},J={func:a.MutationObserver||a.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,s=new(0,J.func)((function(e){if(1!==e.length){var t=function(){i.emit("observerUpdate",e[0])};a.requestAnimationFrame?a.requestAnimationFrame(t):a.setTimeout(t,0)}else i.emit("observerUpdate",e[0])}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(s)},init:function(){if(h.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:this.params.observeSlideChildren}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach((function(e){e.disconnect()})),this.observer.observers=[]}},ee={name:"observer",params:{observer:!1,observeParents:!1,observeSlideChildren:!1},create:function(){d.extend(this,{observer:{init:J.init.bind(this),attach:J.attach.bind(this),destroy:J.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},te={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.params.virtual,o=n.addSlidesBefore,l=n.addSlidesAfter,h=t.virtual,p=h.from,c=h.to,u=h.slides,v=h.slidesGrid,f=h.renderSlide,m=h.offset;t.updateActiveIndex();var g,b,w,y=t.activeIndex||0;g=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",r?(b=Math.floor(s/2)+a+o,w=Math.floor(s/2)+a+l):(b=s+(a-1)+o,w=a+l);var x=Math.max((y||0)-w,0),E=Math.min((y||0)+b,u.length-1),T=(t.slidesGrid[x]||0)-(t.slidesGrid[0]||0);function S(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(d.extend(t.virtual,{from:x,to:E,offset:T,slidesGrid:t.slidesGrid}),p===x&&c===E&&!e)return t.slidesGrid!==v&&T!==m&&t.slides.css(g,T+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:T,from:x,to:E,slides:function(){for(var e=[],t=x;t<=E;t+=1)e.push(u[t]);return e}()}),void S();var C=[],M=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var P=p;P<=c;P+=1)(P<x||P>E)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+P+'"]').remove();for(var z=0;z<u.length;z+=1)z>=x&&z<=E&&(void 0===c||e?M.push(z):(z>c&&M.push(z),z<p&&C.push(z)));M.forEach((function(e){t.$wrapperEl.append(f(u[e],e))})),C.sort((function(e,t){return t-e})).forEach((function(e){t.$wrapperEl.prepend(f(u[e],e))})),t.$wrapperEl.children(".swiper-slide").css(g,T+"px"),S()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var s=i.renderSlide?n(i.renderSlide.call(this,e,t)):n('<div class="'+this.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=s),s},appendSlide:function(e){if("object"==typeof e&&"length"in e)for(var t=0;t<e.length;t+=1)e[t]&&this.virtual.slides.push(e[t]);else this.virtual.slides.push(e);this.virtual.update(!0)},prependSlide:function(e){var t=this.activeIndex,i=t+1,s=1;if(Array.isArray(e)){for(var a=0;a<e.length;a+=1)e[a]&&this.virtual.slides.unshift(e[a]);i=t+e.length,s=e.length}else this.virtual.slides.unshift(e);if(this.params.virtual.cache){var r=this.virtual.cache,n={};Object.keys(r).forEach((function(e){var t=r[e],i=t.attr("data-swiper-slide-index");i&&t.attr("data-swiper-slide-index",parseInt(i,10)+1),n[parseInt(e,10)+s]=t})),this.virtual.cache=n}this.virtual.update(!0),this.slideTo(i,0)},removeSlide:function(e){if(null!=e){var t=this.activeIndex;if(Array.isArray(e))for(var i=e.length-1;i>=0;i-=1)this.virtual.slides.splice(e[i],1),this.params.virtual.cache&&delete this.virtual.cache[e[i]],e[i]<t&&(t-=1),t=Math.max(t,0);else this.virtual.slides.splice(e,1),this.params.virtual.cache&&delete this.virtual.cache[e],e<t&&(t-=1),t=Math.max(t,0);this.virtual.update(!0),this.slideTo(t,0)}},removeAllSlides:function(){this.virtual.slides=[],this.params.virtual.cache&&(this.virtual.cache={}),this.virtual.update(!0),this.slideTo(0,0)}},ie={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,addSlidesBefore:0,addSlidesAfter:0}},create:function(){d.extend(this,{virtual:{update:te.update.bind(this),appendSlide:te.appendSlide.bind(this),prependSlide:te.prependSlide.bind(this),removeSlide:te.removeSlide.bind(this),removeAllSlides:te.removeAllSlides.bind(this),renderSlide:te.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+"virtual");var e={watchSlidesProgress:!0};d.extend(this.params,e),d.extend(this.originalParams,e),this.params.initialSlide||this.virtual.update()}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},se={handle:function(e){var t=this.rtlTranslate,s=e;s.originalEvent&&(s=s.originalEvent);var r=s.keyCode||s.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===r||this.isVertical()&&40===r||34===r))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===r||this.isVertical()&&38===r||33===r))return!1;if(!(s.shiftKey||s.altKey||s.ctrlKey||s.metaKey||i.activeElement&&i.activeElement.nodeName&&("input"===i.activeElement.nodeName.toLowerCase()||"textarea"===i.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(33===r||34===r||37===r||39===r||38===r||40===r)){var n=!1;if(this.$el.parents("."+this.params.slideClass).length>0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var o=a.innerWidth,l=a.innerHeight,d=this.$el.offset();t&&(d.left-=this.$el[0].scrollLeft);for(var h=[[d.left,d.top],[d.left+this.width,d.top],[d.left,d.top+this.height],[d.left+this.width,d.top+this.height]],p=0;p<h.length;p+=1){var c=h[p];c[0]>=0&&c[0]<=o&&c[1]>=0&&c[1]<=l&&(n=!0)}if(!n)return}this.isHorizontal()?(33!==r&&34!==r&&37!==r&&39!==r||(s.preventDefault?s.preventDefault():s.returnValue=!1),(34!==r&&39!==r||t)&&(33!==r&&37!==r||!t)||this.slideNext(),(33!==r&&37!==r||t)&&(34!==r&&39!==r||!t)||this.slidePrev()):(33!==r&&34!==r&&38!==r&&40!==r||(s.preventDefault?s.preventDefault():s.returnValue=!1),34!==r&&40!==r||this.slideNext(),33!==r&&38!==r||this.slidePrev()),this.emit("keyPress",r)}},enable:function(){this.keyboard.enabled||(n(i).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(n(i).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},ae={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){d.extend(this,{keyboard:{enabled:!1,enable:se.enable.bind(this),disable:se.disable.bind(this),handle:se.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var re={lastScrollTime:d.now(),lastEventBeforeSnap:void 0,recentWheelEvents:[],event:function(){return a.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var e="onwheel"in i;if(!e){var t=i.createElement("div");t.setAttribute("onwheel","return;"),e="function"==typeof t.onwheel}return!e&&i.implementation&&i.implementation.hasFeature&&!0!==i.implementation.hasFeature("","")&&(e=i.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"},normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),e.shiftKey&&!s&&(s=a,a=0),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var t=e,i=this,s=i.params.mousewheel;i.params.cssMode&&t.preventDefault();var a=i.$el;if("container"!==i.params.mousewheel.eventsTarged&&(a=n(i.params.mousewheel.eventsTarged)),!i.mouseEntered&&!a[0].contains(t.target)&&!s.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);var r=0,o=i.rtlTranslate?-1:1,l=re.normalize(t);if(s.forceToAxis)if(i.isHorizontal()){if(!(Math.abs(l.pixelX)>Math.abs(l.pixelY)))return!0;r=l.pixelX*o}else{if(!(Math.abs(l.pixelY)>Math.abs(l.pixelX)))return!0;r=l.pixelY}else r=Math.abs(l.pixelX)>Math.abs(l.pixelY)?-l.pixelX*o:-l.pixelY;if(0===r)return!0;if(s.invert&&(r=-r),i.params.freeMode){var h={time:d.now(),delta:Math.abs(r),direction:Math.sign(r)},p=i.mousewheel.lastEventBeforeSnap,c=p&&h.time<p.time+500&&h.delta<=p.delta&&h.direction===p.direction;if(!c){i.mousewheel.lastEventBeforeSnap=void 0,i.params.loop&&i.loopFix();var u=i.getTranslate()+r*s.sensitivity,v=i.isBeginning,f=i.isEnd;if(u>=i.minTranslate()&&(u=i.minTranslate()),u<=i.maxTranslate()&&(u=i.maxTranslate()),i.setTransition(0),i.setTranslate(u),i.updateProgress(),i.updateActiveIndex(),i.updateSlidesClasses(),(!v&&i.isBeginning||!f&&i.isEnd)&&i.updateSlidesClasses(),i.params.freeModeSticky){clearTimeout(i.mousewheel.timeout),i.mousewheel.timeout=void 0;var m=i.mousewheel.recentWheelEvents;m.length>=15&&m.shift();var g=m.length?m[m.length-1]:void 0,b=m[0];if(m.push(h),g&&(h.delta>g.delta||h.direction!==g.direction))m.splice(0);else if(m.length>=15&&h.time-b.time<500&&b.delta-h.delta>=1&&h.delta<=6){var w=r>0?.8:.2;i.mousewheel.lastEventBeforeSnap=h,m.splice(0),i.mousewheel.timeout=d.nextTick((function(){i.slideToClosest(i.params.speed,!0,void 0,w)}),0)}i.mousewheel.timeout||(i.mousewheel.timeout=d.nextTick((function(){i.mousewheel.lastEventBeforeSnap=h,m.splice(0),i.slideToClosest(i.params.speed,!0,void 0,.5)}),500))}if(c||i.emit("scroll",t),i.params.autoplay&&i.params.autoplayDisableOnInteraction&&i.autoplay.stop(),u===i.minTranslate()||u===i.maxTranslate())return!0}}else{var y={time:d.now(),delta:Math.abs(r),direction:Math.sign(r),raw:e},x=i.mousewheel.recentWheelEvents;x.length>=2&&x.shift();var E=x.length?x[x.length-1]:void 0;if(x.push(y),E?(y.direction!==E.direction||y.delta>E.delta||y.time>E.time+150)&&i.mousewheel.animateSlider(y):i.mousewheel.animateSlider(y),i.mousewheel.releaseScroll(y))return!0}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1},animateSlider:function(e){return e.delta>=6&&d.now()-this.mousewheel.lastScrollTime<60||(e.direction<0?this.isEnd&&!this.params.loop||this.animating||(this.slideNext(),this.emit("scroll",e.raw)):this.isBeginning&&!this.params.loop||this.animating||(this.slidePrev(),this.emit("scroll",e.raw)),this.mousewheel.lastScrollTime=(new a.Date).getTime(),!1)},releaseScroll:function(e){var t=this.params.mousewheel;if(e.direction<0){if(this.isEnd&&!this.params.loop&&t.releaseOnEdges)return!0}else if(this.isBeginning&&!this.params.loop&&t.releaseOnEdges)return!0;return!1},enable:function(){var e=re.event();if(this.params.cssMode)return this.wrapperEl.removeEventListener(e,this.mousewheel.handle),!0;if(!e)return!1;if(this.mousewheel.enabled)return!1;var t=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(t=n(this.params.mousewheel.eventsTarged)),t.on("mouseenter",this.mousewheel.handleMouseEnter),t.on("mouseleave",this.mousewheel.handleMouseLeave),t.on(e,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){var e=re.event();if(this.params.cssMode)return this.wrapperEl.addEventListener(e,this.mousewheel.handle),!0;if(!e)return!1;if(!this.mousewheel.enabled)return!1;var t=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(t=n(this.params.mousewheel.eventsTarged)),t.off(e,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},ne={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>0&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},onPrevClick:function(e){e.preventDefault(),this.isBeginning&&!this.params.loop||this.slidePrev()},onNextClick:function(e){e.preventDefault(),this.isEnd&&!this.params.loop||this.slideNext()},init:function(){var e,t,i=this.params.navigation;(i.nextEl||i.prevEl)&&(i.nextEl&&(e=n(i.nextEl),this.params.uniqueNavElements&&"string"==typeof i.nextEl&&e.length>1&&1===this.$el.find(i.nextEl).length&&(e=this.$el.find(i.nextEl))),i.prevEl&&(t=n(i.prevEl),this.params.uniqueNavElements&&"string"==typeof i.prevEl&&t.length>1&&1===this.$el.find(i.prevEl).length&&(t=this.$el.find(i.prevEl))),e&&e.length>0&&e.on("click",this.navigation.onNextClick),t&&t.length>0&&t.on("click",this.navigation.onPrevClick),d.extend(this.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click",this.navigation.onNextClick),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click",this.navigation.onPrevClick),i.removeClass(this.params.navigation.disabledClass))}},oe={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,s=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,a=this.pagination.$el,r=this.params.loop?Math.ceil((s-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>s-1-2*this.loopedSlides&&(i-=s-2*this.loopedSlides),i>r-1&&(i-=r),i<0&&"bullets"!==this.params.paginationType&&(i=r+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),a.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(this.pagination.dynamicBulletIndex+=i-this.previousIndex,this.pagination.dynamicBulletIndex>t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex=t.dynamicMainBullets-1:this.pagination.dynamicBulletIndex<0&&(this.pagination.dynamicBulletIndex=0)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(Math.min(h.length,t.dynamicMainBullets)-1))+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),a.length>1)h.each((function(e,s){var a=n(s),r=a.index();r===i&&a.addClass(t.bulletActiveClass),t.dynamicBullets&&(r>=o&&r<=l&&a.addClass(t.bulletActiveClass+"-main"),r===o&&a.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),r===l&&a.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))}));else{var p=h.eq(i),c=p.index();if(p.addClass(t.bulletActiveClass),t.dynamicBullets){for(var u=h.eq(o),v=h.eq(l),f=o;f<=l;f+=1)h.eq(f).addClass(t.bulletActiveClass+"-main");if(this.params.loop)if(c>=h.length-t.dynamicMainBullets){for(var m=t.dynamicMainBullets;m>=0;m-=1)h.eq(h.length-m).addClass(t.bulletActiveClass+"-main");h.eq(h.length-t.dynamicMainBullets-1).addClass(t.bulletActiveClass+"-prev")}else u.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),v.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next");else u.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),v.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}}if(t.dynamicBullets){var g=Math.min(h.length,t.dynamicMainBullets+4),b=(this.pagination.bulletSize*g-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,w=e?"right":"left";h.css(this.isHorizontal()?w:"top",b+"px")}}if("fraction"===t.type&&(a.find("."+t.currentClass).text(t.formatFractionCurrent(i+1)),a.find("."+t.totalClass).text(t.formatFractionTotal(r))),"progressbar"===t.type){var y;y=t.progressbarOpposite?this.isHorizontal()?"vertical":"horizontal":this.isHorizontal()?"horizontal":"vertical";var x=(i+1)/r,E=1,T=1;"horizontal"===y?E=x:T=x,a.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+E+") scaleY("+T+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(a.html(t.renderCustom(this,i+1,r)),this.emit("paginationRender",this,a[0])):this.emit("paginationUpdate",this,a[0]),a[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+="<"+e.bulletElement+' class="'+e.bulletClass+'"></'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class="'+e.currentClass+'"></span> / <span class="'+e.totalClass+'"></span>',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class="'+e.progressbarFillClass+'"></span>',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=n(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&i.addClass(t.progressbarOppositeClass),t.clickable&&i.on("click","."+t.bulletClass,(function(t){t.preventDefault();var i=n(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)})),d.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},le={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtlTranslate,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>a&&(l=a-d),this.isHorizontal()?(r.transform("translate3d("+d+"px, 0, 0)"),r[0].style.width=l+"px"):(r.transform("translate3d(0px, "+d+"px, 0)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout((function(){n[0].style.opacity=0,n.transition(400)}),1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbar.hide&&(i[0].style.opacity=0),d.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},getPointerPosition:function(e){return this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY},setDragPosition:function(e){var t,i=this.scrollbar,s=this.rtlTranslate,a=i.$el,r=i.dragSize,n=i.trackSize,o=i.dragStartPos;t=(i.getPointerPosition(e)-a.offset()[this.isHorizontal()?"left":"top"]-(null!==o?o:r/2))/(n-r),t=Math.max(Math.min(t,1),0),s&&(t=1-t);var l=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(l),this.setTranslate(l),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,this.scrollbar.dragStartPos=e.target===r[0]||e.target===r?i.getPointerPosition(e)-e.target.getBoundingClientRect()[this.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.params.cssMode&&this.$wrapperEl.css("scroll-snap-type","none"),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,this.params.cssMode&&(this.$wrapperEl.css("scroll-snap-type",""),s.transition("")),t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=d.nextTick((function(){a.css("opacity",0),a.transition(400)}),1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideToClosest())},enableDraggable:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=e.$el[0],n=!(!h.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};h.touch?(r.addEventListener(t.start,this.scrollbar.onDragStart,n),r.addEventListener(t.move,this.scrollbar.onDragMove,n),r.addEventListener(t.end,this.scrollbar.onDragEnd,o)):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),i.addEventListener(s.move,this.scrollbar.onDragMove,n),i.addEventListener(s.end,this.scrollbar.onDragEnd,o))}},disableDraggable:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=e.$el[0],n=!(!h.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};h.touch?(r.removeEventListener(t.start,this.scrollbar.onDragStart,n),r.removeEventListener(t.move,this.scrollbar.onDragMove,n),r.removeEventListener(t.end,this.scrollbar.onDragEnd,o)):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),i.removeEventListener(s.move,this.scrollbar.onDragMove,n),i.removeEventListener(s.end,this.scrollbar.onDragEnd,o))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,s=n(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&s.length>1&&1===t.find(i.el).length&&(s=t.find(i.el));var a=s.find("."+this.params.scrollbar.dragClass);0===a.length&&(a=n('<div class="'+this.params.scrollbar.dragClass+'"></div>'),s.append(a)),d.extend(e,{$el:s,el:s[0],$dragEl:a,dragEl:a[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},de={setTransform:function(e,t){var i=this.rtl,s=n(e),a=i?-1:1,r=s.attr("data-swiper-parallax")||"0",o=s.attr("data-swiper-parallax-x"),l=s.attr("data-swiper-parallax-y"),d=s.attr("data-swiper-parallax-scale"),h=s.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=r,l="0"):(l=r,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*a+"%":o*t*a+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",null!=h){var p=h-(h-1)*(1-Math.abs(t));s[0].style.opacity=p}if(null==d)s.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));s.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,s=e.progress,a=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){e.parallax.setTransform(i,s)})),i.each((function(t,i){var r=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(r+=Math.ceil(t/2)-s*(a.length-1)),r=Math.min(Math.max(r,-1),1),n(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){e.parallax.setTransform(i,r)}))}))},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t,i){var s=n(i),a=parseInt(s.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),s.transition(a)}))}},he={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!h.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,s.scaleStart=he.getDistanceBetweenTouches(e)}s.$slideEl&&s.$slideEl.length||(s.$slideEl=n(e.target).closest("."+this.params.slideClass),0===s.$slideEl.length&&(s.$slideEl=this.slides.eq(this.activeIndex)),s.$imageEl=s.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),s.$imageWrapEl=s.$imageEl.parent("."+t.containerClass),s.maxRatio=s.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==s.$imageWrapEl.length)?(s.$imageEl&&s.$imageEl.transition(0),this.zoom.isScaling=!0):s.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=he.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=h.gestures?e.scale*i.currentScale:s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform("translate3d(0,0,0) scale("+i.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!A.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+i.scale+")"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(A.android&&e.cancelable&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=d.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=d.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX,s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl&&t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl&&t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,s,a,r,n,o,l,d,h,p,c,u,v,f,m,g=this.zoom,b=this.params.zoom,w=g.gesture,y=g.image;(w.$slideEl||(this.params.virtual&&this.params.virtual.enabled&&this.virtual?w.$slideEl=this.$wrapperEl.children("."+this.params.slideActiveClass):w.$slideEl=this.slides.eq(this.activeIndex),w.$imageEl=w.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),w.$imageWrapEl=w.$imageEl.parent("."+b.containerClass)),w.$imageEl&&0!==w.$imageEl.length)&&(w.$slideEl.addClass(""+b.zoomedSlideClass),void 0===y.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=y.touchesStart.x,i=y.touchesStart.y),g.scale=w.$imageWrapEl.attr("data-swiper-zoom")||b.maxRatio,g.currentScale=w.$imageWrapEl.attr("data-swiper-zoom")||b.maxRatio,e?(f=w.$slideEl[0].offsetWidth,m=w.$slideEl[0].offsetHeight,s=w.$slideEl.offset().left+f/2-t,a=w.$slideEl.offset().top+m/2-i,o=w.$imageEl[0].offsetWidth,l=w.$imageEl[0].offsetHeight,d=o*g.scale,h=l*g.scale,u=-(p=Math.min(f/2-d/2,0)),v=-(c=Math.min(m/2-h/2,0)),(r=s*g.scale)<p&&(r=p),r>u&&(r=u),(n=a*g.scale)<c&&(n=c),n>v&&(n=v)):(r=0,n=0),w.$imageWrapEl.transition(300).transform("translate3d("+r+"px, "+n+"px,0)"),w.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+g.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(this.params.virtual&&this.params.virtual.enabled&&this.virtual?i.$slideEl=this.$wrapperEl.children("."+this.params.slideActiveClass):i.$slideEl=this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1},i=!h.passiveListener||{passive:!1,capture:!0},s="."+this.params.slideClass;h.gestures?(this.$wrapperEl.on("gesturestart",s,e.onGestureStart,t),this.$wrapperEl.on("gesturechange",s,e.onGestureChange,t),this.$wrapperEl.on("gestureend",s,e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,s,e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,s,e.onGestureChange,i),this.$wrapperEl.on(this.touchEvents.end,s,e.onGestureEnd,t),this.touchEvents.cancel&&this.$wrapperEl.on(this.touchEvents.cancel,s,e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove,i)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1},i=!h.passiveListener||{passive:!1,capture:!0},s="."+this.params.slideClass;h.gestures?(this.$wrapperEl.off("gesturestart",s,e.onGestureStart,t),this.$wrapperEl.off("gesturechange",s,e.onGestureChange,t),this.$wrapperEl.off("gestureend",s,e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,s,e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,s,e.onGestureChange,i),this.$wrapperEl.off(this.touchEvents.end,s,e.onGestureEnd,t),this.touchEvents.cancel&&this.$wrapperEl.off(this.touchEvents.cancel,s,e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove,i)}}},pe={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,s=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var a=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),r=a.find("."+s.elementClass+":not(."+s.loadedClass+"):not(."+s.loadingClass+")");!a.hasClass(s.elementClass)||a.hasClass(s.loadedClass)||a.hasClass(s.loadingClass)||(r=r.add(a[0])),0!==r.length&&r.each((function(e,r){var o=n(r);o.addClass(s.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes"),c=o.parent("picture");i.loadImage(o[0],d||l,h,p,!1,(function(){if(null!=i&&i&&(!i||i.params)&&!i.destroyed){if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),c.length&&c.children("source").each((function(e,t){var i=n(t);i.attr("data-srcset")&&(i.attr("srcset",i.attr("data-srcset")),i.removeAttr("data-srcset"))})),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(s.loadedClass).removeClass(s.loadingClass),a.find("."+s.preloaderClass).remove(),i.params.loop&&t){var e=a.attr("data-swiper-slide-index");if(a.hasClass(i.params.slideDuplicateClass)){var r=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(r.index(),!1)}else{var u=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(u.index(),!1)}}i.emit("lazyImageReady",a[0],o[0]),i.params.autoHeight&&i.updateAutoHeight()}})),i.emit("lazyImageLoad",a[0],o[0])}))}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,s=e.slides,a=e.activeIndex,r=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(r){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(s[e])return!0;return!1}function h(e){return r?n(e).attr("data-swiper-slide-index"):n(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each((function(t,i){var s=r?n(i).attr("data-swiper-slide-index"):n(i).index();e.lazy.loadInSlide(s)}));else if(l>1)for(var p=a;p<a+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(a);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(a+u+Math.max(c,u),s.length),f=Math.max(a-Math.max(u,c),0),m=a+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<a;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children("."+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},ce={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new ce.LinearSpline(this.slidesGrid,e.slidesGrid):new ce.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=a.rtlTranslate?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof j&&n(r[o]);else r instanceof j&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.params.autoHeight&&d.nextTick((function(){t.updateAutoHeight()})),t.$wrapperEl.transitionEnd((function(){a&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())})))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof j&&r(a[i]);else a instanceof j&&t!==a&&r(a)}},ue={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},makeElNotFocusable:function(e){return e.attr("tabIndex","-1"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=n(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeginning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is("."+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){if(!this.params.loop&&this.navigation){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?(this.a11y.disableEl(i),this.a11y.makeElNotFocusable(i)):(this.a11y.enableEl(i),this.a11y.makeElFocusable(i))),t&&t.length>0&&(this.isEnd?(this.a11y.disableEl(t),this.a11y.makeElNotFocusable(t)):(this.a11y.enableEl(t),this.a11y.makeElFocusable(t)))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each((function(i,s){var a=n(s);e.a11y.makeElFocusable(a),e.a11y.addElRole(a,"button"),e.a11y.addElLabel(a,t.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1))}))},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},ve={init:function(){if(this.params.history){if(!a.history||!a.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=ve.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||a.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||a.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=ve.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=a.location.pathname.slice(1).split("/").filter((function(e){return""!==e})),t=e.length;return{key:e[t-2],value:e[t-1]}},setHistory:function(e,t){if(this.history.initialized&&this.params.history.enabled){var i=this.slides.eq(t),s=ve.slugify(i.attr("data-history"));a.location.pathname.includes(e)||(s=e+"/"+s);var r=a.history.state;r&&r.value===s||(this.params.history.replaceState?a.history.replaceState({value:s},null,s):a.history.pushState({value:s},null,s))}},slugify:function(e){return e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s);if(ve.slugify(r.attr("data-history"))===t&&!r.hasClass(this.params.slideDuplicateClass)){var n=r.index();this.slideTo(n,e,i)}}else this.slideTo(0,e,i)}},fe={onHashCange:function(){this.emit("hashChange");var e=i.location.hash.replace("#","");if(e!==this.slides.eq(this.activeIndex).attr("data-hash")){var t=this.$wrapperEl.children("."+this.params.slideClass+'[data-hash="'+e+'"]').index();if(void 0===t)return;this.slideTo(t)}},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&a.history&&a.history.replaceState)a.history.replaceState(null,null,"#"+this.slides.eq(this.activeIndex).attr("data-hash")||""),this.emit("hashSet");else{var e=this.slides.eq(this.activeIndex),t=e.attr("data-hash")||e.attr("data-history");i.location.hash=t||"",this.emit("hashSet")}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var e=i.location.hash.replace("#","");if(e)for(var t=0,s=this.slides.length;t<s;t+=1){var r=this.slides.eq(t);if((r.attr("data-hash")||r.attr("data-history"))===e&&!r.hasClass(this.params.slideDuplicateClass)){var o=r.index();this.slideTo(o,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&n(a).on("hashchange",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&n(a).off("hashchange",this.hashNavigation.onHashCange)}},me={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(i=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(e.autoplay.timeout),e.autoplay.timeout=d.nextTick((function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")),e.params.cssMode&&e.autoplay.running&&e.autoplay.run()}),i)},start:function(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0))},stop:function(){return!!this.autoplay.running&&(void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit("autoplayStop"),!0))},pause:function(e){this.autoplay.running&&(this.autoplay.paused||(this.autoplay.timeout&&clearTimeout(this.autoplay.timeout),this.autoplay.paused=!0,0!==e&&this.params.autoplay.waitForTransition?(this.$wrapperEl[0].addEventListener("transitionend",this.autoplay.onTransitionEnd),this.$wrapperEl[0].addEventListener("webkitTransitionEnd",this.autoplay.onTransitionEnd)):(this.autoplay.paused=!1,this.autoplay.run())))}},ge={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=-i[0].swiperSlideOffset;this.params.virtualTranslate||(s-=this.translate);var a=0;this.isHorizontal()||(a=s,s=0);var r=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:r}).transform("translate3d("+s+"px, "+a+"px, 0px)")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd((function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)s.trigger(e[i])}}))}}},be={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,s=this.slides,a=this.width,r=this.height,o=this.rtlTranslate,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=n('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:a+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=n('<div class="swiper-cube-shadow"></div>'),t.append(e)));for(var u=0;u<s.length;u+=1){var v=s.eq(u),f=u;p&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var E="rotateX("+(h?0:-m)+"deg) rotateY("+(h?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(E),d.slideShadows){var T=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===T.length&&(T=n('<div class="swiper-slide-shadow-'+(h?"left":"top")+'"></div>'),v.append(T)),0===S.length&&(S=n('<div class="swiper-slide-shadow-'+(h?"right":"bottom")+'"></div>'),v.append(S)),T.length&&(T[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(a/2+d.shadowOffset)+"px, "+-a/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(c)-90*Math.floor(Math.abs(c)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),P=d.shadowScale,z=d.shadowScale/M,k=d.shadowOffset;e.transform("scale3d("+P+", 1, "+z+") translate3d(0px, "+(r/2+k)+"px, "+-r/2/z+"px) rotateX(-90deg)")}var $=_.isSafari||_.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},we={setTranslate:function(){for(var e=this.slides,t=this.rtlTranslate,i=0;i<e.length;i+=1){var s=e.eq(i),a=s[0].progress;this.params.flipEffect.limitRotation&&(a=Math.max(Math.min(s[0].progress,1),-1));var r=-180*a,o=0,l=-s[0].swiperSlideOffset,d=0;if(this.isHorizontal()?t&&(r=-r):(d=l,l=0,o=-r,r=0),s[0].style.zIndex=-Math.abs(Math.round(a))+e.length,this.params.flipEffect.slideShadows){var h=this.isHorizontal()?s.find(".swiper-slide-shadow-left"):s.find(".swiper-slide-shadow-top"),p=this.isHorizontal()?s.find(".swiper-slide-shadow-right"):s.find(".swiper-slide-shadow-bottom");0===h.length&&(h=n('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"left":"top")+'"></div>'),s.append(h)),0===p.length&&(p=n('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"right":"bottom")+'"></div>'),s.append(p)),h.length&&(h[0].style.opacity=Math.max(-a,0)),p.length&&(p[0].style.opacity=Math.max(a,0))}s.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+r+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd((function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)a.trigger(e[i])}}))}}},ye={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,s=this.$wrapperEl,a=this.slidesSizesGrid,r=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,d=o?e/2-l:t/2-l,p=o?r.rotate:-r.rotate,c=r.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=a[u],g=(d-f[0].swiperSlideOffset-m/2)/m*r.modifier,b=o?p*g:0,w=o?0:p*g,y=-c*Math.abs(g),x=r.stretch;"string"==typeof x&&-1!==x.indexOf("%")&&(x=parseFloat(r.stretch)/100*m);var E=o?0:x*g,T=o?x*g:0;Math.abs(T)<.001&&(T=0),Math.abs(E)<.001&&(E=0),Math.abs(y)<.001&&(y=0),Math.abs(b)<.001&&(b=0),Math.abs(w)<.001&&(w=0);var S="translate3d("+T+"px,"+E+"px,"+y+"px)  rotateX("+w+"deg) rotateY("+b+"deg)";if(f.transform(S),f[0].style.zIndex=1-Math.abs(Math.round(g)),r.slideShadows){var C=o?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),M=o?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===C.length&&(C=n('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),f.append(C)),0===M.length&&(M=n('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),f.append(M)),C.length&&(C[0].style.opacity=g>0?g:0),M.length&&(M[0].style.opacity=-g>0?-g:0)}}(h.pointerEvents||h.prefixedPointerEvents)&&(s[0].style.perspectiveOrigin=d+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},xe={init:function(){var e=this.params.thumbs,t=this.constructor;e.swiper instanceof t?(this.thumbs.swiper=e.swiper,d.extend(this.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),d.extend(this.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):d.isObject(e.swiper)&&(this.thumbs.swiper=new t(d.extend({},e.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),this.thumbs.swiperCreated=!0),this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass),this.thumbs.swiper.on("tap",this.thumbs.onThumbClick)},onThumbClick:function(){var e=this.thumbs.swiper;if(e){var t=e.clickedIndex,i=e.clickedSlide;if(!(i&&n(i).hasClass(this.params.thumbs.slideThumbActiveClass)||null==t)){var s;if(s=e.params.loop?parseInt(n(e.clickedSlide).attr("data-swiper-slide-index"),10):t,this.params.loop){var a=this.activeIndex;this.slides.eq(a).hasClass(this.params.slideDuplicateClass)&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,a=this.activeIndex);var r=this.slides.eq(a).prevAll('[data-swiper-slide-index="'+s+'"]').eq(0).index(),o=this.slides.eq(a).nextAll('[data-swiper-slide-index="'+s+'"]').eq(0).index();s=void 0===r?o:void 0===o?r:o-a<a-r?o:r}this.slideTo(s)}}},update:function(e){var t=this.thumbs.swiper;if(t){var i="auto"===t.params.slidesPerView?t.slidesPerViewDynamic():t.params.slidesPerView,s=this.params.thumbs.autoScrollOffset,a=s&&!t.params.loop;if(this.realIndex!==t.realIndex||a){var r,n,o=t.activeIndex;if(t.params.loop){t.slides.eq(o).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,o=t.activeIndex);var l=t.slides.eq(o).prevAll('[data-swiper-slide-index="'+this.realIndex+'"]').eq(0).index(),d=t.slides.eq(o).nextAll('[data-swiper-slide-index="'+this.realIndex+'"]').eq(0).index();r=void 0===l?d:void 0===d?l:d-o==o-l?o:d-o<o-l?d:l,n=this.activeIndex>this.previousIndex?"next":"prev"}else n=(r=this.realIndex)>this.previousIndex?"next":"prev";a&&(r+="next"===n?s:-1*s),t.visibleSlidesIndexes&&t.visibleSlidesIndexes.indexOf(r)<0&&(t.params.centeredSlides?r=r>o?r-Math.floor(i/2)+1:r+Math.floor(i/2)-1:r>o&&(r=r-i+1),t.slideTo(r,e?0:void 0))}var h=1,p=this.params.thumbs.slideThumbActiveClass;if(this.params.slidesPerView>1&&!this.params.centeredSlides&&(h=this.params.slidesPerView),this.params.thumbs.multipleActiveThumbs||(h=1),h=Math.floor(h),t.slides.removeClass(p),t.params.loop||t.params.virtual&&t.params.virtual.enabled)for(var c=0;c<h;c+=1)t.$wrapperEl.children('[data-swiper-slide-index="'+(this.realIndex+c)+'"]').addClass(p);else for(var u=0;u<h;u+=1)t.slides.eq(this.realIndex+u).addClass(p)}}},Ee=[K,U,Z,Q,ee,ie,ae,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){d.extend(this,{mousewheel:{enabled:!1,enable:re.enable.bind(this),disable:re.disable.bind(this),handle:re.handle.bind(this),handleMouseEnter:re.handleMouseEnter.bind(this),handleMouseLeave:re.handleMouseLeave.bind(this),animateSlider:re.animateSlider.bind(this),releaseScroll:re.releaseScroll.bind(this),lastScrollTime:d.now(),lastEventBeforeSnap:void 0,recentWheelEvents:[]}})},on:{init:function(){!this.params.mousewheel.enabled&&this.params.cssMode&&this.mousewheel.disable(),this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.params.cssMode&&this.mousewheel.enable(),this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){d.extend(this,{navigation:{init:ne.init.bind(this),update:ne.update.bind(this),destroy:ne.destroy.bind(this),onNextClick:ne.onNextClick.bind(this),onPrevClick:ne.onPrevClick.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t,i=this.navigation,s=i.$nextEl,a=i.$prevEl;!this.params.navigation.hideOnClick||n(e.target).is(a)||n(e.target).is(s)||(s?t=s.hasClass(this.params.navigation.hiddenClass):a&&(t=a.hasClass(this.params.navigation.hiddenClass)),!0===t?this.emit("navigationShow",this):this.emit("navigationHide",this),s&&s.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){d.extend(this,{pagination:{init:oe.init.bind(this),render:oe.render.bind(this),update:oe.update.bind(this),destroy:oe.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){(this.params.loop||void 0===this.snapIndex)&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!n(e.target).hasClass(this.params.pagination.bulletClass)&&(!0===this.pagination.$el.hasClass(this.params.pagination.hiddenClass)?this.emit("paginationShow",this):this.emit("paginationHide",this),this.pagination.$el.toggleClass(this.params.pagination.hiddenClass))}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){d.extend(this,{scrollbar:{init:le.init.bind(this),destroy:le.destroy.bind(this),updateSize:le.updateSize.bind(this),setTranslate:le.setTranslate.bind(this),setTransition:le.setTransition.bind(this),enableDraggable:le.enableDraggable.bind(this),disableDraggable:le.disableDraggable.bind(this),setDragPosition:le.setDragPosition.bind(this),getPointerPosition:le.getPointerPosition.bind(this),onDragStart:le.onDragStart.bind(this),onDragMove:le.onDragMove.bind(this),onDragEnd:le.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){d.extend(this,{parallax:{setTransform:de.setTransform.bind(this),setTranslate:de.setTranslate.bind(this),setTransition:de.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},init:function(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax.enabled&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax.enabled&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach((function(i){t[i]=he[i].bind(e)})),d.extend(e,{zoom:t});var i=1;Object.defineProperty(e.zoom,"scale",{get:function(){return i},set:function(t){if(i!==t){var s=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,a=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,s,a)}i=t}})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()},slideChange:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.params.cssMode&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){d.extend(this,{lazy:{initialImageLoaded:!1,load:pe.load.bind(this),loadInSlide:pe.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()},slideChange:function(){this.params.lazy.enabled&&this.params.cssMode&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){d.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:ce.getInterpolateFunction.bind(this),setTranslate:ce.setTranslate.bind(this),setTransition:ce.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;d.extend(e,{a11y:{liveRegion:n('<span class="'+e.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}),Object.keys(ue).forEach((function(t){e.a11y[t]=ue[t].bind(e)}))},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){d.extend(this,{history:{init:ve.init.bind(this),setHistory:ve.setHistory.bind(this),setHistoryPopState:ve.setHistoryPopState.bind(this),scrollToSlide:ve.scrollToSlide.bind(this),destroy:ve.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)},slideChange:function(){this.history.initialized&&this.params.cssMode&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){d.extend(this,{hashNavigation:{initialized:!1,init:fe.init.bind(this),destroy:fe.destroy.bind(this),setHash:fe.setHash.bind(this),onHashCange:fe.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()},slideChange:function(){this.hashNavigation.initialized&&this.params.cssMode&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var e=this;d.extend(e,{autoplay:{running:!1,paused:!1,run:me.run.bind(e),start:me.start.bind(e),stop:me.stop.bind(e),pause:me.pause.bind(e),onVisibilityChange:function(){"hidden"===document.visibilityState&&e.autoplay.running&&e.autoplay.pause(),"visible"===document.visibilityState&&e.autoplay.paused&&(e.autoplay.run(),e.autoplay.paused=!1)},onTransitionEnd:function(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===this&&(e.$wrapperEl[0].removeEventListener("transitionend",e.autoplay.onTransitionEnd),e.$wrapperEl[0].removeEventListener("webkitTransitionEnd",e.autoplay.onTransitionEnd),e.autoplay.paused=!1,e.autoplay.running?e.autoplay.run():e.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&(this.autoplay.start(),document.addEventListener("visibilitychange",this.autoplay.onVisibilityChange))},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},touchEnd:function(){this.params.cssMode&&this.autoplay.paused&&!this.params.autoplay.disableOnInteraction&&this.autoplay.run()},destroy:function(){this.autoplay.running&&this.autoplay.stop(),document.removeEventListener("visibilitychange",this.autoplay.onVisibilityChange)}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){d.extend(this,{fadeEffect:{setTranslate:ge.setTranslate.bind(this),setTransition:ge.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){d.extend(this,{cubeEffect:{setTranslate:be.setTranslate.bind(this),setTransition:be.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){d.extend(this,{flipEffect:{setTranslate:we.setTranslate.bind(this),setTransition:we.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){d.extend(this,{coverflowEffect:{setTranslate:ye.setTranslate.bind(this),setTransition:ye.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){d.extend(this,{thumbs:{swiper:null,init:xe.init.bind(this),update:xe.update.bind(this),onThumbClick:xe.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===j.use&&(j.use=j.Class.use,j.installModule=j.Class.installModule),j.use(Ee),j}));
14
+//# sourceMappingURL=swiper.min.js.map
0 15
\ No newline at end of file
1 16
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+{"version":3,"sources":["0"],"names":["global","factory","exports","module","define","amd","self","Swiper","this","isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","doc","document","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","win","window","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","Dom7","arr","i","$","selector","context","els","tempParent","html","trim","indexOf","toCreate","innerHTML","push","match","split","nodeType","unique","uniqueArray","fn","prototype","Class","Methods","addClass","className","classes","j","classList","add","removeClass","remove","hasClass","contains","toggleClass","toggle","attr","attrs","value","arguments$1","arguments","getAttribute","attrName","removeAttr","removeAttribute","data","el","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","transition","duration","webkitTransitionDuration","transitionDuration","on","assign","args","len","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","undefined","events","event$1","dom7LiveListeners","proxyListener","event","dom7Listeners","off","handlers","handler","dom7proxy","splice","trigger","evt","detail","bubbles","cancelable","filter","dataIndex","dispatchEvent","transitionEnd","callback","dom","fireCallBack","call","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","index","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","matchedItems","removeChild","toAdd","methodName","Utils","deleteProps","object","nextTick","delay","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","map","a","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","parseUrlQuery","url","params","param","query","urlToParse","paramsPart","decodeURIComponent","o","len$1","to","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","touch","DocumentTouch","pointerEvents","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","opts","defineProperty","get","gestures","SwiperClass","eventsListeners","eventName","staticAccessors","components","configurable","priority","method","once","onceHandler","f7proxy","eventHandler","emit","Array","isArray","slice","eventsArray","useModulesParams","instanceParams","instance","modules","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","bind","moduleEventName","create","set","use","installModule","name","proto","static","install","m","concat","defineProperties","update","updateSize","width","height","$el","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","size","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","Math","floor","ceil","slidesPerView","slidesPerColumnFill","max","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","min","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","boxSizing$1","swiperSlideSize","centeredSlides","abs","slidesPerGroupSkip","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesSize$1","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","progress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","swiper","animating","preventInteractionOnTransition","newTranslate","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","destroyed","transition$1","transitionStart","direction","dir","slideTo","initialSlide","allowSlideNext","allowSlidePrev","t","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","increment","loopFix","_clientLeft","slidePrev","normalize","val","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","threshold","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","cursor","unsetGrabCursor","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","ie","edge","firefox","windows","electron","macos","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Device","ios","androidChrome","desktop","cordova","phonegap","toLowerCase","os","osVersion","webView","standalone","webview","pixelRatio","devicePixelRatio","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","noSwiping","noSwipingSelector","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","preventDefault","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","pow","touchAngle","atan2","PI","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","position","time","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","freeModeMomentum","lastMoveEvent","pop","velocityEvent","distance","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","increment$1","ratio","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","defaults","init","updateOnWindowResize","uniqueNavElements","preloadImages","updateOnImagesReady","noSwipingClass","passiveListeners","containerModifierClass","slideClass","slideBlankClass","wrapperClass","prototypes","attachEvents","touchEvents","start","move","end","passive","cancel","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","changeDirection","points","point","minRatio","substr","innerHeight","sort","b","ref","innerWidth","wasLocked","lastSlidePosition","addClasses","classNames","suffixes","suffix","removeClasses","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","shadowRoot","options","touchEventsTouch","touchEventsDesktop","clickTimeout","__proto__","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","slideEl","destroy","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser","isEdge","isSafari","isUiWebView","test","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","func","MutationObserver","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","requestAnimationFrame","observe","attributes","childList","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Virtual","force","ref$1","addSlidesBefore","addSlidesAfter","ref$2","previousFrom","from","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","prependIndexes","appendIndexes","cache","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","Virtual$1","beforeInit","overwriteParams","Keyboard","handle","kc","keyCode","charCode","shiftKey","altKey","ctrlKey","metaKey","keyboard","onlyInViewport","inView","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","enable","disable","Keyboard$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","isSupported","element","implementation","hasFeature","isEventSupported","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","mousewheel","eventsTarged","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent$1","sign","ignoreWheelEvents","sensitivity","timeout","recentWheelEvents$1","shift","prevEvent$1","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","newEvent","raw","prevEvent","animateSlider","releaseScroll","getTime","Navigation","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","Pagination","pagination","current","total","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","Scrollbar","scrollbar","dragSize","trackSize","$dragEl","newSize","newPos","hide","opacity","divider","moveDivider","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","dragStartPos","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragEl","draggable","Parallax","setTransform","p","currentOpacity","currentScale","parallax","parallaxEl","$parallaxEl","parallaxDuration","Zoom","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","zoom","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","maxRatio","isScaling","onGestureChange","scaleMove","onGestureEnd","touchesStart","slideWidth","slideHeight","scaledWidth","scaledHeight","minX","maxX","minY","maxY","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","onTransitionEnd","out","in","touchX","touchY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","activeListenerWithCapture","slideSelector","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","imageIndex","background","$pictureEl","sourceIndex","sourceEl","$source","slideOriginalIndex","originalSlide","duplicatedSlide","slideExist","initialImageLoaded","elIndex","loadPrevNext","loadPrevNextAmount","amount","maxIndex","minIndex","Controller","LinearSpline","guess","i1","i3","binarySearch","array","interpolate","getInterpolateFunction","c","controller","spline","setTranslate$1","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","a11y","makeElFocusable","makeElNotFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","message","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","History","hashNavigation","paths","getPathValues","scrollToSlide","setHistoryPopState","pathArray","part","setHistory","slugify","includes","currentState","state","HashNavigation","onHashCange","newHash","setHash","watchState","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","pause","waitForTransition","Fade","tx","ty","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","$cubeShadowEl","swiperWidth","swiperHeight","cubeEffect","wrapperRotate","shadow","slideAngle","round","tz","slideShadows","shadowBefore","shadowAfter","-webkit-transform-origin","-moz-transform-origin","-ms-transform-origin","transform-origin","shadowOffset","shadowAngle","sin","cos","scale1","shadowScale","scale2","zFactor","Flip","flipEffect","limitRotation","rotateY","rotateX","zIndex","Coverflow","coverflowEffect","center","rotate","depth","offsetMultiplier","modifier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","prefixedPointerEvents","perspectiveOrigin","Thumbs","thumbsParams","thumbs","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","initial","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","hideOnClick","toEdge","fromEdge","isHidden","bulletElement","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","dragClass","containerClass","zoomedSlideClass","touchStart","touchEnd","doubleTap","slideChange","loadOnTransitionStart","preloaderClass","scroll","scrollbarDragMove","notificationClass","paginationUpdate","disableOnInteraction","onVisibilityChange","visibilityState","beforeTransitionStart","sliderFirstMove","beforeDestroy"],"mappings":"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","file":"swiper.min.js"}
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1,24 @@
1
+@plugin './plugin.js';
2
+.navigation-color-loop(@ruleset) when (length( @colors ) >= 1) {
3
+  @length: length( @colors ) ;
4
+  .looper( 1 ) ;
5
+  .looper( @index ) when ( @index <= @length ) and (length(extract( @colors, @index )) = 2) {
6
+    @navPair: extract( @colors, @index );
7
+    @navColorName: extract( @navPair, 1 ) ;
8
+    @navColorValue: extract( @navPair, 2 ) ;
9
+    @ruleset();
10
+    .looper( @index + 1 ) ;
11
+  }
12
+}
13
+
14
+.pagination-color-loop(@ruleset) when (length( @colors ) >= 1) {
15
+  @length: length( @colors ) ;
16
+  .looper( 1 ) ;
17
+  .looper( @index ) when ( @index <= @length ) and (length(extract( @colors, @index )) = 2) {
18
+    @paginationPair: extract( @colors, @index );
19
+    @paginationColorName: extract( @paginationPair, 1 ) ;
20
+    @paginationColorValue: extract( @paginationPair, 2 ) ;
21
+    @ruleset();
22
+    .looper( @index + 1 ) ;
23
+  }
24
+}
0 25
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+/// Urlencode the SVG string
2
+/// @param {String} $svg - SVG image to encode
3
+/// @return {String} - Encoded SVG data uri
4
+@function swiper-svg-uri($svg) {
5
+  $encoded: '';
6
+  $chunkSize: 2048;
7
+  $index: 0;
8
+  $loops: ceil(str-length($svg) / $chunkSize);
9
+
10
+  $map: (
11
+   "%": "%25",
12
+   "<": "%3C",
13
+   ">": "%3E",
14
+   " ": "%20",
15
+   "!": "%21",
16
+   "*": "%2A",
17
+   '"': "%22",
18
+   ";": "%3B",
19
+   ":": "%3A",
20
+   "@": "%40",
21
+   "&": "%26",
22
+   "=": "%3D",
23
+   "+": "%2B",
24
+   "$": "%24",
25
+   ",": "%2C",
26
+   "/": "%2F",
27
+   "?": "%3F",
28
+   "#": "%23",
29
+   "[": "%5B",
30
+   "]": "%5D"
31
+  );
32
+
33
+  @for $i from 1 through $loops {
34
+    $chunk: str-slice($svg, $index, $index + $chunkSize - 1);
35
+    @each $search, $replace in $map {
36
+      $chunk: swiper-str-replace($chunk, $search, $replace);
37
+    }
38
+    $encoded: #{$encoded}#{$chunk};
39
+    $index: $index + $chunkSize;
40
+  }
41
+
42
+  @return url("data:image/svg+xml;charset=utf-8,#{$encoded}");
43
+}
44
+
45
+/// Replace `$search` with `$replace` in `$string`
46
+/// @author Hugo Giraudel
47
+/// @link http://sassmeister.com/gist/1b4f2da5527830088e4d
48
+/// @param {String} $string - Initial string
49
+/// @param {String} $search - Substring to replace
50
+/// @param {String} $replace ('') - New value
51
+/// @return {String} - Updated string
52
+@function swiper-str-replace($string, $search, $replace: '') {
53
+  $index: str-index($string, $search);
54
+
55
+  @if $index {
56
+    @return str-slice($string, 1, $index - 1) + $replace + swiper-str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
57
+  }
58
+
59
+  @return $string;
60
+}
0 61
new file mode 100644
... ...
@@ -0,0 +1,212 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const a11y = {
5
+  makeElFocusable($el) {
6
+    $el.attr('tabIndex', '0');
7
+    return $el;
8
+  },
9
+  makeElNotFocusable($el) {
10
+    $el.attr('tabIndex', '-1');
11
+    return $el;
12
+  },
13
+  addElRole($el, role) {
14
+    $el.attr('role', role);
15
+    return $el;
16
+  },
17
+  addElLabel($el, label) {
18
+    $el.attr('aria-label', label);
19
+    return $el;
20
+  },
21
+  disableEl($el) {
22
+    $el.attr('aria-disabled', true);
23
+    return $el;
24
+  },
25
+  enableEl($el) {
26
+    $el.attr('aria-disabled', false);
27
+    return $el;
28
+  },
29
+  onEnterKey(e) {
30
+    const swiper = this;
31
+    const params = swiper.params.a11y;
32
+    if (e.keyCode !== 13) return;
33
+    const $targetEl = $(e.target);
34
+    if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
35
+      if (!(swiper.isEnd && !swiper.params.loop)) {
36
+        swiper.slideNext();
37
+      }
38
+      if (swiper.isEnd) {
39
+        swiper.a11y.notify(params.lastSlideMessage);
40
+      } else {
41
+        swiper.a11y.notify(params.nextSlideMessage);
42
+      }
43
+    }
44
+    if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
45
+      if (!(swiper.isBeginning && !swiper.params.loop)) {
46
+        swiper.slidePrev();
47
+      }
48
+      if (swiper.isBeginning) {
49
+        swiper.a11y.notify(params.firstSlideMessage);
50
+      } else {
51
+        swiper.a11y.notify(params.prevSlideMessage);
52
+      }
53
+    }
54
+    if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) {
55
+      $targetEl[0].click();
56
+    }
57
+  },
58
+  notify(message) {
59
+    const swiper = this;
60
+    const notification = swiper.a11y.liveRegion;
61
+    if (notification.length === 0) return;
62
+    notification.html('');
63
+    notification.html(message);
64
+  },
65
+  updateNavigation() {
66
+    const swiper = this;
67
+
68
+    if (swiper.params.loop || !swiper.navigation) return;
69
+    const { $nextEl, $prevEl } = swiper.navigation;
70
+
71
+    if ($prevEl && $prevEl.length > 0) {
72
+      if (swiper.isBeginning) {
73
+        swiper.a11y.disableEl($prevEl);
74
+        swiper.a11y.makeElNotFocusable($prevEl);
75
+      } else {
76
+        swiper.a11y.enableEl($prevEl);
77
+        swiper.a11y.makeElFocusable($prevEl);
78
+      }
79
+    }
80
+    if ($nextEl && $nextEl.length > 0) {
81
+      if (swiper.isEnd) {
82
+        swiper.a11y.disableEl($nextEl);
83
+        swiper.a11y.makeElNotFocusable($nextEl);
84
+      } else {
85
+        swiper.a11y.enableEl($nextEl);
86
+        swiper.a11y.makeElFocusable($nextEl);
87
+      }
88
+    }
89
+  },
90
+  updatePagination() {
91
+    const swiper = this;
92
+    const params = swiper.params.a11y;
93
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
94
+      swiper.pagination.bullets.each((bulletIndex, bulletEl) => {
95
+        const $bulletEl = $(bulletEl);
96
+        swiper.a11y.makeElFocusable($bulletEl);
97
+        swiper.a11y.addElRole($bulletEl, 'button');
98
+        swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1));
99
+      });
100
+    }
101
+  },
102
+  init() {
103
+    const swiper = this;
104
+
105
+    swiper.$el.append(swiper.a11y.liveRegion);
106
+
107
+    // Navigation
108
+    const params = swiper.params.a11y;
109
+    let $nextEl;
110
+    let $prevEl;
111
+    if (swiper.navigation && swiper.navigation.$nextEl) {
112
+      $nextEl = swiper.navigation.$nextEl;
113
+    }
114
+    if (swiper.navigation && swiper.navigation.$prevEl) {
115
+      $prevEl = swiper.navigation.$prevEl;
116
+    }
117
+    if ($nextEl) {
118
+      swiper.a11y.makeElFocusable($nextEl);
119
+      swiper.a11y.addElRole($nextEl, 'button');
120
+      swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
121
+      $nextEl.on('keydown', swiper.a11y.onEnterKey);
122
+    }
123
+    if ($prevEl) {
124
+      swiper.a11y.makeElFocusable($prevEl);
125
+      swiper.a11y.addElRole($prevEl, 'button');
126
+      swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
127
+      $prevEl.on('keydown', swiper.a11y.onEnterKey);
128
+    }
129
+
130
+    // Pagination
131
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
132
+      swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
133
+    }
134
+  },
135
+  destroy() {
136
+    const swiper = this;
137
+    if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
138
+
139
+    let $nextEl;
140
+    let $prevEl;
141
+    if (swiper.navigation && swiper.navigation.$nextEl) {
142
+      $nextEl = swiper.navigation.$nextEl;
143
+    }
144
+    if (swiper.navigation && swiper.navigation.$prevEl) {
145
+      $prevEl = swiper.navigation.$prevEl;
146
+    }
147
+    if ($nextEl) {
148
+      $nextEl.off('keydown', swiper.a11y.onEnterKey);
149
+    }
150
+    if ($prevEl) {
151
+      $prevEl.off('keydown', swiper.a11y.onEnterKey);
152
+    }
153
+
154
+    // Pagination
155
+    if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
156
+      swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey);
157
+    }
158
+  },
159
+};
160
+export default {
161
+  name: 'a11y',
162
+  params: {
163
+    a11y: {
164
+      enabled: true,
165
+      notificationClass: 'swiper-notification',
166
+      prevSlideMessage: 'Previous slide',
167
+      nextSlideMessage: 'Next slide',
168
+      firstSlideMessage: 'This is the first slide',
169
+      lastSlideMessage: 'This is the last slide',
170
+      paginationBulletMessage: 'Go to slide {{index}}',
171
+    },
172
+  },
173
+  create() {
174
+    const swiper = this;
175
+    Utils.extend(swiper, {
176
+      a11y: {
177
+        liveRegion: $(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`),
178
+      },
179
+    });
180
+    Object.keys(a11y).forEach((methodName) => {
181
+      swiper.a11y[methodName] = a11y[methodName].bind(swiper);
182
+    });
183
+  },
184
+  on: {
185
+    init() {
186
+      const swiper = this;
187
+      if (!swiper.params.a11y.enabled) return;
188
+      swiper.a11y.init();
189
+      swiper.a11y.updateNavigation();
190
+    },
191
+    toEdge() {
192
+      const swiper = this;
193
+      if (!swiper.params.a11y.enabled) return;
194
+      swiper.a11y.updateNavigation();
195
+    },
196
+    fromEdge() {
197
+      const swiper = this;
198
+      if (!swiper.params.a11y.enabled) return;
199
+      swiper.a11y.updateNavigation();
200
+    },
201
+    paginationUpdate() {
202
+      const swiper = this;
203
+      if (!swiper.params.a11y.enabled) return;
204
+      swiper.a11y.updatePagination();
205
+    },
206
+    destroy() {
207
+      const swiper = this;
208
+      if (!swiper.params.a11y.enabled) return;
209
+      swiper.a11y.destroy();
210
+    },
211
+  },
212
+};
0 213
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+/* a11y */
2
+.swiper-container .swiper-notification {
3
+  position: absolute;
4
+  left: 0;
5
+  top: 0;
6
+  pointer-events: none;
7
+  opacity: 0;
8
+  z-index: -1000;
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+/* a11y */
2
+.swiper-container .swiper-notification {
3
+  position: absolute;
4
+  left: 0;
5
+  top: 0;
6
+  pointer-events: none;
7
+  opacity: 0;
8
+  z-index: -1000;
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,170 @@
1
+/* eslint no-underscore-dangle: "off" */
2
+import Utils from '../../utils/utils';
3
+
4
+const Autoplay = {
5
+  run() {
6
+    const swiper = this;
7
+    const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
8
+    let delay = swiper.params.autoplay.delay;
9
+    if ($activeSlideEl.attr('data-swiper-autoplay')) {
10
+      delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
11
+    }
12
+    clearTimeout(swiper.autoplay.timeout);
13
+    swiper.autoplay.timeout = Utils.nextTick(() => {
14
+      if (swiper.params.autoplay.reverseDirection) {
15
+        if (swiper.params.loop) {
16
+          swiper.loopFix();
17
+          swiper.slidePrev(swiper.params.speed, true, true);
18
+          swiper.emit('autoplay');
19
+        } else if (!swiper.isBeginning) {
20
+          swiper.slidePrev(swiper.params.speed, true, true);
21
+          swiper.emit('autoplay');
22
+        } else if (!swiper.params.autoplay.stopOnLastSlide) {
23
+          swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
24
+          swiper.emit('autoplay');
25
+        } else {
26
+          swiper.autoplay.stop();
27
+        }
28
+      } else if (swiper.params.loop) {
29
+        swiper.loopFix();
30
+        swiper.slideNext(swiper.params.speed, true, true);
31
+        swiper.emit('autoplay');
32
+      } else if (!swiper.isEnd) {
33
+        swiper.slideNext(swiper.params.speed, true, true);
34
+        swiper.emit('autoplay');
35
+      } else if (!swiper.params.autoplay.stopOnLastSlide) {
36
+        swiper.slideTo(0, swiper.params.speed, true, true);
37
+        swiper.emit('autoplay');
38
+      } else {
39
+        swiper.autoplay.stop();
40
+      }
41
+      if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run();
42
+    }, delay);
43
+  },
44
+  start() {
45
+    const swiper = this;
46
+    if (typeof swiper.autoplay.timeout !== 'undefined') return false;
47
+    if (swiper.autoplay.running) return false;
48
+    swiper.autoplay.running = true;
49
+    swiper.emit('autoplayStart');
50
+    swiper.autoplay.run();
51
+    return true;
52
+  },
53
+  stop() {
54
+    const swiper = this;
55
+    if (!swiper.autoplay.running) return false;
56
+    if (typeof swiper.autoplay.timeout === 'undefined') return false;
57
+
58
+    if (swiper.autoplay.timeout) {
59
+      clearTimeout(swiper.autoplay.timeout);
60
+      swiper.autoplay.timeout = undefined;
61
+    }
62
+    swiper.autoplay.running = false;
63
+    swiper.emit('autoplayStop');
64
+    return true;
65
+  },
66
+  pause(speed) {
67
+    const swiper = this;
68
+    if (!swiper.autoplay.running) return;
69
+    if (swiper.autoplay.paused) return;
70
+    if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
71
+    swiper.autoplay.paused = true;
72
+    if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
73
+      swiper.autoplay.paused = false;
74
+      swiper.autoplay.run();
75
+    } else {
76
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
77
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
78
+    }
79
+  },
80
+};
81
+
82
+export default {
83
+  name: 'autoplay',
84
+  params: {
85
+    autoplay: {
86
+      enabled: false,
87
+      delay: 3000,
88
+      waitForTransition: true,
89
+      disableOnInteraction: true,
90
+      stopOnLastSlide: false,
91
+      reverseDirection: false,
92
+    },
93
+  },
94
+  create() {
95
+    const swiper = this;
96
+    Utils.extend(swiper, {
97
+      autoplay: {
98
+        running: false,
99
+        paused: false,
100
+        run: Autoplay.run.bind(swiper),
101
+        start: Autoplay.start.bind(swiper),
102
+        stop: Autoplay.stop.bind(swiper),
103
+        pause: Autoplay.pause.bind(swiper),
104
+        onVisibilityChange() {
105
+          if (document.visibilityState === 'hidden' && swiper.autoplay.running) {
106
+            swiper.autoplay.pause();
107
+          }
108
+          if (document.visibilityState === 'visible' && swiper.autoplay.paused) {
109
+            swiper.autoplay.run();
110
+            swiper.autoplay.paused = false;
111
+          }
112
+        },
113
+        onTransitionEnd(e) {
114
+          if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
115
+          if (e.target !== this) return;
116
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
117
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
118
+          swiper.autoplay.paused = false;
119
+          if (!swiper.autoplay.running) {
120
+            swiper.autoplay.stop();
121
+          } else {
122
+            swiper.autoplay.run();
123
+          }
124
+        },
125
+      },
126
+    });
127
+  },
128
+  on: {
129
+    init() {
130
+      const swiper = this;
131
+      if (swiper.params.autoplay.enabled) {
132
+        swiper.autoplay.start();
133
+        document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
134
+      }
135
+    },
136
+    beforeTransitionStart(speed, internal) {
137
+      const swiper = this;
138
+      if (swiper.autoplay.running) {
139
+        if (internal || !swiper.params.autoplay.disableOnInteraction) {
140
+          swiper.autoplay.pause(speed);
141
+        } else {
142
+          swiper.autoplay.stop();
143
+        }
144
+      }
145
+    },
146
+    sliderFirstMove() {
147
+      const swiper = this;
148
+      if (swiper.autoplay.running) {
149
+        if (swiper.params.autoplay.disableOnInteraction) {
150
+          swiper.autoplay.stop();
151
+        } else {
152
+          swiper.autoplay.pause();
153
+        }
154
+      }
155
+    },
156
+    touchEnd() {
157
+      const swiper = this;
158
+      if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {
159
+        swiper.autoplay.run();
160
+      }
161
+    },
162
+    destroy() {
163
+      const swiper = this;
164
+      if (swiper.autoplay.running) {
165
+        swiper.autoplay.stop();
166
+      }
167
+      document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);
168
+    },
169
+  },
170
+};
0 171
new file mode 100644
... ...
@@ -0,0 +1,186 @@
1
+/* eslint no-bitwise: ["error", { "allow": [">>"] }] */
2
+import Swiper from '../core/core-class';
3
+import Utils from '../../utils/utils';
4
+
5
+const Controller = {
6
+  LinearSpline: function LinearSpline(x, y) {
7
+    const binarySearch = (function search() {
8
+      let maxIndex;
9
+      let minIndex;
10
+      let guess;
11
+      return (array, val) => {
12
+        minIndex = -1;
13
+        maxIndex = array.length;
14
+        while (maxIndex - minIndex > 1) {
15
+          guess = maxIndex + minIndex >> 1;
16
+          if (array[guess] <= val) {
17
+            minIndex = guess;
18
+          } else {
19
+            maxIndex = guess;
20
+          }
21
+        }
22
+        return maxIndex;
23
+      };
24
+    }());
25
+    this.x = x;
26
+    this.y = y;
27
+    this.lastIndex = x.length - 1;
28
+    // Given an x value (x2), return the expected y2 value:
29
+    // (x1,y1) is the known point before given value,
30
+    // (x3,y3) is the known point after given value.
31
+    let i1;
32
+    let i3;
33
+
34
+    this.interpolate = function interpolate(x2) {
35
+      if (!x2) return 0;
36
+
37
+      // Get the indexes of x1 and x3 (the array indexes before and after given x2):
38
+      i3 = binarySearch(this.x, x2);
39
+      i1 = i3 - 1;
40
+
41
+      // We have our indexes i1 & i3, so we can calculate already:
42
+      // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
43
+      return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
44
+    };
45
+    return this;
46
+  },
47
+  // xxx: for now i will just save one spline function to to
48
+  getInterpolateFunction(c) {
49
+    const swiper = this;
50
+    if (!swiper.controller.spline) {
51
+      swiper.controller.spline = swiper.params.loop
52
+        ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)
53
+        : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
54
+    }
55
+  },
56
+  setTranslate(setTranslate, byController) {
57
+    const swiper = this;
58
+    const controlled = swiper.controller.control;
59
+    let multiplier;
60
+    let controlledTranslate;
61
+    function setControlledTranslate(c) {
62
+      // this will create an Interpolate function based on the snapGrids
63
+      // x is the Grid of the scrolled scroller and y will be the controlled scroller
64
+      // it makes sense to create this only once and recall it for the interpolation
65
+      // the function does a lot of value caching for performance
66
+      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
67
+      if (swiper.params.controller.by === 'slide') {
68
+        swiper.controller.getInterpolateFunction(c);
69
+        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
70
+        // but it did not work out
71
+        controlledTranslate = -swiper.controller.spline.interpolate(-translate);
72
+      }
73
+
74
+      if (!controlledTranslate || swiper.params.controller.by === 'container') {
75
+        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
76
+        controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
77
+      }
78
+
79
+      if (swiper.params.controller.inverse) {
80
+        controlledTranslate = c.maxTranslate() - controlledTranslate;
81
+      }
82
+      c.updateProgress(controlledTranslate);
83
+      c.setTranslate(controlledTranslate, swiper);
84
+      c.updateActiveIndex();
85
+      c.updateSlidesClasses();
86
+    }
87
+    if (Array.isArray(controlled)) {
88
+      for (let i = 0; i < controlled.length; i += 1) {
89
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
90
+          setControlledTranslate(controlled[i]);
91
+        }
92
+      }
93
+    } else if (controlled instanceof Swiper && byController !== controlled) {
94
+      setControlledTranslate(controlled);
95
+    }
96
+  },
97
+  setTransition(duration, byController) {
98
+    const swiper = this;
99
+    const controlled = swiper.controller.control;
100
+    let i;
101
+    function setControlledTransition(c) {
102
+      c.setTransition(duration, swiper);
103
+      if (duration !== 0) {
104
+        c.transitionStart();
105
+        if (c.params.autoHeight) {
106
+          Utils.nextTick(() => {
107
+            c.updateAutoHeight();
108
+          });
109
+        }
110
+        c.$wrapperEl.transitionEnd(() => {
111
+          if (!controlled) return;
112
+          if (c.params.loop && swiper.params.controller.by === 'slide') {
113
+            c.loopFix();
114
+          }
115
+          c.transitionEnd();
116
+        });
117
+      }
118
+    }
119
+    if (Array.isArray(controlled)) {
120
+      for (i = 0; i < controlled.length; i += 1) {
121
+        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
122
+          setControlledTransition(controlled[i]);
123
+        }
124
+      }
125
+    } else if (controlled instanceof Swiper && byController !== controlled) {
126
+      setControlledTransition(controlled);
127
+    }
128
+  },
129
+};
130
+export default {
131
+  name: 'controller',
132
+  params: {
133
+    controller: {
134
+      control: undefined,
135
+      inverse: false,
136
+      by: 'slide', // or 'container'
137
+    },
138
+  },
139
+  create() {
140
+    const swiper = this;
141
+    Utils.extend(swiper, {
142
+      controller: {
143
+        control: swiper.params.controller.control,
144
+        getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
145
+        setTranslate: Controller.setTranslate.bind(swiper),
146
+        setTransition: Controller.setTransition.bind(swiper),
147
+      },
148
+    });
149
+  },
150
+  on: {
151
+    update() {
152
+      const swiper = this;
153
+      if (!swiper.controller.control) return;
154
+      if (swiper.controller.spline) {
155
+        swiper.controller.spline = undefined;
156
+        delete swiper.controller.spline;
157
+      }
158
+    },
159
+    resize() {
160
+      const swiper = this;
161
+      if (!swiper.controller.control) return;
162
+      if (swiper.controller.spline) {
163
+        swiper.controller.spline = undefined;
164
+        delete swiper.controller.spline;
165
+      }
166
+    },
167
+    observerUpdate() {
168
+      const swiper = this;
169
+      if (!swiper.controller.control) return;
170
+      if (swiper.controller.spline) {
171
+        swiper.controller.spline = undefined;
172
+        delete swiper.controller.spline;
173
+      }
174
+    },
175
+    setTranslate(translate, byController) {
176
+      const swiper = this;
177
+      if (!swiper.controller.control) return;
178
+      swiper.controller.setTranslate(translate, byController);
179
+    },
180
+    setTransition(duration, byController) {
181
+      const swiper = this;
182
+      if (!swiper.controller.control) return;
183
+      swiper.controller.setTransition(duration, byController);
184
+    },
185
+  },
186
+};
0 187
new file mode 100644
1 188
new file mode 100644
2 189
new file mode 100644
... ...
@@ -0,0 +1,25 @@
1
+import { window } from 'ssr-window';
2
+
3
+export default function (breakpoints) {
4
+  // Get breakpoint for window width
5
+  if (!breakpoints) return undefined;
6
+  let breakpoint = false;
7
+
8
+  const points = Object.keys(breakpoints).map((point) => {
9
+    if (typeof point === 'string' && point.indexOf('@') === 0) {
10
+      const minRatio = parseFloat(point.substr(1));
11
+      const value = window.innerHeight * minRatio;
12
+      return { value, point };
13
+    }
14
+    return { value: point, point };
15
+  });
16
+
17
+  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
18
+  for (let i = 0; i < points.length; i += 1) {
19
+    const { point, value } = points[i];
20
+    if (value <= window.innerWidth) {
21
+      breakpoint = point;
22
+    }
23
+  }
24
+  return breakpoint || 'max';
25
+}
0 26
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+import setBreakpoint from './setBreakpoint';
2
+import getBreakpoint from './getBreakpoint';
3
+
4
+export default { setBreakpoint, getBreakpoint };
0 5
new file mode 100644
... ...
@@ -0,0 +1,68 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function () {
4
+  const swiper = this;
5
+  const {
6
+    activeIndex, initialized, loopedSlides = 0, params, $el,
7
+  } = swiper;
8
+  const breakpoints = params.breakpoints;
9
+  if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;
10
+
11
+  // Get breakpoint for window width and update parameters
12
+  const breakpoint = swiper.getBreakpoint(breakpoints);
13
+
14
+  if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
15
+    const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
16
+    if (breakpointOnlyParams) {
17
+      ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => {
18
+        const paramValue = breakpointOnlyParams[param];
19
+        if (typeof paramValue === 'undefined') return;
20
+        if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
21
+          breakpointOnlyParams[param] = 'auto';
22
+        } else if (param === 'slidesPerView') {
23
+          breakpointOnlyParams[param] = parseFloat(paramValue);
24
+        } else {
25
+          breakpointOnlyParams[param] = parseInt(paramValue, 10);
26
+        }
27
+      });
28
+    }
29
+
30
+    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
31
+    const wasMultiRow = params.slidesPerColumn > 1;
32
+    const isMultiRow = breakpointParams.slidesPerColumn > 1;
33
+    if (wasMultiRow && !isMultiRow) {
34
+      $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`);
35
+    } else if (!wasMultiRow && isMultiRow) {
36
+      $el.addClass(`${params.containerModifierClass}multirow`);
37
+      if (breakpointParams.slidesPerColumnFill === 'column') {
38
+        $el.addClass(`${params.containerModifierClass}multirow-column`);
39
+      }
40
+    }
41
+
42
+    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
43
+    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
44
+
45
+    if (directionChanged && initialized) {
46
+      swiper.changeDirection();
47
+    }
48
+
49
+    Utils.extend(swiper.params, breakpointParams);
50
+
51
+    Utils.extend(swiper, {
52
+      allowTouchMove: swiper.params.allowTouchMove,
53
+      allowSlideNext: swiper.params.allowSlideNext,
54
+      allowSlidePrev: swiper.params.allowSlidePrev,
55
+    });
56
+
57
+    swiper.currentBreakpoint = breakpoint;
58
+
59
+    if (needsReLoop && initialized) {
60
+      swiper.loopDestroy();
61
+      swiper.loopCreate();
62
+      swiper.updateSlides();
63
+      swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
64
+    }
65
+
66
+    swiper.emit('breakpoint', breakpointParams);
67
+  }
68
+}
0 69
new file mode 100644
... ...
@@ -0,0 +1,26 @@
1
+
2
+function checkOverflow() {
3
+  const swiper = this;
4
+  const params = swiper.params;
5
+  const wasLocked = swiper.isLocked;
6
+  const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);
7
+
8
+  if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {
9
+    swiper.isLocked = lastSlidePosition <= swiper.size;
10
+  } else {
11
+    swiper.isLocked = swiper.snapGrid.length === 1;
12
+  }
13
+
14
+  swiper.allowSlideNext = !swiper.isLocked;
15
+  swiper.allowSlidePrev = !swiper.isLocked;
16
+
17
+  // events
18
+  if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
19
+
20
+  if (wasLocked && wasLocked !== swiper.isLocked) {
21
+    swiper.isEnd = false;
22
+    swiper.navigation.update();
23
+  }
24
+}
25
+
26
+export default { checkOverflow };
0 27
new file mode 100644
... ...
@@ -0,0 +1,44 @@
1
+import Device from '../../../utils/device';
2
+
3
+export default function () {
4
+  const swiper = this;
5
+  const {
6
+    classNames, params, rtl, $el,
7
+  } = swiper;
8
+  const suffixes = [];
9
+
10
+  suffixes.push('initialized');
11
+  suffixes.push(params.direction);
12
+
13
+  if (params.freeMode) {
14
+    suffixes.push('free-mode');
15
+  }
16
+  if (params.autoHeight) {
17
+    suffixes.push('autoheight');
18
+  }
19
+  if (rtl) {
20
+    suffixes.push('rtl');
21
+  }
22
+  if (params.slidesPerColumn > 1) {
23
+    suffixes.push('multirow');
24
+    if (params.slidesPerColumnFill === 'column') {
25
+      suffixes.push('multirow-column');
26
+    }
27
+  }
28
+  if (Device.android) {
29
+    suffixes.push('android');
30
+  }
31
+  if (Device.ios) {
32
+    suffixes.push('ios');
33
+  }
34
+
35
+  if (params.cssMode) {
36
+    suffixes.push('css-mode');
37
+  }
38
+
39
+  suffixes.forEach((suffix) => {
40
+    classNames.push(params.containerModifierClass + suffix);
41
+  });
42
+
43
+  $el.addClass(classNames.join(' '));
44
+}
0 45
new file mode 100644
... ...
@@ -0,0 +1,4 @@
1
+import addClasses from './addClasses';
2
+import removeClasses from './removeClasses';
3
+
4
+export default { addClasses, removeClasses };
0 5
new file mode 100644
... ...
@@ -0,0 +1,6 @@
1
+export default function () {
2
+  const swiper = this;
3
+  const { $el, classNames } = swiper;
4
+
5
+  $el.removeClass(classNames.join(' '));
6
+}
0 7
new file mode 100644
... ...
@@ -0,0 +1,490 @@
1
+/* eslint no-param-reassign: "off" */
2
+import $ from '../../utils/dom';
3
+import Utils from '../../utils/utils';
4
+import Support from '../../utils/support';
5
+
6
+import SwiperClass from '../../utils/class';
7
+
8
+import update from './update/index';
9
+import translate from './translate/index';
10
+import transition from './transition/index';
11
+import slide from './slide/index';
12
+import loop from './loop/index';
13
+import grabCursor from './grab-cursor/index';
14
+import manipulation from './manipulation/index';
15
+import events from './events/index';
16
+import breakpoints from './breakpoints/index';
17
+import classes from './classes/index';
18
+import images from './images/index';
19
+import checkOverflow from './check-overflow/index';
20
+
21
+import defaults from './defaults';
22
+
23
+const prototypes = {
24
+  update,
25
+  translate,
26
+  transition,
27
+  slide,
28
+  loop,
29
+  grabCursor,
30
+  manipulation,
31
+  events,
32
+  breakpoints,
33
+  checkOverflow,
34
+  classes,
35
+  images,
36
+};
37
+
38
+const extendedDefaults = {};
39
+
40
+class Swiper extends SwiperClass {
41
+  constructor(...args) {
42
+    let el;
43
+    let params;
44
+    if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
45
+      params = args[0];
46
+    } else {
47
+      [el, params] = args;
48
+    }
49
+    if (!params) params = {};
50
+
51
+    params = Utils.extend({}, params);
52
+    if (el && !params.el) params.el = el;
53
+
54
+    super(params);
55
+
56
+    Object.keys(prototypes).forEach((prototypeGroup) => {
57
+      Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
58
+        if (!Swiper.prototype[protoMethod]) {
59
+          Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
60
+        }
61
+      });
62
+    });
63
+
64
+    // Swiper Instance
65
+    const swiper = this;
66
+    if (typeof swiper.modules === 'undefined') {
67
+      swiper.modules = {};
68
+    }
69
+    Object.keys(swiper.modules).forEach((moduleName) => {
70
+      const module = swiper.modules[moduleName];
71
+      if (module.params) {
72
+        const moduleParamName = Object.keys(module.params)[0];
73
+        const moduleParams = module.params[moduleParamName];
74
+        if (typeof moduleParams !== 'object' || moduleParams === null) return;
75
+        if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
76
+        if (params[moduleParamName] === true) {
77
+          params[moduleParamName] = { enabled: true };
78
+        }
79
+        if (
80
+          typeof params[moduleParamName] === 'object'
81
+          && !('enabled' in params[moduleParamName])
82
+        ) {
83
+          params[moduleParamName].enabled = true;
84
+        }
85
+        if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };
86
+      }
87
+    });
88
+
89
+    // Extend defaults with modules params
90
+    const swiperParams = Utils.extend({}, defaults);
91
+    swiper.useModulesParams(swiperParams);
92
+
93
+    // Extend defaults with passed params
94
+    swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
95
+    swiper.originalParams = Utils.extend({}, swiper.params);
96
+    swiper.passedParams = Utils.extend({}, params);
97
+
98
+    // Save Dom lib
99
+    swiper.$ = $;
100
+
101
+    // Find el
102
+    const $el = $(swiper.params.el);
103
+    el = $el[0];
104
+
105
+    if (!el) {
106
+      return undefined;
107
+    }
108
+
109
+    if ($el.length > 1) {
110
+      const swipers = [];
111
+      $el.each((index, containerEl) => {
112
+        const newParams = Utils.extend({}, params, { el: containerEl });
113
+        swipers.push(new Swiper(newParams));
114
+      });
115
+      return swipers;
116
+    }
117
+
118
+    el.swiper = swiper;
119
+    $el.data('swiper', swiper);
120
+
121
+    // Find Wrapper
122
+    let $wrapperEl;
123
+    if (el && el.shadowRoot && el.shadowRoot.querySelector) {
124
+      $wrapperEl = $(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`));
125
+      // Children needs to return slot items
126
+      $wrapperEl.children = (options) => $el.children(options);
127
+    } else {
128
+      $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`);
129
+    }
130
+    // Extend Swiper
131
+    Utils.extend(swiper, {
132
+      $el,
133
+      el,
134
+      $wrapperEl,
135
+      wrapperEl: $wrapperEl[0],
136
+
137
+      // Classes
138
+      classNames: [],
139
+
140
+      // Slides
141
+      slides: $(),
142
+      slidesGrid: [],
143
+      snapGrid: [],
144
+      slidesSizesGrid: [],
145
+
146
+      // isDirection
147
+      isHorizontal() {
148
+        return swiper.params.direction === 'horizontal';
149
+      },
150
+      isVertical() {
151
+        return swiper.params.direction === 'vertical';
152
+      },
153
+      // RTL
154
+      rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
155
+      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
156
+      wrongRTL: $wrapperEl.css('display') === '-webkit-box',
157
+
158
+      // Indexes
159
+      activeIndex: 0,
160
+      realIndex: 0,
161
+
162
+      //
163
+      isBeginning: true,
164
+      isEnd: false,
165
+
166
+      // Props
167
+      translate: 0,
168
+      previousTranslate: 0,
169
+      progress: 0,
170
+      velocity: 0,
171
+      animating: false,
172
+
173
+      // Locks
174
+      allowSlideNext: swiper.params.allowSlideNext,
175
+      allowSlidePrev: swiper.params.allowSlidePrev,
176
+
177
+      // Touch Events
178
+      touchEvents: (function touchEvents() {
179
+        const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];
180
+        let desktop = ['mousedown', 'mousemove', 'mouseup'];
181
+        if (Support.pointerEvents) {
182
+          desktop = ['pointerdown', 'pointermove', 'pointerup'];
183
+        }
184
+        swiper.touchEventsTouch = {
185
+          start: touch[0],
186
+          move: touch[1],
187
+          end: touch[2],
188
+          cancel: touch[3],
189
+        };
190
+        swiper.touchEventsDesktop = {
191
+          start: desktop[0],
192
+          move: desktop[1],
193
+          end: desktop[2],
194
+        };
195
+        return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
196
+      }()),
197
+      touchEventsData: {
198
+        isTouched: undefined,
199
+        isMoved: undefined,
200
+        allowTouchCallbacks: undefined,
201
+        touchStartTime: undefined,
202
+        isScrolling: undefined,
203
+        currentTranslate: undefined,
204
+        startTranslate: undefined,
205
+        allowThresholdMove: undefined,
206
+        // Form elements to match
207
+        formElements: 'input, select, option, textarea, button, video, label',
208
+        // Last click time
209
+        lastClickTime: Utils.now(),
210
+        clickTimeout: undefined,
211
+        // Velocities
212
+        velocities: [],
213
+        allowMomentumBounce: undefined,
214
+        isTouchEvent: undefined,
215
+        startMoving: undefined,
216
+      },
217
+
218
+      // Clicks
219
+      allowClick: true,
220
+
221
+      // Touches
222
+      allowTouchMove: swiper.params.allowTouchMove,
223
+
224
+      touches: {
225
+        startX: 0,
226
+        startY: 0,
227
+        currentX: 0,
228
+        currentY: 0,
229
+        diff: 0,
230
+      },
231
+
232
+      // Images
233
+      imagesToLoad: [],
234
+      imagesLoaded: 0,
235
+
236
+    });
237
+
238
+    // Install Modules
239
+    swiper.useModules();
240
+
241
+    // Init
242
+    if (swiper.params.init) {
243
+      swiper.init();
244
+    }
245
+
246
+    // Return app instance
247
+    return swiper;
248
+  }
249
+
250
+  slidesPerViewDynamic() {
251
+    const swiper = this;
252
+    const {
253
+      params, slides, slidesGrid, size: swiperSize, activeIndex,
254
+    } = swiper;
255
+    let spv = 1;
256
+    if (params.centeredSlides) {
257
+      let slideSize = slides[activeIndex].swiperSlideSize;
258
+      let breakLoop;
259
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
260
+        if (slides[i] && !breakLoop) {
261
+          slideSize += slides[i].swiperSlideSize;
262
+          spv += 1;
263
+          if (slideSize > swiperSize) breakLoop = true;
264
+        }
265
+      }
266
+      for (let i = activeIndex - 1; i >= 0; i -= 1) {
267
+        if (slides[i] && !breakLoop) {
268
+          slideSize += slides[i].swiperSlideSize;
269
+          spv += 1;
270
+          if (slideSize > swiperSize) breakLoop = true;
271
+        }
272
+      }
273
+    } else {
274
+      for (let i = activeIndex + 1; i < slides.length; i += 1) {
275
+        if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) {
276
+          spv += 1;
277
+        }
278
+      }
279
+    }
280
+    return spv;
281
+  }
282
+
283
+  update() {
284
+    const swiper = this;
285
+    if (!swiper || swiper.destroyed) return;
286
+    const { snapGrid, params } = swiper;
287
+    // Breakpoints
288
+    if (params.breakpoints) {
289
+      swiper.setBreakpoint();
290
+    }
291
+    swiper.updateSize();
292
+    swiper.updateSlides();
293
+    swiper.updateProgress();
294
+    swiper.updateSlidesClasses();
295
+
296
+    function setTranslate() {
297
+      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
298
+      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
299
+      swiper.setTranslate(newTranslate);
300
+      swiper.updateActiveIndex();
301
+      swiper.updateSlidesClasses();
302
+    }
303
+    let translated;
304
+    if (swiper.params.freeMode) {
305
+      setTranslate();
306
+      if (swiper.params.autoHeight) {
307
+        swiper.updateAutoHeight();
308
+      }
309
+    } else {
310
+      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
311
+        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
312
+      } else {
313
+        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
314
+      }
315
+      if (!translated) {
316
+        setTranslate();
317
+      }
318
+    }
319
+    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
320
+      swiper.checkOverflow();
321
+    }
322
+    swiper.emit('update');
323
+  }
324
+
325
+  changeDirection(newDirection, needUpdate = true) {
326
+    const swiper = this;
327
+    const currentDirection = swiper.params.direction;
328
+    if (!newDirection) {
329
+      // eslint-disable-next-line
330
+      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
331
+    }
332
+    if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {
333
+      return swiper;
334
+    }
335
+
336
+    swiper.$el
337
+      .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)
338
+      .addClass(`${swiper.params.containerModifierClass}${newDirection}`);
339
+
340
+    swiper.params.direction = newDirection;
341
+
342
+    swiper.slides.each((slideIndex, slideEl) => {
343
+      if (newDirection === 'vertical') {
344
+        slideEl.style.width = '';
345
+      } else {
346
+        slideEl.style.height = '';
347
+      }
348
+    });
349
+
350
+    swiper.emit('changeDirection');
351
+    if (needUpdate) swiper.update();
352
+
353
+    return swiper;
354
+  }
355
+
356
+  init() {
357
+    const swiper = this;
358
+    if (swiper.initialized) return;
359
+
360
+    swiper.emit('beforeInit');
361
+
362
+    // Set breakpoint
363
+    if (swiper.params.breakpoints) {
364
+      swiper.setBreakpoint();
365
+    }
366
+
367
+    // Add Classes
368
+    swiper.addClasses();
369
+
370
+    // Create loop
371
+    if (swiper.params.loop) {
372
+      swiper.loopCreate();
373
+    }
374
+
375
+    // Update size
376
+    swiper.updateSize();
377
+
378
+    // Update slides
379
+    swiper.updateSlides();
380
+
381
+    if (swiper.params.watchOverflow) {
382
+      swiper.checkOverflow();
383
+    }
384
+
385
+    // Set Grab Cursor
386
+    if (swiper.params.grabCursor) {
387
+      swiper.setGrabCursor();
388
+    }
389
+
390
+    if (swiper.params.preloadImages) {
391
+      swiper.preloadImages();
392
+    }
393
+
394
+    // Slide To Initial Slide
395
+    if (swiper.params.loop) {
396
+      swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
397
+    } else {
398
+      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
399
+    }
400
+
401
+    // Attach events
402
+    swiper.attachEvents();
403
+
404
+    // Init Flag
405
+    swiper.initialized = true;
406
+
407
+    // Emit
408
+    swiper.emit('init');
409
+  }
410
+
411
+  destroy(deleteInstance = true, cleanStyles = true) {
412
+    const swiper = this;
413
+    const {
414
+      params, $el, $wrapperEl, slides,
415
+    } = swiper;
416
+
417
+    if (typeof swiper.params === 'undefined' || swiper.destroyed) {
418
+      return null;
419
+    }
420
+
421
+    swiper.emit('beforeDestroy');
422
+
423
+    // Init Flag
424
+    swiper.initialized = false;
425
+
426
+    // Detach events
427
+    swiper.detachEvents();
428
+
429
+    // Destroy loop
430
+    if (params.loop) {
431
+      swiper.loopDestroy();
432
+    }
433
+
434
+    // Cleanup styles
435
+    if (cleanStyles) {
436
+      swiper.removeClasses();
437
+      $el.removeAttr('style');
438
+      $wrapperEl.removeAttr('style');
439
+      if (slides && slides.length) {
440
+        slides
441
+          .removeClass([
442
+            params.slideVisibleClass,
443
+            params.slideActiveClass,
444
+            params.slideNextClass,
445
+            params.slidePrevClass,
446
+          ].join(' '))
447
+          .removeAttr('style')
448
+          .removeAttr('data-swiper-slide-index');
449
+      }
450
+    }
451
+
452
+    swiper.emit('destroy');
453
+
454
+    // Detach emitter events
455
+    Object.keys(swiper.eventsListeners).forEach((eventName) => {
456
+      swiper.off(eventName);
457
+    });
458
+
459
+    if (deleteInstance !== false) {
460
+      swiper.$el[0].swiper = null;
461
+      swiper.$el.data('swiper', null);
462
+      Utils.deleteProps(swiper);
463
+    }
464
+    swiper.destroyed = true;
465
+
466
+    return null;
467
+  }
468
+
469
+  static extendDefaults(newDefaults) {
470
+    Utils.extend(extendedDefaults, newDefaults);
471
+  }
472
+
473
+  static get extendedDefaults() {
474
+    return extendedDefaults;
475
+  }
476
+
477
+  static get defaults() {
478
+    return defaults;
479
+  }
480
+
481
+  static get Class() {
482
+    return SwiperClass;
483
+  }
484
+
485
+  static get $() {
486
+    return $;
487
+  }
488
+}
489
+
490
+export default Swiper;
0 491
new file mode 100644
... ...
@@ -0,0 +1,111 @@
1
+:root {
2
+  --swiper-theme-color: @themeColor;
3
+}
4
+.swiper-container {
5
+  margin-left: auto;
6
+  margin-right: auto;
7
+  position: relative;
8
+  overflow: hidden;
9
+  list-style: none;
10
+  padding: 0;
11
+  /* Fix of Webkit flickering */
12
+  z-index:1;
13
+}
14
+.swiper-container-vertical > .swiper-wrapper {
15
+  flex-direction: column;
16
+}
17
+.swiper-wrapper {
18
+  position:relative;
19
+  width: 100%;
20
+  height: 100%;
21
+  z-index: 1;
22
+  display: flex;
23
+  transition-property:transform;
24
+  box-sizing: content-box;
25
+}
26
+.swiper-container-android .swiper-slide, .swiper-wrapper {
27
+  transform:translate3d(0px,0,0);
28
+}
29
+.swiper-container-multirow > .swiper-wrapper {
30
+  flex-wrap: wrap;
31
+}
32
+.swiper-container-multirow-column > .swiper-wrapper {
33
+  flex-wrap: wrap;
34
+  flex-direction: column;
35
+}
36
+.swiper-container-free-mode > .swiper-wrapper {
37
+  transition-timing-function: ease-out;
38
+  margin: 0 auto;
39
+}
40
+.swiper-slide {
41
+  flex-shrink: 0;
42
+  width: 100%;
43
+  height: 100%;
44
+  position: relative;
45
+  transition-property: transform;
46
+}
47
+.swiper-slide-invisible-blank {
48
+  visibility: hidden;
49
+}
50
+/* Auto Height */
51
+.swiper-container-autoheight, .swiper-container-autoheight .swiper-slide {
52
+  height: auto;
53
+}
54
+.swiper-container-autoheight .swiper-wrapper {
55
+  align-items: flex-start;
56
+  transition-property: transform, height;
57
+}
58
+
59
+/* 3D Effects */
60
+.swiper-container-3d {
61
+  perspective: 1200px;
62
+  .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
63
+    transform-style: preserve-3d;
64
+  }
65
+  .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
66
+    position: absolute;
67
+    left: 0;
68
+    top: 0;
69
+    width: 100%;
70
+    height: 100%;
71
+    pointer-events: none;
72
+    z-index: 10;
73
+  }
74
+  .swiper-slide-shadow-left {
75
+    background-image: linear-gradient(to left, rgba(0,0,0,0.5), rgba(0,0,0,0));
76
+  }
77
+  .swiper-slide-shadow-right {
78
+    background-image: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0));
79
+  }
80
+  .swiper-slide-shadow-top {
81
+    background-image: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0));
82
+  }
83
+  .swiper-slide-shadow-bottom {
84
+    background-image: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
85
+  }
86
+}
87
+
88
+/* CSS Mode */
89
+.swiper-container-css-mode {
90
+  > .swiper-wrapper {
91
+    overflow: auto;
92
+    scrollbar-width: none; /* For Firefox */
93
+    -ms-overflow-style: none; /* For Internet Explorer and Edge */
94
+    &::-webkit-scrollbar {
95
+      display: none;
96
+    }
97
+  }
98
+  > .swiper-wrapper > .swiper-slide {
99
+    scroll-snap-align: start start;
100
+  }
101
+}
102
+.swiper-container-horizontal.swiper-container-css-mode {
103
+  > .swiper-wrapper {
104
+    scroll-snap-type: x mandatory;
105
+  }
106
+}
107
+.swiper-container-vertical.swiper-container-css-mode {
108
+  > .swiper-wrapper {
109
+    scroll-snap-type: y mandatory;
110
+  }
111
+}
0 112
new file mode 100644
... ...
@@ -0,0 +1,115 @@
1
+:root {
2
+  --swiper-theme-color: #{$themeColor};
3
+}
4
+.swiper-container {
5
+  margin-left: auto;
6
+  margin-right: auto;
7
+  position: relative;
8
+  overflow: hidden;
9
+  list-style: none;
10
+  padding: 0;
11
+  /* Fix of Webkit flickering */
12
+  z-index:1;
13
+}
14
+.swiper-container-vertical > .swiper-wrapper {
15
+  flex-direction: column;
16
+}
17
+.swiper-wrapper {
18
+  position:relative;
19
+  width: 100%;
20
+  height: 100%;
21
+  z-index: 1;
22
+  display: flex;
23
+  transition-property:transform;
24
+  box-sizing: content-box;
25
+}
26
+.swiper-container-android .swiper-slide,
27
+.swiper-wrapper {
28
+  transform:translate3d(0px,0,0);
29
+}
30
+.swiper-container-multirow > .swiper-wrapper {
31
+  flex-wrap: wrap;
32
+}
33
+.swiper-container-multirow-column > .swiper-wrapper {
34
+  flex-wrap: wrap;
35
+  flex-direction: column;
36
+}
37
+.swiper-container-free-mode > .swiper-wrapper {
38
+  transition-timing-function: ease-out;
39
+  margin: 0 auto;
40
+}
41
+.swiper-slide {
42
+  flex-shrink: 0;
43
+  width: 100%;
44
+  height: 100%;
45
+  position: relative;
46
+  transition-property: transform;
47
+}
48
+.swiper-slide-invisible-blank {
49
+  visibility: hidden;
50
+}
51
+/* Auto Height */
52
+.swiper-container-autoheight {
53
+  &, .swiper-slide {
54
+    height: auto;
55
+  }
56
+
57
+  .swiper-wrapper {
58
+    align-items: flex-start;
59
+    transition-property: transform, height;
60
+  }
61
+}
62
+
63
+/* 3D Effects */
64
+.swiper-container-3d {
65
+  perspective: 1200px;
66
+  .swiper-wrapper, .swiper-slide, .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-cube-shadow {
67
+    transform-style: preserve-3d;
68
+  }
69
+  .swiper-slide-shadow-left, .swiper-slide-shadow-right, .swiper-slide-shadow-top, .swiper-slide-shadow-bottom {
70
+    position: absolute;
71
+    left: 0;
72
+    top: 0;
73
+    width: 100%;
74
+    height: 100%;
75
+    pointer-events: none;
76
+    z-index: 10;
77
+  }
78
+  .swiper-slide-shadow-left {
79
+    background-image: linear-gradient(to left, rgba(0,0,0,0.5), rgba(0,0,0,0));
80
+  }
81
+  .swiper-slide-shadow-right {
82
+    background-image: linear-gradient(to right, rgba(0,0,0,0.5), rgba(0,0,0,0));
83
+  }
84
+  .swiper-slide-shadow-top {
85
+    background-image: linear-gradient(to top, rgba(0,0,0,0.5), rgba(0,0,0,0));
86
+  }
87
+  .swiper-slide-shadow-bottom {
88
+    background-image: linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
89
+  }
90
+}
91
+
92
+/* CSS Mode */
93
+.swiper-container-css-mode {
94
+  > .swiper-wrapper {
95
+    overflow: auto;
96
+    scrollbar-width: none; /* For Firefox */
97
+    -ms-overflow-style: none; /* For Internet Explorer and Edge */
98
+    &::-webkit-scrollbar {
99
+      display: none;
100
+    }
101
+  }
102
+  > .swiper-wrapper > .swiper-slide {
103
+    scroll-snap-align: start start;
104
+  }
105
+}
106
+.swiper-container-horizontal.swiper-container-css-mode {
107
+  > .swiper-wrapper {
108
+    scroll-snap-type: x mandatory;
109
+  }
110
+}
111
+.swiper-container-vertical.swiper-container-css-mode {
112
+  > .swiper-wrapper {
113
+    scroll-snap-type: y mandatory;
114
+  }
115
+}
0 116
new file mode 100644
... ...
@@ -0,0 +1,133 @@
1
+export default {
2
+  init: true,
3
+  direction: 'horizontal',
4
+  touchEventsTarget: 'container',
5
+  initialSlide: 0,
6
+  speed: 300,
7
+  cssMode: false,
8
+  updateOnWindowResize: true,
9
+  //
10
+  preventInteractionOnTransition: false,
11
+
12
+  // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
13
+  edgeSwipeDetection: false,
14
+  edgeSwipeThreshold: 20,
15
+
16
+  // Free mode
17
+  freeMode: false,
18
+  freeModeMomentum: true,
19
+  freeModeMomentumRatio: 1,
20
+  freeModeMomentumBounce: true,
21
+  freeModeMomentumBounceRatio: 1,
22
+  freeModeMomentumVelocityRatio: 1,
23
+  freeModeSticky: false,
24
+  freeModeMinimumVelocity: 0.02,
25
+
26
+  // Autoheight
27
+  autoHeight: false,
28
+
29
+  // Set wrapper width
30
+  setWrapperSize: false,
31
+
32
+  // Virtual Translate
33
+  virtualTranslate: false,
34
+
35
+  // Effects
36
+  effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
37
+
38
+  // Breakpoints
39
+  breakpoints: undefined,
40
+
41
+  // Slides grid
42
+  spaceBetween: 0,
43
+  slidesPerView: 1,
44
+  slidesPerColumn: 1,
45
+  slidesPerColumnFill: 'column',
46
+  slidesPerGroup: 1,
47
+  slidesPerGroupSkip: 0,
48
+  centeredSlides: false,
49
+  centeredSlidesBounds: false,
50
+  slidesOffsetBefore: 0, // in px
51
+  slidesOffsetAfter: 0, // in px
52
+  normalizeSlideIndex: true,
53
+  centerInsufficientSlides: false,
54
+
55
+  // Disable swiper and hide navigation when container not overflow
56
+  watchOverflow: false,
57
+
58
+  // Round length
59
+  roundLengths: false,
60
+
61
+  // Touches
62
+  touchRatio: 1,
63
+  touchAngle: 45,
64
+  simulateTouch: true,
65
+  shortSwipes: true,
66
+  longSwipes: true,
67
+  longSwipesRatio: 0.5,
68
+  longSwipesMs: 300,
69
+  followFinger: true,
70
+  allowTouchMove: true,
71
+  threshold: 0,
72
+  touchMoveStopPropagation: false,
73
+  touchStartPreventDefault: true,
74
+  touchStartForcePreventDefault: false,
75
+  touchReleaseOnEdges: false,
76
+
77
+  // Unique Navigation Elements
78
+  uniqueNavElements: true,
79
+
80
+  // Resistance
81
+  resistance: true,
82
+  resistanceRatio: 0.85,
83
+
84
+  // Progress
85
+  watchSlidesProgress: false,
86
+  watchSlidesVisibility: false,
87
+
88
+  // Cursor
89
+  grabCursor: false,
90
+
91
+  // Clicks
92
+  preventClicks: true,
93
+  preventClicksPropagation: true,
94
+  slideToClickedSlide: false,
95
+
96
+  // Images
97
+  preloadImages: true,
98
+  updateOnImagesReady: true,
99
+
100
+  // loop
101
+  loop: false,
102
+  loopAdditionalSlides: 0,
103
+  loopedSlides: null,
104
+  loopFillGroupWithBlank: false,
105
+
106
+  // Swiping/no swiping
107
+  allowSlidePrev: true,
108
+  allowSlideNext: true,
109
+  swipeHandler: null, // '.swipe-handler',
110
+  noSwiping: true,
111
+  noSwipingClass: 'swiper-no-swiping',
112
+  noSwipingSelector: null,
113
+
114
+  // Passive Listeners
115
+  passiveListeners: true,
116
+
117
+  // NS
118
+  containerModifierClass: 'swiper-container-', // NEW
119
+  slideClass: 'swiper-slide',
120
+  slideBlankClass: 'swiper-slide-invisible-blank',
121
+  slideActiveClass: 'swiper-slide-active',
122
+  slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
123
+  slideVisibleClass: 'swiper-slide-visible',
124
+  slideDuplicateClass: 'swiper-slide-duplicate',
125
+  slideNextClass: 'swiper-slide-next',
126
+  slideDuplicateNextClass: 'swiper-slide-duplicate-next',
127
+  slidePrevClass: 'swiper-slide-prev',
128
+  slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
129
+  wrapperClass: 'swiper-wrapper',
130
+
131
+  // Callbacks
132
+  runCallbacksOnInit: true,
133
+};
0 134
new file mode 100644
... ...
@@ -0,0 +1,119 @@
1
+import { document } from 'ssr-window';
2
+import Device from '../../../utils/device';
3
+import Support from '../../../utils/support';
4
+
5
+import onTouchStart from './onTouchStart';
6
+import onTouchMove from './onTouchMove';
7
+import onTouchEnd from './onTouchEnd';
8
+import onResize from './onResize';
9
+import onClick from './onClick';
10
+import onScroll from './onScroll';
11
+
12
+let dummyEventAttached = false;
13
+function dummyEventListener() {}
14
+
15
+function attachEvents() {
16
+  const swiper = this;
17
+  const {
18
+    params, touchEvents, el, wrapperEl,
19
+  } = swiper;
20
+
21
+  swiper.onTouchStart = onTouchStart.bind(swiper);
22
+  swiper.onTouchMove = onTouchMove.bind(swiper);
23
+  swiper.onTouchEnd = onTouchEnd.bind(swiper);
24
+  if (params.cssMode) {
25
+    swiper.onScroll = onScroll.bind(swiper);
26
+  }
27
+
28
+  swiper.onClick = onClick.bind(swiper);
29
+
30
+  const capture = !!params.nested;
31
+
32
+  // Touch Events
33
+  if (!Support.touch && Support.pointerEvents) {
34
+    el.addEventListener(touchEvents.start, swiper.onTouchStart, false);
35
+    document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
36
+    document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
37
+  } else {
38
+    if (Support.touch) {
39
+      const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
40
+      el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
41
+      el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture);
42
+      el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
43
+      if (touchEvents.cancel) {
44
+        el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
45
+      }
46
+      if (!dummyEventAttached) {
47
+        document.addEventListener('touchstart', dummyEventListener);
48
+        dummyEventAttached = true;
49
+      }
50
+    }
51
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
52
+      el.addEventListener('mousedown', swiper.onTouchStart, false);
53
+      document.addEventListener('mousemove', swiper.onTouchMove, capture);
54
+      document.addEventListener('mouseup', swiper.onTouchEnd, false);
55
+    }
56
+  }
57
+  // Prevent Links Clicks
58
+  if (params.preventClicks || params.preventClicksPropagation) {
59
+    el.addEventListener('click', swiper.onClick, true);
60
+  }
61
+  if (params.cssMode) {
62
+    wrapperEl.addEventListener('scroll', swiper.onScroll);
63
+  }
64
+
65
+  // Resize handler
66
+  if (params.updateOnWindowResize) {
67
+    swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
68
+  } else {
69
+    swiper.on('observerUpdate', onResize, true);
70
+  }
71
+}
72
+
73
+function detachEvents() {
74
+  const swiper = this;
75
+
76
+  const {
77
+    params, touchEvents, el, wrapperEl,
78
+  } = swiper;
79
+
80
+  const capture = !!params.nested;
81
+
82
+  // Touch Events
83
+  if (!Support.touch && Support.pointerEvents) {
84
+    el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
85
+    document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
86
+    document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
87
+  } else {
88
+    if (Support.touch) {
89
+      const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
90
+      el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
91
+      el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
92
+      el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
93
+      if (touchEvents.cancel) {
94
+        el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);
95
+      }
96
+    }
97
+    if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
98
+      el.removeEventListener('mousedown', swiper.onTouchStart, false);
99
+      document.removeEventListener('mousemove', swiper.onTouchMove, capture);
100
+      document.removeEventListener('mouseup', swiper.onTouchEnd, false);
101
+    }
102
+  }
103
+  // Prevent Links Clicks
104
+  if (params.preventClicks || params.preventClicksPropagation) {
105
+    el.removeEventListener('click', swiper.onClick, true);
106
+  }
107
+
108
+  if (params.cssMode) {
109
+    wrapperEl.removeEventListener('scroll', swiper.onScroll);
110
+  }
111
+
112
+  // Resize handler
113
+  swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
114
+}
115
+
116
+export default {
117
+  attachEvents,
118
+  detachEvents,
119
+};
0 120
new file mode 100644
... ...
@@ -0,0 +1,10 @@
1
+export default function (e) {
2
+  const swiper = this;
3
+  if (!swiper.allowClick) {
4
+    if (swiper.params.preventClicks) e.preventDefault();
5
+    if (swiper.params.preventClicksPropagation && swiper.animating) {
6
+      e.stopPropagation();
7
+      e.stopImmediatePropagation();
8
+    }
9
+  }
10
+}
0 11
new file mode 100644
... ...
@@ -0,0 +1,40 @@
1
+export default function () {
2
+  const swiper = this;
3
+
4
+  const { params, el } = swiper;
5
+
6
+  if (el && el.offsetWidth === 0) return;
7
+
8
+  // Breakpoints
9
+  if (params.breakpoints) {
10
+    swiper.setBreakpoint();
11
+  }
12
+
13
+  // Save locks
14
+  const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;
15
+
16
+  // Disable locks on resize
17
+  swiper.allowSlideNext = true;
18
+  swiper.allowSlidePrev = true;
19
+
20
+  swiper.updateSize();
21
+  swiper.updateSlides();
22
+
23
+  swiper.updateSlidesClasses();
24
+  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
25
+    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
26
+  } else {
27
+    swiper.slideTo(swiper.activeIndex, 0, false, true);
28
+  }
29
+
30
+  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
31
+    swiper.autoplay.run();
32
+  }
33
+  // Return locks after resize
34
+  swiper.allowSlidePrev = allowSlidePrev;
35
+  swiper.allowSlideNext = allowSlideNext;
36
+
37
+  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
38
+    swiper.checkOverflow();
39
+  }
40
+}
0 41
new file mode 100644
... ...
@@ -0,0 +1,32 @@
1
+export default function () {
2
+  const swiper = this;
3
+  const { wrapperEl, rtlTranslate } = swiper;
4
+  swiper.previousTranslate = swiper.translate;
5
+  if (swiper.isHorizontal()) {
6
+    if (rtlTranslate) {
7
+      swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft);
8
+    } else {
9
+      swiper.translate = -wrapperEl.scrollLeft;
10
+    }
11
+  } else {
12
+    swiper.translate = -wrapperEl.scrollTop;
13
+  }
14
+  // eslint-disable-next-line
15
+  if (swiper.translate === -0) swiper.translate = 0;
16
+
17
+  swiper.updateActiveIndex();
18
+  swiper.updateSlidesClasses();
19
+
20
+  let newProgress;
21
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
22
+  if (translatesDiff === 0) {
23
+    newProgress = 0;
24
+  } else {
25
+    newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);
26
+  }
27
+  if (newProgress !== swiper.progress) {
28
+    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
29
+  }
30
+
31
+  swiper.emit('setTranslate', swiper.translate, false);
32
+}
0 33
new file mode 100644
... ...
@@ -0,0 +1,293 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function (event) {
4
+  const swiper = this;
5
+  const data = swiper.touchEventsData;
6
+
7
+  const {
8
+    params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid,
9
+  } = swiper;
10
+  let e = event;
11
+  if (e.originalEvent) e = e.originalEvent;
12
+  if (data.allowTouchCallbacks) {
13
+    swiper.emit('touchEnd', e);
14
+  }
15
+  data.allowTouchCallbacks = false;
16
+  if (!data.isTouched) {
17
+    if (data.isMoved && params.grabCursor) {
18
+      swiper.setGrabCursor(false);
19
+    }
20
+    data.isMoved = false;
21
+    data.startMoving = false;
22
+    return;
23
+  }
24
+  // Return Grab Cursor
25
+  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
26
+    swiper.setGrabCursor(false);
27
+  }
28
+
29
+  // Time diff
30
+  const touchEndTime = Utils.now();
31
+  const timeDiff = touchEndTime - data.touchStartTime;
32
+
33
+  // Tap, doubleTap, Click
34
+  if (swiper.allowClick) {
35
+    swiper.updateClickedSlide(e);
36
+    swiper.emit('tap click', e);
37
+    if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
38
+      swiper.emit('doubleTap doubleClick', e);
39
+    }
40
+  }
41
+
42
+  data.lastClickTime = Utils.now();
43
+  Utils.nextTick(() => {
44
+    if (!swiper.destroyed) swiper.allowClick = true;
45
+  });
46
+
47
+  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
48
+    data.isTouched = false;
49
+    data.isMoved = false;
50
+    data.startMoving = false;
51
+    return;
52
+  }
53
+  data.isTouched = false;
54
+  data.isMoved = false;
55
+  data.startMoving = false;
56
+
57
+  let currentPos;
58
+  if (params.followFinger) {
59
+    currentPos = rtl ? swiper.translate : -swiper.translate;
60
+  } else {
61
+    currentPos = -data.currentTranslate;
62
+  }
63
+
64
+  if (params.cssMode) {
65
+    return;
66
+  }
67
+
68
+  if (params.freeMode) {
69
+    if (currentPos < -swiper.minTranslate()) {
70
+      swiper.slideTo(swiper.activeIndex);
71
+      return;
72
+    }
73
+    if (currentPos > -swiper.maxTranslate()) {
74
+      if (swiper.slides.length < snapGrid.length) {
75
+        swiper.slideTo(snapGrid.length - 1);
76
+      } else {
77
+        swiper.slideTo(swiper.slides.length - 1);
78
+      }
79
+      return;
80
+    }
81
+
82
+    if (params.freeModeMomentum) {
83
+      if (data.velocities.length > 1) {
84
+        const lastMoveEvent = data.velocities.pop();
85
+        const velocityEvent = data.velocities.pop();
86
+
87
+        const distance = lastMoveEvent.position - velocityEvent.position;
88
+        const time = lastMoveEvent.time - velocityEvent.time;
89
+        swiper.velocity = distance / time;
90
+        swiper.velocity /= 2;
91
+        if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
92
+          swiper.velocity = 0;
93
+        }
94
+        // this implies that the user stopped moving a finger then released.
95
+        // There would be no events with distance zero, so the last event is stale.
96
+        if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
97
+          swiper.velocity = 0;
98
+        }
99
+      } else {
100
+        swiper.velocity = 0;
101
+      }
102
+      swiper.velocity *= params.freeModeMomentumVelocityRatio;
103
+
104
+      data.velocities.length = 0;
105
+      let momentumDuration = 1000 * params.freeModeMomentumRatio;
106
+      const momentumDistance = swiper.velocity * momentumDuration;
107
+
108
+      let newPosition = swiper.translate + momentumDistance;
109
+      if (rtl) newPosition = -newPosition;
110
+
111
+      let doBounce = false;
112
+      let afterBouncePosition;
113
+      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
114
+      let needsLoopFix;
115
+      if (newPosition < swiper.maxTranslate()) {
116
+        if (params.freeModeMomentumBounce) {
117
+          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
118
+            newPosition = swiper.maxTranslate() - bounceAmount;
119
+          }
120
+          afterBouncePosition = swiper.maxTranslate();
121
+          doBounce = true;
122
+          data.allowMomentumBounce = true;
123
+        } else {
124
+          newPosition = swiper.maxTranslate();
125
+        }
126
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
127
+      } else if (newPosition > swiper.minTranslate()) {
128
+        if (params.freeModeMomentumBounce) {
129
+          if (newPosition - swiper.minTranslate() > bounceAmount) {
130
+            newPosition = swiper.minTranslate() + bounceAmount;
131
+          }
132
+          afterBouncePosition = swiper.minTranslate();
133
+          doBounce = true;
134
+          data.allowMomentumBounce = true;
135
+        } else {
136
+          newPosition = swiper.minTranslate();
137
+        }
138
+        if (params.loop && params.centeredSlides) needsLoopFix = true;
139
+      } else if (params.freeModeSticky) {
140
+        let nextSlide;
141
+        for (let j = 0; j < snapGrid.length; j += 1) {
142
+          if (snapGrid[j] > -newPosition) {
143
+            nextSlide = j;
144
+            break;
145
+          }
146
+        }
147
+
148
+        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
149
+          newPosition = snapGrid[nextSlide];
150
+        } else {
151
+          newPosition = snapGrid[nextSlide - 1];
152
+        }
153
+        newPosition = -newPosition;
154
+      }
155
+      if (needsLoopFix) {
156
+        swiper.once('transitionEnd', () => {
157
+          swiper.loopFix();
158
+        });
159
+      }
160
+      // Fix duration
161
+      if (swiper.velocity !== 0) {
162
+        if (rtl) {
163
+          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
164
+        } else {
165
+          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
166
+        }
167
+        if (params.freeModeSticky) {
168
+          // If freeModeSticky is active and the user ends a swipe with a slow-velocity
169
+          // event, then durations can be 20+ seconds to slide one (or zero!) slides.
170
+          // It's easy to see this when simulating touch with mouse events. To fix this,
171
+          // limit single-slide swipes to the default slide duration. This also has the
172
+          // nice side effect of matching slide speed if the user stopped moving before
173
+          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.
174
+          // For faster swipes, also apply limits (albeit higher ones).
175
+          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
176
+          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
177
+          if (moveDistance < currentSlideSize) {
178
+            momentumDuration = params.speed;
179
+          } else if (moveDistance < 2 * currentSlideSize) {
180
+            momentumDuration = params.speed * 1.5;
181
+          } else {
182
+            momentumDuration = params.speed * 2.5;
183
+          }
184
+        }
185
+      } else if (params.freeModeSticky) {
186
+        swiper.slideToClosest();
187
+        return;
188
+      }
189
+
190
+      if (params.freeModeMomentumBounce && doBounce) {
191
+        swiper.updateProgress(afterBouncePosition);
192
+        swiper.setTransition(momentumDuration);
193
+        swiper.setTranslate(newPosition);
194
+        swiper.transitionStart(true, swiper.swipeDirection);
195
+        swiper.animating = true;
196
+        $wrapperEl.transitionEnd(() => {
197
+          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
198
+          swiper.emit('momentumBounce');
199
+          swiper.setTransition(params.speed);
200
+          setTimeout(() => {
201
+            swiper.setTranslate(afterBouncePosition);
202
+            $wrapperEl.transitionEnd(() => {
203
+              if (!swiper || swiper.destroyed) return;
204
+              swiper.transitionEnd();
205
+            });
206
+          }, 0);
207
+        });
208
+      } else if (swiper.velocity) {
209
+        swiper.updateProgress(newPosition);
210
+        swiper.setTransition(momentumDuration);
211
+        swiper.setTranslate(newPosition);
212
+        swiper.transitionStart(true, swiper.swipeDirection);
213
+        if (!swiper.animating) {
214
+          swiper.animating = true;
215
+          $wrapperEl.transitionEnd(() => {
216
+            if (!swiper || swiper.destroyed) return;
217
+            swiper.transitionEnd();
218
+          });
219
+        }
220
+      } else {
221
+        swiper.updateProgress(newPosition);
222
+      }
223
+
224
+      swiper.updateActiveIndex();
225
+      swiper.updateSlidesClasses();
226
+    } else if (params.freeModeSticky) {
227
+      swiper.slideToClosest();
228
+      return;
229
+    }
230
+
231
+    if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
232
+      swiper.updateProgress();
233
+      swiper.updateActiveIndex();
234
+      swiper.updateSlidesClasses();
235
+    }
236
+    return;
237
+  }
238
+
239
+  // Find current slide
240
+  let stopIndex = 0;
241
+  let groupSize = swiper.slidesSizesGrid[0];
242
+  for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) {
243
+    const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
244
+    if (typeof slidesGrid[i + increment] !== 'undefined') {
245
+      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
246
+        stopIndex = i;
247
+        groupSize = slidesGrid[i + increment] - slidesGrid[i];
248
+      }
249
+    } else if (currentPos >= slidesGrid[i]) {
250
+      stopIndex = i;
251
+      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
252
+    }
253
+  }
254
+
255
+  // Find current slide size
256
+  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
257
+  const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup);
258
+
259
+  if (timeDiff > params.longSwipesMs) {
260
+    // Long touches
261
+    if (!params.longSwipes) {
262
+      swiper.slideTo(swiper.activeIndex);
263
+      return;
264
+    }
265
+    if (swiper.swipeDirection === 'next') {
266
+      if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);
267
+      else swiper.slideTo(stopIndex);
268
+    }
269
+    if (swiper.swipeDirection === 'prev') {
270
+      if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment);
271
+      else swiper.slideTo(stopIndex);
272
+    }
273
+  } else {
274
+    // Short swipes
275
+    if (!params.shortSwipes) {
276
+      swiper.slideTo(swiper.activeIndex);
277
+      return;
278
+    }
279
+    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
280
+    if (!isNavButtonTarget) {
281
+      if (swiper.swipeDirection === 'next') {
282
+        swiper.slideTo(stopIndex + increment);
283
+      }
284
+      if (swiper.swipeDirection === 'prev') {
285
+        swiper.slideTo(stopIndex);
286
+      }
287
+    } else if (e.target === swiper.navigation.nextEl) {
288
+      swiper.slideTo(stopIndex + increment);
289
+    } else {
290
+      swiper.slideTo(stopIndex);
291
+    }
292
+  }
293
+}
0 294
new file mode 100644
... ...
@@ -0,0 +1,207 @@
1
+import { document } from 'ssr-window';
2
+import $ from '../../../utils/dom';
3
+import Utils from '../../../utils/utils';
4
+
5
+export default function (event) {
6
+  const swiper = this;
7
+  const data = swiper.touchEventsData;
8
+  const { params, touches, rtlTranslate: rtl } = swiper;
9
+  let e = event;
10
+  if (e.originalEvent) e = e.originalEvent;
11
+  if (!data.isTouched) {
12
+    if (data.startMoving && data.isScrolling) {
13
+      swiper.emit('touchMoveOpposite', e);
14
+    }
15
+    return;
16
+  }
17
+  if (data.isTouchEvent && e.type !== 'touchmove') return;
18
+  const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);
19
+  const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;
20
+  const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;
21
+  if (e.preventedByNestedSwiper) {
22
+    touches.startX = pageX;
23
+    touches.startY = pageY;
24
+    return;
25
+  }
26
+  if (!swiper.allowTouchMove) {
27
+    // isMoved = true;
28
+    swiper.allowClick = false;
29
+    if (data.isTouched) {
30
+      Utils.extend(touches, {
31
+        startX: pageX,
32
+        startY: pageY,
33
+        currentX: pageX,
34
+        currentY: pageY,
35
+      });
36
+      data.touchStartTime = Utils.now();
37
+    }
38
+    return;
39
+  }
40
+  if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
41
+    if (swiper.isVertical()) {
42
+      // Vertical
43
+      if (
44
+        (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())
45
+        || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
46
+      ) {
47
+        data.isTouched = false;
48
+        data.isMoved = false;
49
+        return;
50
+      }
51
+    } else if (
52
+      (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())
53
+      || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
54
+    ) {
55
+      return;
56
+    }
57
+  }
58
+  if (data.isTouchEvent && document.activeElement) {
59
+    if (e.target === document.activeElement && $(e.target).is(data.formElements)) {
60
+      data.isMoved = true;
61
+      swiper.allowClick = false;
62
+      return;
63
+    }
64
+  }
65
+  if (data.allowTouchCallbacks) {
66
+    swiper.emit('touchMove', e);
67
+  }
68
+  if (e.targetTouches && e.targetTouches.length > 1) return;
69
+
70
+  touches.currentX = pageX;
71
+  touches.currentY = pageY;
72
+
73
+  const diffX = touches.currentX - touches.startX;
74
+  const diffY = touches.currentY - touches.startY;
75
+  if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return;
76
+
77
+  if (typeof data.isScrolling === 'undefined') {
78
+    let touchAngle;
79
+    if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
80
+      data.isScrolling = false;
81
+    } else {
82
+      // eslint-disable-next-line
83
+      if ((diffX * diffX) + (diffY * diffY) >= 25) {
84
+        touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
85
+        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
86
+      }
87
+    }
88
+  }
89
+  if (data.isScrolling) {
90
+    swiper.emit('touchMoveOpposite', e);
91
+  }
92
+  if (typeof data.startMoving === 'undefined') {
93
+    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
94
+      data.startMoving = true;
95
+    }
96
+  }
97
+  if (data.isScrolling) {
98
+    data.isTouched = false;
99
+    return;
100
+  }
101
+  if (!data.startMoving) {
102
+    return;
103
+  }
104
+  swiper.allowClick = false;
105
+  if (!params.cssMode && e.cancelable) {
106
+    e.preventDefault();
107
+  }
108
+  if (params.touchMoveStopPropagation && !params.nested) {
109
+    e.stopPropagation();
110
+  }
111
+
112
+  if (!data.isMoved) {
113
+    if (params.loop) {
114
+      swiper.loopFix();
115
+    }
116
+    data.startTranslate = swiper.getTranslate();
117
+    swiper.setTransition(0);
118
+    if (swiper.animating) {
119
+      swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
120
+    }
121
+    data.allowMomentumBounce = false;
122
+    // Grab Cursor
123
+    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
124
+      swiper.setGrabCursor(true);
125
+    }
126
+    swiper.emit('sliderFirstMove', e);
127
+  }
128
+  swiper.emit('sliderMove', e);
129
+  data.isMoved = true;
130
+
131
+  let diff = swiper.isHorizontal() ? diffX : diffY;
132
+  touches.diff = diff;
133
+
134
+  diff *= params.touchRatio;
135
+  if (rtl) diff = -diff;
136
+
137
+  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
138
+  data.currentTranslate = diff + data.startTranslate;
139
+
140
+  let disableParentSwiper = true;
141
+  let resistanceRatio = params.resistanceRatio;
142
+  if (params.touchReleaseOnEdges) {
143
+    resistanceRatio = 0;
144
+  }
145
+  if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
146
+    disableParentSwiper = false;
147
+    if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio);
148
+  } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
149
+    disableParentSwiper = false;
150
+    if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio);
151
+  }
152
+
153
+  if (disableParentSwiper) {
154
+    e.preventedByNestedSwiper = true;
155
+  }
156
+
157
+  // Directions locks
158
+  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
159
+    data.currentTranslate = data.startTranslate;
160
+  }
161
+  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
162
+    data.currentTranslate = data.startTranslate;
163
+  }
164
+
165
+
166
+  // Threshold
167
+  if (params.threshold > 0) {
168
+    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
169
+      if (!data.allowThresholdMove) {
170
+        data.allowThresholdMove = true;
171
+        touches.startX = touches.currentX;
172
+        touches.startY = touches.currentY;
173
+        data.currentTranslate = data.startTranslate;
174
+        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
175
+        return;
176
+      }
177
+    } else {
178
+      data.currentTranslate = data.startTranslate;
179
+      return;
180
+    }
181
+  }
182
+
183
+  if (!params.followFinger || params.cssMode) return;
184
+
185
+  // Update active index in free mode
186
+  if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
187
+    swiper.updateActiveIndex();
188
+    swiper.updateSlidesClasses();
189
+  }
190
+  if (params.freeMode) {
191
+    // Velocity
192
+    if (data.velocities.length === 0) {
193
+      data.velocities.push({
194
+        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
195
+        time: data.touchStartTime,
196
+      });
197
+    }
198
+    data.velocities.push({
199
+      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
200
+      time: Utils.now(),
201
+    });
202
+  }
203
+  // Update progress
204
+  swiper.updateProgress(data.currentTranslate);
205
+  // Update translate
206
+  swiper.setTranslate(data.currentTranslate);
207
+}
0 208
new file mode 100644
... ...
@@ -0,0 +1,81 @@
1
+import { window, document } from 'ssr-window';
2
+import $ from '../../../utils/dom';
3
+import Utils from '../../../utils/utils';
4
+
5
+export default function (event) {
6
+  const swiper = this;
7
+  const data = swiper.touchEventsData;
8
+  const { params, touches } = swiper;
9
+
10
+  if (swiper.animating && params.preventInteractionOnTransition) {
11
+    return;
12
+  }
13
+  let e = event;
14
+  if (e.originalEvent) e = e.originalEvent;
15
+  const $targetEl = $(e.target);
16
+
17
+  if (params.touchEventsTarget === 'wrapper') {
18
+    if (!$targetEl.closest(swiper.wrapperEl).length) return;
19
+  }
20
+  data.isTouchEvent = e.type === 'touchstart';
21
+  if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
22
+  if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
23
+  if (data.isTouched && data.isMoved) return;
24
+  if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) {
25
+    swiper.allowClick = true;
26
+    return;
27
+  }
28
+  if (params.swipeHandler) {
29
+    if (!$targetEl.closest(params.swipeHandler)[0]) return;
30
+  }
31
+
32
+  touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
33
+  touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
34
+  const startX = touches.currentX;
35
+  const startY = touches.currentY;
36
+
37
+  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
38
+
39
+  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
40
+  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
41
+  if (
42
+    edgeSwipeDetection
43
+    && ((startX <= edgeSwipeThreshold)
44
+    || (startX >= window.screen.width - edgeSwipeThreshold))
45
+  ) {
46
+    return;
47
+  }
48
+
49
+  Utils.extend(data, {
50
+    isTouched: true,
51
+    isMoved: false,
52
+    allowTouchCallbacks: true,
53
+    isScrolling: undefined,
54
+    startMoving: undefined,
55
+  });
56
+
57
+  touches.startX = startX;
58
+  touches.startY = startY;
59
+  data.touchStartTime = Utils.now();
60
+  swiper.allowClick = true;
61
+  swiper.updateSize();
62
+  swiper.swipeDirection = undefined;
63
+  if (params.threshold > 0) data.allowThresholdMove = false;
64
+  if (e.type !== 'touchstart') {
65
+    let preventDefault = true;
66
+    if ($targetEl.is(data.formElements)) preventDefault = false;
67
+    if (
68
+      document.activeElement
69
+      && $(document.activeElement).is(data.formElements)
70
+      && document.activeElement !== $targetEl[0]
71
+    ) {
72
+      document.activeElement.blur();
73
+    }
74
+
75
+    const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
76
+    if (params.touchStartForcePreventDefault || shouldPreventDefault) {
77
+      e.preventDefault();
78
+    }
79
+  }
80
+  swiper.emit('touchStart', e);
81
+}
0 82
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+import setGrabCursor from './setGrabCursor';
2
+import unsetGrabCursor from './unsetGrabCursor';
3
+
4
+export default {
5
+  setGrabCursor,
6
+  unsetGrabCursor,
7
+};
0 8
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function (moving) {
4
+  const swiper = this;
5
+  if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
6
+  const el = swiper.el;
7
+  el.style.cursor = 'move';
8
+  el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
9
+  el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
10
+  el.style.cursor = moving ? 'grabbing' : 'grab';
11
+}
0 12
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function () {
4
+  const swiper = this;
5
+  if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return;
6
+  swiper.el.style.cursor = '';
7
+}
0 8
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+import loadImage from './loadImage';
2
+import preloadImages from './preloadImages';
3
+
4
+export default {
5
+  loadImage,
6
+  preloadImages,
7
+};
0 8
new file mode 100644
... ...
@@ -0,0 +1,32 @@
1
+import { window } from 'ssr-window';
2
+import $ from '../../../utils/dom';
3
+
4
+export default function (imageEl, src, srcset, sizes, checkForComplete, callback) {
5
+  let image;
6
+  function onReady() {
7
+    if (callback) callback();
8
+  }
9
+  const isPicture = $(imageEl).parent('picture')[0];
10
+
11
+  if (!isPicture && (!imageEl.complete || !checkForComplete)) {
12
+    if (src) {
13
+      image = new window.Image();
14
+      image.onload = onReady;
15
+      image.onerror = onReady;
16
+      if (sizes) {
17
+        image.sizes = sizes;
18
+      }
19
+      if (srcset) {
20
+        image.srcset = srcset;
21
+      }
22
+      if (src) {
23
+        image.src = src;
24
+      }
25
+    } else {
26
+      onReady();
27
+    }
28
+  } else {
29
+    // image already loaded...
30
+    onReady();
31
+  }
32
+}
0 33
new file mode 100644
... ...
@@ -0,0 +1,23 @@
1
+export default function () {
2
+  const swiper = this;
3
+  swiper.imagesToLoad = swiper.$el.find('img');
4
+  function onReady() {
5
+    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
6
+    if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
7
+    if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
8
+      if (swiper.params.updateOnImagesReady) swiper.update();
9
+      swiper.emit('imagesReady');
10
+    }
11
+  }
12
+  for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {
13
+    const imageEl = swiper.imagesToLoad[i];
14
+    swiper.loadImage(
15
+      imageEl,
16
+      imageEl.currentSrc || imageEl.getAttribute('src'),
17
+      imageEl.srcset || imageEl.getAttribute('srcset'),
18
+      imageEl.sizes || imageEl.getAttribute('sizes'),
19
+      true,
20
+      onReady
21
+    );
22
+  }
23
+}
0 24
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+import loopCreate from './loopCreate';
2
+import loopFix from './loopFix';
3
+import loopDestroy from './loopDestroy';
4
+
5
+export default {
6
+  loopCreate,
7
+  loopFix,
8
+  loopDestroy,
9
+};
0 10
new file mode 100644
... ...
@@ -0,0 +1,45 @@
1
+import { document } from 'ssr-window';
2
+import $ from '../../../utils/dom';
3
+
4
+export default function () {
5
+  const swiper = this;
6
+  const { params, $wrapperEl } = swiper;
7
+  // Remove duplicated slides
8
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();
9
+
10
+  let slides = $wrapperEl.children(`.${params.slideClass}`);
11
+
12
+  if (params.loopFillGroupWithBlank) {
13
+    const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
14
+    if (blankSlidesNum !== params.slidesPerGroup) {
15
+      for (let i = 0; i < blankSlidesNum; i += 1) {
16
+        const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);
17
+        $wrapperEl.append(blankNode);
18
+      }
19
+      slides = $wrapperEl.children(`.${params.slideClass}`);
20
+    }
21
+  }
22
+
23
+  if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
24
+
25
+  swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));
26
+  swiper.loopedSlides += params.loopAdditionalSlides;
27
+  if (swiper.loopedSlides > slides.length) {
28
+    swiper.loopedSlides = slides.length;
29
+  }
30
+
31
+  const prependSlides = [];
32
+  const appendSlides = [];
33
+  slides.each((index, el) => {
34
+    const slide = $(el);
35
+    if (index < swiper.loopedSlides) appendSlides.push(el);
36
+    if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
37
+    slide.attr('data-swiper-slide-index', index);
38
+  });
39
+  for (let i = 0; i < appendSlides.length; i += 1) {
40
+    $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
41
+  }
42
+  for (let i = prependSlides.length - 1; i >= 0; i -= 1) {
43
+    $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));
44
+  }
45
+}
0 46
new file mode 100644
... ...
@@ -0,0 +1,6 @@
1
+export default function () {
2
+  const swiper = this;
3
+  const { $wrapperEl, params, slides } = swiper;
4
+  $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();
5
+  slides.removeAttr('data-swiper-slide-index');
6
+}
0 7
new file mode 100644
... ...
@@ -0,0 +1,37 @@
1
+export default function () {
2
+  const swiper = this;
3
+
4
+  swiper.emit('beforeLoopFix');
5
+
6
+  const {
7
+    activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl,
8
+  } = swiper;
9
+  let newIndex;
10
+  swiper.allowSlidePrev = true;
11
+  swiper.allowSlideNext = true;
12
+
13
+  const snapTranslate = -snapGrid[activeIndex];
14
+  const diff = snapTranslate - swiper.getTranslate();
15
+
16
+  // Fix For Negative Oversliding
17
+  if (activeIndex < loopedSlides) {
18
+    newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
19
+    newIndex += loopedSlides;
20
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
21
+    if (slideChanged && diff !== 0) {
22
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
23
+    }
24
+  } else if (activeIndex >= slides.length - loopedSlides) {
25
+    // Fix For Positive Oversliding
26
+    newIndex = -slides.length + activeIndex + loopedSlides;
27
+    newIndex += loopedSlides;
28
+    const slideChanged = swiper.slideTo(newIndex, 0, false, true);
29
+    if (slideChanged && diff !== 0) {
30
+      swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
31
+    }
32
+  }
33
+  swiper.allowSlidePrev = allowSlidePrev;
34
+  swiper.allowSlideNext = allowSlideNext;
35
+
36
+  swiper.emit('loopFix');
37
+}
0 38
new file mode 100644
... ...
@@ -0,0 +1,54 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function (index, slides) {
4
+  const swiper = this;
5
+  const { $wrapperEl, params, activeIndex } = swiper;
6
+  let activeIndexBuffer = activeIndex;
7
+  if (params.loop) {
8
+    activeIndexBuffer -= swiper.loopedSlides;
9
+    swiper.loopDestroy();
10
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
11
+  }
12
+  const baseLength = swiper.slides.length;
13
+  if (index <= 0) {
14
+    swiper.prependSlide(slides);
15
+    return;
16
+  }
17
+  if (index >= baseLength) {
18
+    swiper.appendSlide(slides);
19
+    return;
20
+  }
21
+  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
22
+
23
+  const slidesBuffer = [];
24
+  for (let i = baseLength - 1; i >= index; i -= 1) {
25
+    const currentSlide = swiper.slides.eq(i);
26
+    currentSlide.remove();
27
+    slidesBuffer.unshift(currentSlide);
28
+  }
29
+
30
+  if (typeof slides === 'object' && 'length' in slides) {
31
+    for (let i = 0; i < slides.length; i += 1) {
32
+      if (slides[i]) $wrapperEl.append(slides[i]);
33
+    }
34
+    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
35
+  } else {
36
+    $wrapperEl.append(slides);
37
+  }
38
+
39
+  for (let i = 0; i < slidesBuffer.length; i += 1) {
40
+    $wrapperEl.append(slidesBuffer[i]);
41
+  }
42
+
43
+  if (params.loop) {
44
+    swiper.loopCreate();
45
+  }
46
+  if (!(params.observer && Support.observer)) {
47
+    swiper.update();
48
+  }
49
+  if (params.loop) {
50
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
51
+  } else {
52
+    swiper.slideTo(newActiveIndex, 0, false);
53
+  }
54
+}
0 55
new file mode 100644
... ...
@@ -0,0 +1,22 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function (slides) {
4
+  const swiper = this;
5
+  const { $wrapperEl, params } = swiper;
6
+  if (params.loop) {
7
+    swiper.loopDestroy();
8
+  }
9
+  if (typeof slides === 'object' && 'length' in slides) {
10
+    for (let i = 0; i < slides.length; i += 1) {
11
+      if (slides[i]) $wrapperEl.append(slides[i]);
12
+    }
13
+  } else {
14
+    $wrapperEl.append(slides);
15
+  }
16
+  if (params.loop) {
17
+    swiper.loopCreate();
18
+  }
19
+  if (!(params.observer && Support.observer)) {
20
+    swiper.update();
21
+  }
22
+}
0 23
new file mode 100644
... ...
@@ -0,0 +1,13 @@
1
+import appendSlide from './appendSlide';
2
+import prependSlide from './prependSlide';
3
+import addSlide from './addSlide';
4
+import removeSlide from './removeSlide';
5
+import removeAllSlides from './removeAllSlides';
6
+
7
+export default {
8
+  appendSlide,
9
+  prependSlide,
10
+  addSlide,
11
+  removeSlide,
12
+  removeAllSlides,
13
+};
0 14
new file mode 100644
... ...
@@ -0,0 +1,26 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function (slides) {
4
+  const swiper = this;
5
+  const { params, $wrapperEl, activeIndex } = swiper;
6
+
7
+  if (params.loop) {
8
+    swiper.loopDestroy();
9
+  }
10
+  let newActiveIndex = activeIndex + 1;
11
+  if (typeof slides === 'object' && 'length' in slides) {
12
+    for (let i = 0; i < slides.length; i += 1) {
13
+      if (slides[i]) $wrapperEl.prepend(slides[i]);
14
+    }
15
+    newActiveIndex = activeIndex + slides.length;
16
+  } else {
17
+    $wrapperEl.prepend(slides);
18
+  }
19
+  if (params.loop) {
20
+    swiper.loopCreate();
21
+  }
22
+  if (!(params.observer && Support.observer)) {
23
+    swiper.update();
24
+  }
25
+  swiper.slideTo(newActiveIndex, 0, false);
26
+}
0 27
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+export default function () {
2
+  const swiper = this;
3
+
4
+  const slidesIndexes = [];
5
+  for (let i = 0; i < swiper.slides.length; i += 1) {
6
+    slidesIndexes.push(i);
7
+  }
8
+  swiper.removeSlide(slidesIndexes);
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,42 @@
1
+import Support from '../../../utils/support';
2
+
3
+export default function (slidesIndexes) {
4
+  const swiper = this;
5
+  const { params, $wrapperEl, activeIndex } = swiper;
6
+
7
+  let activeIndexBuffer = activeIndex;
8
+  if (params.loop) {
9
+    activeIndexBuffer -= swiper.loopedSlides;
10
+    swiper.loopDestroy();
11
+    swiper.slides = $wrapperEl.children(`.${params.slideClass}`);
12
+  }
13
+  let newActiveIndex = activeIndexBuffer;
14
+  let indexToRemove;
15
+
16
+  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
17
+    for (let i = 0; i < slidesIndexes.length; i += 1) {
18
+      indexToRemove = slidesIndexes[i];
19
+      if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
20
+      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
21
+    }
22
+    newActiveIndex = Math.max(newActiveIndex, 0);
23
+  } else {
24
+    indexToRemove = slidesIndexes;
25
+    if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
26
+    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
27
+    newActiveIndex = Math.max(newActiveIndex, 0);
28
+  }
29
+
30
+  if (params.loop) {
31
+    swiper.loopCreate();
32
+  }
33
+
34
+  if (!(params.observer && Support.observer)) {
35
+    swiper.update();
36
+  }
37
+  if (params.loop) {
38
+    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
39
+  } else {
40
+    swiper.slideTo(newActiveIndex, 0, false);
41
+  }
42
+}
0 43
new file mode 100644
... ...
@@ -0,0 +1,17 @@
1
+import slideTo from './slideTo';
2
+import slideToLoop from './slideToLoop';
3
+import slideNext from './slideNext';
4
+import slidePrev from './slidePrev';
5
+import slideReset from './slideReset';
6
+import slideToClosest from './slideToClosest';
7
+import slideToClickedSlide from './slideToClickedSlide';
8
+
9
+export default {
10
+  slideTo,
11
+  slideToLoop,
12
+  slideNext,
13
+  slidePrev,
14
+  slideReset,
15
+  slideToClosest,
16
+  slideToClickedSlide,
17
+};
0 18
new file mode 100644
... ...
@@ -0,0 +1,13 @@
1
+/* eslint no-unused-vars: "off" */
2
+export default function (speed = this.params.speed, runCallbacks = true, internal) {
3
+  const swiper = this;
4
+  const { params, animating } = swiper;
5
+  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;
6
+  if (params.loop) {
7
+    if (animating) return false;
8
+    swiper.loopFix();
9
+    // eslint-disable-next-line
10
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
11
+  }
12
+  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
13
+}
0 14
new file mode 100644
... ...
@@ -0,0 +1,36 @@
1
+/* eslint no-unused-vars: "off" */
2
+export default function (speed = this.params.speed, runCallbacks = true, internal) {
3
+  const swiper = this;
4
+  const {
5
+    params, animating, snapGrid, slidesGrid, rtlTranslate,
6
+  } = swiper;
7
+
8
+  if (params.loop) {
9
+    if (animating) return false;
10
+    swiper.loopFix();
11
+    // eslint-disable-next-line
12
+    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
13
+  }
14
+  const translate = rtlTranslate ? swiper.translate : -swiper.translate;
15
+  function normalize(val) {
16
+    if (val < 0) return -Math.floor(Math.abs(val));
17
+    return Math.floor(val);
18
+  }
19
+  const normalizedTranslate = normalize(translate);
20
+  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
21
+  const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val));
22
+
23
+  const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
24
+  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
25
+  if (typeof prevSnap === 'undefined' && params.cssMode) {
26
+    snapGrid.forEach((snap) => {
27
+      if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;
28
+    });
29
+  }
30
+  let prevIndex;
31
+  if (typeof prevSnap !== 'undefined') {
32
+    prevIndex = slidesGrid.indexOf(prevSnap);
33
+    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
34
+  }
35
+  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
36
+}
0 37
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+/* eslint no-unused-vars: "off" */
2
+export default function (speed = this.params.speed, runCallbacks = true, internal) {
3
+  const swiper = this;
4
+  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
5
+}
0 6
new file mode 100644
... ...
@@ -0,0 +1,123 @@
1
+export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
2
+  const swiper = this;
3
+  let slideIndex = index;
4
+  if (slideIndex < 0) slideIndex = 0;
5
+
6
+  const {
7
+    params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl,
8
+  } = swiper;
9
+  if (swiper.animating && params.preventInteractionOnTransition) {
10
+    return false;
11
+  }
12
+
13
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
14
+  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
15
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
16
+
17
+  if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
18
+    swiper.emit('beforeSlideChangeStart');
19
+  }
20
+
21
+  const translate = -snapGrid[snapIndex];
22
+
23
+  // Update progress
24
+  swiper.updateProgress(translate);
25
+
26
+  // Normalize slideIndex
27
+  if (params.normalizeSlideIndex) {
28
+    for (let i = 0; i < slidesGrid.length; i += 1) {
29
+      if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
30
+        slideIndex = i;
31
+      }
32
+    }
33
+  }
34
+  // Directions locks
35
+  if (swiper.initialized && slideIndex !== activeIndex) {
36
+    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
37
+      return false;
38
+    }
39
+    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
40
+      if ((activeIndex || 0) !== slideIndex) return false;
41
+    }
42
+  }
43
+
44
+  let direction;
45
+  if (slideIndex > activeIndex) direction = 'next';
46
+  else if (slideIndex < activeIndex) direction = 'prev';
47
+  else direction = 'reset';
48
+
49
+
50
+  // Update Index
51
+  if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
52
+    swiper.updateActiveIndex(slideIndex);
53
+    // Update Height
54
+    if (params.autoHeight) {
55
+      swiper.updateAutoHeight();
56
+    }
57
+    swiper.updateSlidesClasses();
58
+    if (params.effect !== 'slide') {
59
+      swiper.setTranslate(translate);
60
+    }
61
+    if (direction !== 'reset') {
62
+      swiper.transitionStart(runCallbacks, direction);
63
+      swiper.transitionEnd(runCallbacks, direction);
64
+    }
65
+    return false;
66
+  }
67
+  if (params.cssMode) {
68
+    const isH = swiper.isHorizontal();
69
+    let t = -translate;
70
+    if (rtl) {
71
+      t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;
72
+    }
73
+    if (speed === 0) {
74
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
75
+    } else {
76
+      // eslint-disable-next-line
77
+      if (wrapperEl.scrollTo) {
78
+        wrapperEl.scrollTo({
79
+          [isH ? 'left' : 'top']: t,
80
+          behavior: 'smooth',
81
+        });
82
+      } else {
83
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
84
+      }
85
+    }
86
+    return true;
87
+  }
88
+
89
+  if (speed === 0) {
90
+    swiper.setTransition(0);
91
+    swiper.setTranslate(translate);
92
+    swiper.updateActiveIndex(slideIndex);
93
+    swiper.updateSlidesClasses();
94
+    swiper.emit('beforeTransitionStart', speed, internal);
95
+    swiper.transitionStart(runCallbacks, direction);
96
+    swiper.transitionEnd(runCallbacks, direction);
97
+  } else {
98
+    swiper.setTransition(speed);
99
+    swiper.setTranslate(translate);
100
+    swiper.updateActiveIndex(slideIndex);
101
+    swiper.updateSlidesClasses();
102
+    swiper.emit('beforeTransitionStart', speed, internal);
103
+    swiper.transitionStart(runCallbacks, direction);
104
+    if (!swiper.animating) {
105
+      swiper.animating = true;
106
+      if (!swiper.onSlideToWrapperTransitionEnd) {
107
+        swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
108
+          if (!swiper || swiper.destroyed) return;
109
+          if (e.target !== this) return;
110
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
111
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
112
+          swiper.onSlideToWrapperTransitionEnd = null;
113
+          delete swiper.onSlideToWrapperTransitionEnd;
114
+          swiper.transitionEnd(runCallbacks, direction);
115
+        };
116
+      }
117
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
118
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
119
+    }
120
+  }
121
+
122
+  return true;
123
+}
0 124
new file mode 100644
... ...
@@ -0,0 +1,47 @@
1
+import $ from '../../../utils/dom';
2
+import Utils from '../../../utils/utils';
3
+
4
+export default function () {
5
+  const swiper = this;
6
+  const { params, $wrapperEl } = swiper;
7
+
8
+  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
9
+  let slideToIndex = swiper.clickedIndex;
10
+  let realIndex;
11
+  if (params.loop) {
12
+    if (swiper.animating) return;
13
+    realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
14
+    if (params.centeredSlides) {
15
+      if (
16
+        (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))
17
+        || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
18
+      ) {
19
+        swiper.loopFix();
20
+        slideToIndex = $wrapperEl
21
+          .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
22
+          .eq(0)
23
+          .index();
24
+
25
+        Utils.nextTick(() => {
26
+          swiper.slideTo(slideToIndex);
27
+        });
28
+      } else {
29
+        swiper.slideTo(slideToIndex);
30
+      }
31
+    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
32
+      swiper.loopFix();
33
+      slideToIndex = $wrapperEl
34
+        .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`)
35
+        .eq(0)
36
+        .index();
37
+
38
+      Utils.nextTick(() => {
39
+        swiper.slideTo(slideToIndex);
40
+      });
41
+    } else {
42
+      swiper.slideTo(slideToIndex);
43
+    }
44
+  } else {
45
+    swiper.slideTo(slideToIndex);
46
+  }
47
+}
0 48
new file mode 100644
... ...
@@ -0,0 +1,31 @@
1
+/* eslint no-unused-vars: "off" */
2
+export default function (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {
3
+  const swiper = this;
4
+  let index = swiper.activeIndex;
5
+  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
6
+  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
7
+
8
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
9
+
10
+  if (translate >= swiper.snapGrid[snapIndex]) {
11
+    // The current translate is on or after the current snap index, so the choice
12
+    // is between the current index and the one after it.
13
+    const currentSnap = swiper.snapGrid[snapIndex];
14
+    const nextSnap = swiper.snapGrid[snapIndex + 1];
15
+    if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {
16
+      index += swiper.params.slidesPerGroup;
17
+    }
18
+  } else {
19
+    // The current translate is before the current snap index, so the choice
20
+    // is between the current index and the one before it.
21
+    const prevSnap = swiper.snapGrid[snapIndex - 1];
22
+    const currentSnap = swiper.snapGrid[snapIndex];
23
+    if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) {
24
+      index -= swiper.params.slidesPerGroup;
25
+    }
26
+  }
27
+  index = Math.max(index, 0);
28
+  index = Math.min(index, swiper.slidesGrid.length - 1);
29
+
30
+  return swiper.slideTo(index, speed, runCallbacks, internal);
31
+}
0 32
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+export default function (index = 0, speed = this.params.speed, runCallbacks = true, internal) {
2
+  const swiper = this;
3
+  let newIndex = index;
4
+  if (swiper.params.loop) {
5
+    newIndex += swiper.loopedSlides;
6
+  }
7
+
8
+  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+import setTransition from './setTransition';
2
+import transitionStart from './transitionStart';
3
+import transitionEnd from './transitionEnd';
4
+
5
+export default {
6
+  setTransition,
7
+  transitionStart,
8
+  transitionEnd,
9
+};
0 10
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+export default function (duration, byController) {
2
+  const swiper = this;
3
+
4
+  if (!swiper.params.cssMode) {
5
+    swiper.$wrapperEl.transition(duration);
6
+  }
7
+
8
+  swiper.emit('setTransition', duration, byController);
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,29 @@
1
+export default function (runCallbacks = true, direction) {
2
+  const swiper = this;
3
+  const { activeIndex, previousIndex, params } = swiper;
4
+  swiper.animating = false;
5
+  if (params.cssMode) return;
6
+  swiper.setTransition(0);
7
+
8
+  let dir = direction;
9
+  if (!dir) {
10
+    if (activeIndex > previousIndex) dir = 'next';
11
+    else if (activeIndex < previousIndex) dir = 'prev';
12
+    else dir = 'reset';
13
+  }
14
+
15
+  swiper.emit('transitionEnd');
16
+
17
+  if (runCallbacks && activeIndex !== previousIndex) {
18
+    if (dir === 'reset') {
19
+      swiper.emit('slideResetTransitionEnd');
20
+      return;
21
+    }
22
+    swiper.emit('slideChangeTransitionEnd');
23
+    if (dir === 'next') {
24
+      swiper.emit('slideNextTransitionEnd');
25
+    } else {
26
+      swiper.emit('slidePrevTransitionEnd');
27
+    }
28
+  }
29
+}
0 30
new file mode 100644
... ...
@@ -0,0 +1,30 @@
1
+export default function (runCallbacks = true, direction) {
2
+  const swiper = this;
3
+  const { activeIndex, params, previousIndex } = swiper;
4
+  if (params.cssMode) return;
5
+  if (params.autoHeight) {
6
+    swiper.updateAutoHeight();
7
+  }
8
+
9
+  let dir = direction;
10
+  if (!dir) {
11
+    if (activeIndex > previousIndex) dir = 'next';
12
+    else if (activeIndex < previousIndex) dir = 'prev';
13
+    else dir = 'reset';
14
+  }
15
+
16
+  swiper.emit('transitionStart');
17
+
18
+  if (runCallbacks && activeIndex !== previousIndex) {
19
+    if (dir === 'reset') {
20
+      swiper.emit('slideResetTransitionStart');
21
+      return;
22
+    }
23
+    swiper.emit('slideChangeTransitionStart');
24
+    if (dir === 'next') {
25
+      swiper.emit('slideNextTransitionStart');
26
+    } else {
27
+      swiper.emit('slidePrevTransitionStart');
28
+    }
29
+  }
30
+}
0 31
new file mode 100644
... ...
@@ -0,0 +1,21 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function (axis = this.isHorizontal() ? 'x' : 'y') {
4
+  const swiper = this;
5
+
6
+  const {
7
+    params, rtlTranslate: rtl, translate, $wrapperEl,
8
+  } = swiper;
9
+
10
+  if (params.virtualTranslate) {
11
+    return rtl ? -translate : translate;
12
+  }
13
+  if (params.cssMode) {
14
+    return translate;
15
+  }
16
+
17
+  let currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
18
+  if (rtl) currentTranslate = -currentTranslate;
19
+
20
+  return currentTranslate || 0;
21
+}
0 22
new file mode 100644
... ...
@@ -0,0 +1,13 @@
1
+import getTranslate from './getTranslate';
2
+import setTranslate from './setTranslate';
3
+import minTranslate from './minTranslate';
4
+import maxTranslate from './maxTranslate';
5
+import translateTo from './translateTo';
6
+
7
+export default {
8
+  getTranslate,
9
+  setTranslate,
10
+  minTranslate,
11
+  maxTranslate,
12
+  translateTo,
13
+};
0 14
new file mode 100644
... ...
@@ -0,0 +1,3 @@
1
+export default function () {
2
+  return (-this.snapGrid[this.snapGrid.length - 1]);
3
+}
0 4
new file mode 100644
... ...
@@ -0,0 +1,3 @@
1
+export default function () {
2
+  return (-this.snapGrid[0]);
3
+}
0 4
new file mode 100644
... ...
@@ -0,0 +1,42 @@
1
+export default function (translate, byController) {
2
+  const swiper = this;
3
+  const {
4
+    rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress,
5
+  } = swiper;
6
+  let x = 0;
7
+  let y = 0;
8
+  const z = 0;
9
+
10
+  if (swiper.isHorizontal()) {
11
+    x = rtl ? -translate : translate;
12
+  } else {
13
+    y = translate;
14
+  }
15
+
16
+  if (params.roundLengths) {
17
+    x = Math.floor(x);
18
+    y = Math.floor(y);
19
+  }
20
+
21
+  if (params.cssMode) {
22
+    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
23
+  } else if (!params.virtualTranslate) {
24
+    $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);
25
+  }
26
+  swiper.previousTranslate = swiper.translate;
27
+  swiper.translate = swiper.isHorizontal() ? x : y;
28
+
29
+  // Check if we need to update progress
30
+  let newProgress;
31
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
32
+  if (translatesDiff === 0) {
33
+    newProgress = 0;
34
+  } else {
35
+    newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
36
+  }
37
+  if (newProgress !== progress) {
38
+    swiper.updateProgress(translate);
39
+  }
40
+
41
+  swiper.emit('setTranslate', swiper.translate, byController);
42
+}
0 43
new file mode 100644
... ...
@@ -0,0 +1,76 @@
1
+export default function (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {
2
+  const swiper = this;
3
+
4
+  const {
5
+    params,
6
+    wrapperEl,
7
+  } = swiper;
8
+
9
+  if (swiper.animating && params.preventInteractionOnTransition) {
10
+    return false;
11
+  }
12
+
13
+  const minTranslate = swiper.minTranslate();
14
+  const maxTranslate = swiper.maxTranslate();
15
+  let newTranslate;
16
+  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;
17
+  else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;
18
+  else newTranslate = translate;
19
+
20
+  // Update progress
21
+  swiper.updateProgress(newTranslate);
22
+
23
+  if (params.cssMode) {
24
+    const isH = swiper.isHorizontal();
25
+    if (speed === 0) {
26
+      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
27
+    } else {
28
+      // eslint-disable-next-line
29
+      if (wrapperEl.scrollTo) {
30
+        wrapperEl.scrollTo({
31
+          [isH ? 'left' : 'top']: -newTranslate,
32
+          behavior: 'smooth',
33
+        });
34
+      } else {
35
+        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
36
+      }
37
+    }
38
+    return true;
39
+  }
40
+
41
+  if (speed === 0) {
42
+    swiper.setTransition(0);
43
+    swiper.setTranslate(newTranslate);
44
+    if (runCallbacks) {
45
+      swiper.emit('beforeTransitionStart', speed, internal);
46
+      swiper.emit('transitionEnd');
47
+    }
48
+  } else {
49
+    swiper.setTransition(speed);
50
+    swiper.setTranslate(newTranslate);
51
+    if (runCallbacks) {
52
+      swiper.emit('beforeTransitionStart', speed, internal);
53
+      swiper.emit('transitionStart');
54
+    }
55
+    if (!swiper.animating) {
56
+      swiper.animating = true;
57
+      if (!swiper.onTranslateToWrapperTransitionEnd) {
58
+        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
59
+          if (!swiper || swiper.destroyed) return;
60
+          if (e.target !== this) return;
61
+          swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
62
+          swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
63
+          swiper.onTranslateToWrapperTransitionEnd = null;
64
+          delete swiper.onTranslateToWrapperTransitionEnd;
65
+          if (runCallbacks) {
66
+            swiper.emit('transitionEnd');
67
+          }
68
+        };
69
+      }
70
+      swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
71
+      swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);
72
+    }
73
+  }
74
+
75
+  return true;
76
+}
0 77
new file mode 100644
... ...
@@ -0,0 +1,21 @@
1
+import updateSize from './updateSize';
2
+import updateSlides from './updateSlides';
3
+import updateAutoHeight from './updateAutoHeight';
4
+import updateSlidesOffset from './updateSlidesOffset';
5
+import updateSlidesProgress from './updateSlidesProgress';
6
+import updateProgress from './updateProgress';
7
+import updateSlidesClasses from './updateSlidesClasses';
8
+import updateActiveIndex from './updateActiveIndex';
9
+import updateClickedSlide from './updateClickedSlide';
10
+
11
+export default {
12
+  updateSize,
13
+  updateSlides,
14
+  updateAutoHeight,
15
+  updateSlidesOffset,
16
+  updateSlidesProgress,
17
+  updateProgress,
18
+  updateSlidesClasses,
19
+  updateActiveIndex,
20
+  updateClickedSlide,
21
+};
0 22
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function (newActiveIndex) {
4
+  const swiper = this;
5
+  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
6
+  const {
7
+    slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex,
8
+  } = swiper;
9
+  let activeIndex = newActiveIndex;
10
+  let snapIndex;
11
+  if (typeof activeIndex === 'undefined') {
12
+    for (let i = 0; i < slidesGrid.length; i += 1) {
13
+      if (typeof slidesGrid[i + 1] !== 'undefined') {
14
+        if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
15
+          activeIndex = i;
16
+        } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
17
+          activeIndex = i + 1;
18
+        }
19
+      } else if (translate >= slidesGrid[i]) {
20
+        activeIndex = i;
21
+      }
22
+    }
23
+    // Normalize slideIndex
24
+    if (params.normalizeSlideIndex) {
25
+      if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
26
+    }
27
+  }
28
+  if (snapGrid.indexOf(translate) >= 0) {
29
+    snapIndex = snapGrid.indexOf(translate);
30
+  } else {
31
+    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
32
+    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
33
+  }
34
+  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
35
+  if (activeIndex === previousIndex) {
36
+    if (snapIndex !== previousSnapIndex) {
37
+      swiper.snapIndex = snapIndex;
38
+      swiper.emit('snapIndexChange');
39
+    }
40
+    return;
41
+  }
42
+
43
+  // Get real index
44
+  const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
45
+
46
+  Utils.extend(swiper, {
47
+    snapIndex,
48
+    realIndex,
49
+    previousIndex,
50
+    activeIndex,
51
+  });
52
+  swiper.emit('activeIndexChange');
53
+  swiper.emit('snapIndexChange');
54
+  if (previousRealIndex !== realIndex) {
55
+    swiper.emit('realIndexChange');
56
+  }
57
+  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
58
+    swiper.emit('slideChange');
59
+  }
60
+}
0 61
new file mode 100644
... ...
@@ -0,0 +1,38 @@
1
+export default function (speed) {
2
+  const swiper = this;
3
+  const activeSlides = [];
4
+  let newHeight = 0;
5
+  let i;
6
+  if (typeof speed === 'number') {
7
+    swiper.setTransition(speed);
8
+  } else if (speed === true) {
9
+    swiper.setTransition(swiper.params.speed);
10
+  }
11
+  // Find slides currently in view
12
+  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
13
+    if (swiper.params.centeredSlides) {
14
+      swiper.visibleSlides.each((index, slide) => {
15
+        activeSlides.push(slide);
16
+      });
17
+    } else {
18
+      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
19
+        const index = swiper.activeIndex + i;
20
+        if (index > swiper.slides.length) break;
21
+        activeSlides.push(swiper.slides.eq(index)[0]);
22
+      }
23
+    }
24
+  } else {
25
+    activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
26
+  }
27
+
28
+  // Find new height from highest slide in view
29
+  for (i = 0; i < activeSlides.length; i += 1) {
30
+    if (typeof activeSlides[i] !== 'undefined') {
31
+      const height = activeSlides[i].offsetHeight;
32
+      newHeight = height > newHeight ? height : newHeight;
33
+    }
34
+  }
35
+
36
+  // Update Height
37
+  if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);
38
+}
0 39
new file mode 100644
... ...
@@ -0,0 +1,29 @@
1
+import $ from '../../../utils/dom';
2
+
3
+export default function (e) {
4
+  const swiper = this;
5
+  const params = swiper.params;
6
+  const slide = $(e.target).closest(`.${params.slideClass}`)[0];
7
+  let slideFound = false;
8
+  if (slide) {
9
+    for (let i = 0; i < swiper.slides.length; i += 1) {
10
+      if (swiper.slides[i] === slide) slideFound = true;
11
+    }
12
+  }
13
+
14
+  if (slide && slideFound) {
15
+    swiper.clickedSlide = slide;
16
+    if (swiper.virtual && swiper.params.virtual.enabled) {
17
+      swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
18
+    } else {
19
+      swiper.clickedIndex = $(slide).index();
20
+    }
21
+  } else {
22
+    swiper.clickedSlide = undefined;
23
+    swiper.clickedIndex = undefined;
24
+    return;
25
+  }
26
+  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
27
+    swiper.slideToClickedSlide();
28
+  }
29
+}
0 30
new file mode 100644
... ...
@@ -0,0 +1,43 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function (translate) {
4
+  const swiper = this;
5
+  if (typeof translate === 'undefined') {
6
+    const multiplier = swiper.rtlTranslate ? -1 : 1;
7
+    // eslint-disable-next-line
8
+    translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;
9
+  }
10
+  const params = swiper.params;
11
+  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
12
+  let { progress, isBeginning, isEnd } = swiper;
13
+  const wasBeginning = isBeginning;
14
+  const wasEnd = isEnd;
15
+  if (translatesDiff === 0) {
16
+    progress = 0;
17
+    isBeginning = true;
18
+    isEnd = true;
19
+  } else {
20
+    progress = (translate - swiper.minTranslate()) / (translatesDiff);
21
+    isBeginning = progress <= 0;
22
+    isEnd = progress >= 1;
23
+  }
24
+  Utils.extend(swiper, {
25
+    progress,
26
+    isBeginning,
27
+    isEnd,
28
+  });
29
+
30
+  if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate);
31
+
32
+  if (isBeginning && !wasBeginning) {
33
+    swiper.emit('reachBeginning toEdge');
34
+  }
35
+  if (isEnd && !wasEnd) {
36
+    swiper.emit('reachEnd toEdge');
37
+  }
38
+  if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
39
+    swiper.emit('fromEdge');
40
+  }
41
+
42
+  swiper.emit('progress', progress);
43
+}
0 44
new file mode 100644
... ...
@@ -0,0 +1,31 @@
1
+import Utils from '../../../utils/utils';
2
+
3
+export default function () {
4
+  const swiper = this;
5
+  let width;
6
+  let height;
7
+  const $el = swiper.$el;
8
+  if (typeof swiper.params.width !== 'undefined') {
9
+    width = swiper.params.width;
10
+  } else {
11
+    width = $el[0].clientWidth;
12
+  }
13
+  if (typeof swiper.params.height !== 'undefined') {
14
+    height = swiper.params.height;
15
+  } else {
16
+    height = $el[0].clientHeight;
17
+  }
18
+  if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
19
+    return;
20
+  }
21
+
22
+  // Subtract paddings
23
+  width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
24
+  height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
25
+
26
+  Utils.extend(swiper, {
27
+    width,
28
+    height,
29
+    size: swiper.isHorizontal() ? width : height,
30
+  });
31
+}
0 32
new file mode 100644
... ...
@@ -0,0 +1,313 @@
1
+import { window } from 'ssr-window';
2
+import Utils from '../../../utils/utils';
3
+
4
+export default function () {
5
+  const swiper = this;
6
+  const params = swiper.params;
7
+
8
+  const {
9
+    $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL,
10
+  } = swiper;
11
+  const isVirtual = swiper.virtual && params.virtual.enabled;
12
+  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
13
+  const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);
14
+  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
15
+  let snapGrid = [];
16
+  const slidesGrid = [];
17
+  const slidesSizesGrid = [];
18
+
19
+  function slidesForMargin(slideIndex) {
20
+    if (!params.cssMode) return true;
21
+    if (slideIndex === slides.length - 1) {
22
+      return false;
23
+    }
24
+    return true;
25
+  }
26
+
27
+  let offsetBefore = params.slidesOffsetBefore;
28
+  if (typeof offsetBefore === 'function') {
29
+    offsetBefore = params.slidesOffsetBefore.call(swiper);
30
+  }
31
+
32
+  let offsetAfter = params.slidesOffsetAfter;
33
+  if (typeof offsetAfter === 'function') {
34
+    offsetAfter = params.slidesOffsetAfter.call(swiper);
35
+  }
36
+
37
+  const previousSnapGridLength = swiper.snapGrid.length;
38
+  const previousSlidesGridLength = swiper.snapGrid.length;
39
+
40
+  let spaceBetween = params.spaceBetween;
41
+  let slidePosition = -offsetBefore;
42
+  let prevSlideSize = 0;
43
+  let index = 0;
44
+  if (typeof swiperSize === 'undefined') {
45
+    return;
46
+  }
47
+  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
48
+    spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
49
+  }
50
+
51
+  swiper.virtualSize = -spaceBetween;
52
+
53
+  // reset margins
54
+  if (rtl) slides.css({ marginLeft: '', marginTop: '' });
55
+  else slides.css({ marginRight: '', marginBottom: '' });
56
+
57
+  let slidesNumberEvenToRows;
58
+  if (params.slidesPerColumn > 1) {
59
+    if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
60
+      slidesNumberEvenToRows = slidesLength;
61
+    } else {
62
+      slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
63
+    }
64
+    if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
65
+      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
66
+    }
67
+  }
68
+
69
+  // Calc slides
70
+  let slideSize;
71
+  const slidesPerColumn = params.slidesPerColumn;
72
+  const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
73
+  const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
74
+  for (let i = 0; i < slidesLength; i += 1) {
75
+    slideSize = 0;
76
+    const slide = slides.eq(i);
77
+    if (params.slidesPerColumn > 1) {
78
+      // Set slides order
79
+      let newSlideOrderIndex;
80
+      let column;
81
+      let row;
82
+      if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
83
+        const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));
84
+        const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;
85
+        const columnsInGroup = groupIndex === 0
86
+          ? params.slidesPerGroup
87
+          : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);
88
+        row = Math.floor(slideIndexInGroup / columnsInGroup);
89
+        column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;
90
+
91
+        newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
92
+        slide
93
+          .css({
94
+            '-webkit-box-ordinal-group': newSlideOrderIndex,
95
+            '-moz-box-ordinal-group': newSlideOrderIndex,
96
+            '-ms-flex-order': newSlideOrderIndex,
97
+            '-webkit-order': newSlideOrderIndex,
98
+            order: newSlideOrderIndex,
99
+          });
100
+      } else if (params.slidesPerColumnFill === 'column') {
101
+        column = Math.floor(i / slidesPerColumn);
102
+        row = i - (column * slidesPerColumn);
103
+        if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
104
+          row += 1;
105
+          if (row >= slidesPerColumn) {
106
+            row = 0;
107
+            column += 1;
108
+          }
109
+        }
110
+      } else {
111
+        row = Math.floor(i / slidesPerRow);
112
+        column = i - (row * slidesPerRow);
113
+      }
114
+      slide.css(
115
+        `margin-${swiper.isHorizontal() ? 'top' : 'left'}`,
116
+        (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`)
117
+      );
118
+    }
119
+    if (slide.css('display') === 'none') continue; // eslint-disable-line
120
+
121
+    if (params.slidesPerView === 'auto') {
122
+      const slideStyles = window.getComputedStyle(slide[0], null);
123
+      const currentTransform = slide[0].style.transform;
124
+      const currentWebKitTransform = slide[0].style.webkitTransform;
125
+      if (currentTransform) {
126
+        slide[0].style.transform = 'none';
127
+      }
128
+      if (currentWebKitTransform) {
129
+        slide[0].style.webkitTransform = 'none';
130
+      }
131
+      if (params.roundLengths) {
132
+        slideSize = swiper.isHorizontal()
133
+          ? slide.outerWidth(true)
134
+          : slide.outerHeight(true);
135
+      } else {
136
+        // eslint-disable-next-line
137
+        if (swiper.isHorizontal()) {
138
+          const width = parseFloat(slideStyles.getPropertyValue('width'));
139
+          const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
140
+          const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
141
+          const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
142
+          const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
143
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
144
+          if (boxSizing && boxSizing === 'border-box') {
145
+            slideSize = width + marginLeft + marginRight;
146
+          } else {
147
+            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
148
+          }
149
+        } else {
150
+          const height = parseFloat(slideStyles.getPropertyValue('height'));
151
+          const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
152
+          const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
153
+          const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
154
+          const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
155
+          const boxSizing = slideStyles.getPropertyValue('box-sizing');
156
+          if (boxSizing && boxSizing === 'border-box') {
157
+            slideSize = height + marginTop + marginBottom;
158
+          } else {
159
+            slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
160
+          }
161
+        }
162
+      }
163
+      if (currentTransform) {
164
+        slide[0].style.transform = currentTransform;
165
+      }
166
+      if (currentWebKitTransform) {
167
+        slide[0].style.webkitTransform = currentWebKitTransform;
168
+      }
169
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
170
+    } else {
171
+      slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
172
+      if (params.roundLengths) slideSize = Math.floor(slideSize);
173
+
174
+      if (slides[i]) {
175
+        if (swiper.isHorizontal()) {
176
+          slides[i].style.width = `${slideSize}px`;
177
+        } else {
178
+          slides[i].style.height = `${slideSize}px`;
179
+        }
180
+      }
181
+    }
182
+    if (slides[i]) {
183
+      slides[i].swiperSlideSize = slideSize;
184
+    }
185
+    slidesSizesGrid.push(slideSize);
186
+
187
+
188
+    if (params.centeredSlides) {
189
+      slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
190
+      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
191
+      if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween;
192
+      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
193
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
194
+      if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
195
+      slidesGrid.push(slidePosition);
196
+    } else {
197
+      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
198
+      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
199
+      slidesGrid.push(slidePosition);
200
+      slidePosition = slidePosition + slideSize + spaceBetween;
201
+    }
202
+
203
+    swiper.virtualSize += slideSize + spaceBetween;
204
+
205
+    prevSlideSize = slideSize;
206
+
207
+    index += 1;
208
+  }
209
+  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
210
+  let newSlidesGrid;
211
+
212
+  if (
213
+    rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
214
+    $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
215
+  }
216
+  if (params.setWrapperSize) {
217
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
218
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
219
+  }
220
+
221
+  if (params.slidesPerColumn > 1) {
222
+    swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
223
+    swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
224
+    if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });
225
+    else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` });
226
+    if (params.centeredSlides) {
227
+      newSlidesGrid = [];
228
+      for (let i = 0; i < snapGrid.length; i += 1) {
229
+        let slidesGridItem = snapGrid[i];
230
+        if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
231
+        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
232
+      }
233
+      snapGrid = newSlidesGrid;
234
+    }
235
+  }
236
+
237
+  // Remove last grid elements depending on width
238
+  if (!params.centeredSlides) {
239
+    newSlidesGrid = [];
240
+    for (let i = 0; i < snapGrid.length; i += 1) {
241
+      let slidesGridItem = snapGrid[i];
242
+      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
243
+      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
244
+        newSlidesGrid.push(slidesGridItem);
245
+      }
246
+    }
247
+    snapGrid = newSlidesGrid;
248
+    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
249
+      snapGrid.push(swiper.virtualSize - swiperSize);
250
+    }
251
+  }
252
+  if (snapGrid.length === 0) snapGrid = [0];
253
+
254
+  if (params.spaceBetween !== 0) {
255
+    if (swiper.isHorizontal()) {
256
+      if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` });
257
+      else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` });
258
+    } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` });
259
+  }
260
+
261
+  if (params.centeredSlides && params.centeredSlidesBounds) {
262
+    let allSlidesSize = 0;
263
+    slidesSizesGrid.forEach((slideSizeValue) => {
264
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
265
+    });
266
+    allSlidesSize -= params.spaceBetween;
267
+    const maxSnap = allSlidesSize - swiperSize;
268
+    snapGrid = snapGrid.map((snap) => {
269
+      if (snap < 0) return -offsetBefore;
270
+      if (snap > maxSnap) return maxSnap + offsetAfter;
271
+      return snap;
272
+    });
273
+  }
274
+
275
+  if (params.centerInsufficientSlides) {
276
+    let allSlidesSize = 0;
277
+    slidesSizesGrid.forEach((slideSizeValue) => {
278
+      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
279
+    });
280
+    allSlidesSize -= params.spaceBetween;
281
+    if (allSlidesSize < swiperSize) {
282
+      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
283
+      snapGrid.forEach((snap, snapIndex) => {
284
+        snapGrid[snapIndex] = snap - allSlidesOffset;
285
+      });
286
+      slidesGrid.forEach((snap, snapIndex) => {
287
+        slidesGrid[snapIndex] = snap + allSlidesOffset;
288
+      });
289
+    }
290
+  }
291
+
292
+  Utils.extend(swiper, {
293
+    slides,
294
+    snapGrid,
295
+    slidesGrid,
296
+    slidesSizesGrid,
297
+  });
298
+
299
+  if (slidesLength !== previousSlidesLength) {
300
+    swiper.emit('slidesLengthChange');
301
+  }
302
+  if (snapGrid.length !== previousSnapGridLength) {
303
+    if (swiper.params.watchOverflow) swiper.checkOverflow();
304
+    swiper.emit('snapGridLengthChange');
305
+  }
306
+  if (slidesGrid.length !== previousSlidesGridLength) {
307
+    swiper.emit('slidesGridLengthChange');
308
+  }
309
+
310
+  if (params.watchSlidesProgress || params.watchSlidesVisibility) {
311
+    swiper.updateSlidesOffset();
312
+  }
313
+}
0 314
new file mode 100644
... ...
@@ -0,0 +1,66 @@
1
+export default function () {
2
+  const swiper = this;
3
+
4
+  const {
5
+    slides, params, $wrapperEl, activeIndex, realIndex,
6
+  } = swiper;
7
+  const isVirtual = swiper.virtual && params.virtual.enabled;
8
+
9
+  slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);
10
+
11
+  let activeSlide;
12
+  if (isVirtual) {
13
+    activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`);
14
+  } else {
15
+    activeSlide = slides.eq(activeIndex);
16
+  }
17
+
18
+  // Active classes
19
+  activeSlide.addClass(params.slideActiveClass);
20
+
21
+  if (params.loop) {
22
+    // Duplicate to all looped slides
23
+    if (activeSlide.hasClass(params.slideDuplicateClass)) {
24
+      $wrapperEl
25
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`)
26
+        .addClass(params.slideDuplicateActiveClass);
27
+    } else {
28
+      $wrapperEl
29
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`)
30
+        .addClass(params.slideDuplicateActiveClass);
31
+    }
32
+  }
33
+  // Next Slide
34
+  let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);
35
+  if (params.loop && nextSlide.length === 0) {
36
+    nextSlide = slides.eq(0);
37
+    nextSlide.addClass(params.slideNextClass);
38
+  }
39
+  // Prev Slide
40
+  let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);
41
+  if (params.loop && prevSlide.length === 0) {
42
+    prevSlide = slides.eq(-1);
43
+    prevSlide.addClass(params.slidePrevClass);
44
+  }
45
+  if (params.loop) {
46
+    // Duplicate to all looped slides
47
+    if (nextSlide.hasClass(params.slideDuplicateClass)) {
48
+      $wrapperEl
49
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
50
+        .addClass(params.slideDuplicateNextClass);
51
+    } else {
52
+      $wrapperEl
53
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`)
54
+        .addClass(params.slideDuplicateNextClass);
55
+    }
56
+    if (prevSlide.hasClass(params.slideDuplicateClass)) {
57
+      $wrapperEl
58
+        .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
59
+        .addClass(params.slideDuplicatePrevClass);
60
+    } else {
61
+      $wrapperEl
62
+        .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`)
63
+        .addClass(params.slideDuplicatePrevClass);
64
+    }
65
+  }
66
+}
0 67
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+export default function () {
2
+  const swiper = this;
3
+  const slides = swiper.slides;
4
+  for (let i = 0; i < slides.length; i += 1) {
5
+    slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
6
+  }
7
+}
0 8
new file mode 100644
... ...
@@ -0,0 +1,41 @@
1
+import $ from '../../../utils/dom';
2
+
3
+export default function (translate = (this && this.translate) || 0) {
4
+  const swiper = this;
5
+  const params = swiper.params;
6
+
7
+  const { slides, rtlTranslate: rtl } = swiper;
8
+
9
+  if (slides.length === 0) return;
10
+  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
11
+
12
+  let offsetCenter = -translate;
13
+  if (rtl) offsetCenter = translate;
14
+
15
+  // Visible Slides
16
+  slides.removeClass(params.slideVisibleClass);
17
+
18
+  swiper.visibleSlidesIndexes = [];
19
+  swiper.visibleSlides = [];
20
+
21
+  for (let i = 0; i < slides.length; i += 1) {
22
+    const slide = slides[i];
23
+    const slideProgress = (
24
+      (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
25
+    ) / (slide.swiperSlideSize + params.spaceBetween);
26
+    if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) {
27
+      const slideBefore = -(offsetCenter - slide.swiperSlideOffset);
28
+      const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
29
+      const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)
30
+                || (slideAfter > 1 && slideAfter <= swiper.size)
31
+                || (slideBefore <= 0 && slideAfter >= swiper.size);
32
+      if (isVisible) {
33
+        swiper.visibleSlides.push(slide);
34
+        swiper.visibleSlidesIndexes.push(i);
35
+        slides.eq(i).addClass(params.slideVisibleClass);
36
+      }
37
+    }
38
+    slide.progress = rtl ? -slideProgress : slideProgress;
39
+  }
40
+  swiper.visibleSlides = $(swiper.visibleSlides);
41
+}
0 42
new file mode 100644
... ...
@@ -0,0 +1,122 @@
1
+import $ from '../../utils/dom';
2
+import Support from '../../utils/support';
3
+import Utils from '../../utils/utils';
4
+
5
+const Coverflow = {
6
+  setTranslate() {
7
+    const swiper = this;
8
+    const {
9
+      width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid,
10
+    } = swiper;
11
+    const params = swiper.params.coverflowEffect;
12
+    const isHorizontal = swiper.isHorizontal();
13
+    const transform = swiper.translate;
14
+    const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
15
+    const rotate = isHorizontal ? params.rotate : -params.rotate;
16
+    const translate = params.depth;
17
+    // Each slide offset from center
18
+    for (let i = 0, length = slides.length; i < length; i += 1) {
19
+      const $slideEl = slides.eq(i);
20
+      const slideSize = slidesSizesGrid[i];
21
+      const slideOffset = $slideEl[0].swiperSlideOffset;
22
+      const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
23
+
24
+      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
25
+      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
26
+      // var rotateZ = 0
27
+      let translateZ = -translate * Math.abs(offsetMultiplier);
28
+
29
+      let stretch = params.stretch;
30
+      // Allow percentage to make a relative stretch for responsive sliders
31
+      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {
32
+        stretch = ((parseFloat(params.stretch) / 100) * slideSize);
33
+      }
34
+      let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier);
35
+      let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0;
36
+
37
+      // Fix for ultra small values
38
+      if (Math.abs(translateX) < 0.001) translateX = 0;
39
+      if (Math.abs(translateY) < 0.001) translateY = 0;
40
+      if (Math.abs(translateZ) < 0.001) translateZ = 0;
41
+      if (Math.abs(rotateY) < 0.001) rotateY = 0;
42
+      if (Math.abs(rotateX) < 0.001) rotateX = 0;
43
+
44
+      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
45
+
46
+      $slideEl.transform(slideTransform);
47
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
48
+      if (params.slideShadows) {
49
+        // Set shadows
50
+        let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
51
+        let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
52
+        if ($shadowBeforeEl.length === 0) {
53
+          $shadowBeforeEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
54
+          $slideEl.append($shadowBeforeEl);
55
+        }
56
+        if ($shadowAfterEl.length === 0) {
57
+          $shadowAfterEl = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
58
+          $slideEl.append($shadowAfterEl);
59
+        }
60
+        if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
61
+        if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
62
+      }
63
+    }
64
+
65
+    // Set correct perspective for IE10
66
+    if (Support.pointerEvents || Support.prefixedPointerEvents) {
67
+      const ws = $wrapperEl[0].style;
68
+      ws.perspectiveOrigin = `${center}px 50%`;
69
+    }
70
+  },
71
+  setTransition(duration) {
72
+    const swiper = this;
73
+    swiper.slides
74
+      .transition(duration)
75
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
76
+      .transition(duration);
77
+  },
78
+};
79
+
80
+export default {
81
+  name: 'effect-coverflow',
82
+  params: {
83
+    coverflowEffect: {
84
+      rotate: 50,
85
+      stretch: 0,
86
+      depth: 100,
87
+      modifier: 1,
88
+      slideShadows: true,
89
+    },
90
+  },
91
+  create() {
92
+    const swiper = this;
93
+    Utils.extend(swiper, {
94
+      coverflowEffect: {
95
+        setTranslate: Coverflow.setTranslate.bind(swiper),
96
+        setTransition: Coverflow.setTransition.bind(swiper),
97
+      },
98
+    });
99
+  },
100
+  on: {
101
+    beforeInit() {
102
+      const swiper = this;
103
+      if (swiper.params.effect !== 'coverflow') return;
104
+
105
+      swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`);
106
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
107
+
108
+      swiper.params.watchSlidesProgress = true;
109
+      swiper.originalParams.watchSlidesProgress = true;
110
+    },
111
+    setTranslate() {
112
+      const swiper = this;
113
+      if (swiper.params.effect !== 'coverflow') return;
114
+      swiper.coverflowEffect.setTranslate();
115
+    },
116
+    setTransition(duration) {
117
+      const swiper = this;
118
+      if (swiper.params.effect !== 'coverflow') return;
119
+      swiper.coverflowEffect.setTransition(duration);
120
+    },
121
+  },
122
+};
0 123
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+.swiper-container-coverflow {}
0 2
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+.swiper-container-coverflow {}
0 2
new file mode 100644
... ...
@@ -0,0 +1,180 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+import Browser from '../../utils/browser';
4
+
5
+const Cube = {
6
+  setTranslate() {
7
+    const swiper = this;
8
+    const {
9
+      $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize,
10
+    } = swiper;
11
+    const params = swiper.params.cubeEffect;
12
+    const isHorizontal = swiper.isHorizontal();
13
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
14
+    let wrapperRotate = 0;
15
+    let $cubeShadowEl;
16
+    if (params.shadow) {
17
+      if (isHorizontal) {
18
+        $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
19
+        if ($cubeShadowEl.length === 0) {
20
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
21
+          $wrapperEl.append($cubeShadowEl);
22
+        }
23
+        $cubeShadowEl.css({ height: `${swiperWidth}px` });
24
+      } else {
25
+        $cubeShadowEl = $el.find('.swiper-cube-shadow');
26
+        if ($cubeShadowEl.length === 0) {
27
+          $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
28
+          $el.append($cubeShadowEl);
29
+        }
30
+      }
31
+    }
32
+    for (let i = 0; i < slides.length; i += 1) {
33
+      const $slideEl = slides.eq(i);
34
+      let slideIndex = i;
35
+      if (isVirtual) {
36
+        slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
37
+      }
38
+      let slideAngle = slideIndex * 90;
39
+      let round = Math.floor(slideAngle / 360);
40
+      if (rtl) {
41
+        slideAngle = -slideAngle;
42
+        round = Math.floor(-slideAngle / 360);
43
+      }
44
+      const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
45
+      let tx = 0;
46
+      let ty = 0;
47
+      let tz = 0;
48
+      if (slideIndex % 4 === 0) {
49
+        tx = -round * 4 * swiperSize;
50
+        tz = 0;
51
+      } else if ((slideIndex - 1) % 4 === 0) {
52
+        tx = 0;
53
+        tz = -round * 4 * swiperSize;
54
+      } else if ((slideIndex - 2) % 4 === 0) {
55
+        tx = swiperSize + (round * 4 * swiperSize);
56
+        tz = swiperSize;
57
+      } else if ((slideIndex - 3) % 4 === 0) {
58
+        tx = -swiperSize;
59
+        tz = (3 * swiperSize) + (swiperSize * 4 * round);
60
+      }
61
+      if (rtl) {
62
+        tx = -tx;
63
+      }
64
+
65
+      if (!isHorizontal) {
66
+        ty = tx;
67
+        tx = 0;
68
+      }
69
+
70
+      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
71
+      if (progress <= 1 && progress > -1) {
72
+        wrapperRotate = (slideIndex * 90) + (progress * 90);
73
+        if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90);
74
+      }
75
+      $slideEl.transform(transform);
76
+      if (params.slideShadows) {
77
+        // Set shadows
78
+        let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
79
+        let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
80
+        if (shadowBefore.length === 0) {
81
+          shadowBefore = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`);
82
+          $slideEl.append(shadowBefore);
83
+        }
84
+        if (shadowAfter.length === 0) {
85
+          shadowAfter = $(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`);
86
+          $slideEl.append(shadowAfter);
87
+        }
88
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
89
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
90
+      }
91
+    }
92
+    $wrapperEl.css({
93
+      '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,
94
+      '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`,
95
+      '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`,
96
+      'transform-origin': `50% 50% -${swiperSize / 2}px`,
97
+    });
98
+
99
+    if (params.shadow) {
100
+      if (isHorizontal) {
101
+        $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);
102
+      } else {
103
+        const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
104
+        const multiplier = 1.5 - (
105
+          (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2)
106
+          + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
107
+        );
108
+        const scale1 = params.shadowScale;
109
+        const scale2 = params.shadowScale / multiplier;
110
+        const offset = params.shadowOffset;
111
+        $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);
112
+      }
113
+    }
114
+    const zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
115
+    $wrapperEl
116
+      .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);
117
+  },
118
+  setTransition(duration) {
119
+    const swiper = this;
120
+    const { $el, slides } = swiper;
121
+    slides
122
+      .transition(duration)
123
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
124
+      .transition(duration);
125
+    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
126
+      $el.find('.swiper-cube-shadow').transition(duration);
127
+    }
128
+  },
129
+};
130
+
131
+export default {
132
+  name: 'effect-cube',
133
+  params: {
134
+    cubeEffect: {
135
+      slideShadows: true,
136
+      shadow: true,
137
+      shadowOffset: 20,
138
+      shadowScale: 0.94,
139
+    },
140
+  },
141
+  create() {
142
+    const swiper = this;
143
+    Utils.extend(swiper, {
144
+      cubeEffect: {
145
+        setTranslate: Cube.setTranslate.bind(swiper),
146
+        setTransition: Cube.setTransition.bind(swiper),
147
+      },
148
+    });
149
+  },
150
+  on: {
151
+    beforeInit() {
152
+      const swiper = this;
153
+      if (swiper.params.effect !== 'cube') return;
154
+      swiper.classNames.push(`${swiper.params.containerModifierClass}cube`);
155
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
156
+      const overwriteParams = {
157
+        slidesPerView: 1,
158
+        slidesPerColumn: 1,
159
+        slidesPerGroup: 1,
160
+        watchSlidesProgress: true,
161
+        resistanceRatio: 0,
162
+        spaceBetween: 0,
163
+        centeredSlides: false,
164
+        virtualTranslate: true,
165
+      };
166
+      Utils.extend(swiper.params, overwriteParams);
167
+      Utils.extend(swiper.originalParams, overwriteParams);
168
+    },
169
+    setTranslate() {
170
+      const swiper = this;
171
+      if (swiper.params.effect !== 'cube') return;
172
+      swiper.cubeEffect.setTranslate();
173
+    },
174
+    setTransition(duration) {
175
+      const swiper = this;
176
+      if (swiper.params.effect !== 'cube') return;
177
+      swiper.cubeEffect.setTransition(duration);
178
+    },
179
+  },
180
+};
0 181
new file mode 100644
... ...
@@ -0,0 +1,43 @@
1
+.swiper-container-cube {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    visibility: hidden;
8
+    transform-origin: 0 0;
9
+    width: 100%;
10
+    height: 100%;
11
+    .swiper-slide {
12
+      pointer-events: none;
13
+    }
14
+  }
15
+  &.swiper-container-rtl .swiper-slide {
16
+    transform-origin: 100% 0;
17
+  }
18
+  .swiper-slide-active {
19
+    &, & .swiper-slide-active {
20
+      pointer-events: auto;
21
+    }
22
+  }
23
+  .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
24
+    pointer-events: auto;
25
+    visibility: visible;
26
+  }
27
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
28
+    z-index: 0;
29
+    backface-visibility: hidden;
30
+  }
31
+  .swiper-cube-shadow {
32
+    position: absolute;
33
+    left: 0;
34
+    bottom: 0px;
35
+    width: 100%;
36
+    height: 100%;
37
+    background: #000;
38
+    opacity: 0.6;
39
+    -webkit-filter: blur(50px);
40
+    filter: blur(50px);
41
+    z-index: 0;
42
+  }
43
+}
0 44
new file mode 100644
... ...
@@ -0,0 +1,43 @@
1
+.swiper-container-cube {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    visibility: hidden;
8
+    transform-origin: 0 0;
9
+    width: 100%;
10
+    height: 100%;
11
+    .swiper-slide {
12
+      pointer-events: none;
13
+    }
14
+  }
15
+  &.swiper-container-rtl .swiper-slide {
16
+    transform-origin: 100% 0;
17
+  }
18
+  .swiper-slide-active {
19
+    &, & .swiper-slide-active {
20
+      pointer-events: auto;
21
+    }
22
+  }
23
+  .swiper-slide-active, .swiper-slide-next, .swiper-slide-prev, .swiper-slide-next + .swiper-slide {
24
+    pointer-events: auto;
25
+    visibility: visible;
26
+  }
27
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
28
+    z-index: 0;
29
+    backface-visibility: hidden;
30
+  }
31
+  .swiper-cube-shadow {
32
+    position: absolute;
33
+    left: 0;
34
+    bottom: 0px;
35
+    width: 100%;
36
+    height: 100%;
37
+    background: #000;
38
+    opacity: 0.6;
39
+    -webkit-filter: blur(50px);
40
+    filter: blur(50px);
41
+    z-index: 0;
42
+  }
43
+}
0 44
new file mode 100644
... ...
@@ -0,0 +1,90 @@
1
+import Utils from '../../utils/utils';
2
+
3
+const Fade = {
4
+  setTranslate() {
5
+    const swiper = this;
6
+    const { slides } = swiper;
7
+    for (let i = 0; i < slides.length; i += 1) {
8
+      const $slideEl = swiper.slides.eq(i);
9
+      const offset = $slideEl[0].swiperSlideOffset;
10
+      let tx = -offset;
11
+      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
12
+      let ty = 0;
13
+      if (!swiper.isHorizontal()) {
14
+        ty = tx;
15
+        tx = 0;
16
+      }
17
+      const slideOpacity = swiper.params.fadeEffect.crossFade
18
+        ? Math.max(1 - Math.abs($slideEl[0].progress), 0)
19
+        : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
20
+      $slideEl
21
+        .css({
22
+          opacity: slideOpacity,
23
+        })
24
+        .transform(`translate3d(${tx}px, ${ty}px, 0px)`);
25
+    }
26
+  },
27
+  setTransition(duration) {
28
+    const swiper = this;
29
+    const { slides, $wrapperEl } = swiper;
30
+    slides.transition(duration);
31
+    if (swiper.params.virtualTranslate && duration !== 0) {
32
+      let eventTriggered = false;
33
+      slides.transitionEnd(() => {
34
+        if (eventTriggered) return;
35
+        if (!swiper || swiper.destroyed) return;
36
+        eventTriggered = true;
37
+        swiper.animating = false;
38
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
39
+        for (let i = 0; i < triggerEvents.length; i += 1) {
40
+          $wrapperEl.trigger(triggerEvents[i]);
41
+        }
42
+      });
43
+    }
44
+  },
45
+};
46
+
47
+export default {
48
+  name: 'effect-fade',
49
+  params: {
50
+    fadeEffect: {
51
+      crossFade: false,
52
+    },
53
+  },
54
+  create() {
55
+    const swiper = this;
56
+    Utils.extend(swiper, {
57
+      fadeEffect: {
58
+        setTranslate: Fade.setTranslate.bind(swiper),
59
+        setTransition: Fade.setTransition.bind(swiper),
60
+      },
61
+    });
62
+  },
63
+  on: {
64
+    beforeInit() {
65
+      const swiper = this;
66
+      if (swiper.params.effect !== 'fade') return;
67
+      swiper.classNames.push(`${swiper.params.containerModifierClass}fade`);
68
+      const overwriteParams = {
69
+        slidesPerView: 1,
70
+        slidesPerColumn: 1,
71
+        slidesPerGroup: 1,
72
+        watchSlidesProgress: true,
73
+        spaceBetween: 0,
74
+        virtualTranslate: true,
75
+      };
76
+      Utils.extend(swiper.params, overwriteParams);
77
+      Utils.extend(swiper.originalParams, overwriteParams);
78
+    },
79
+    setTranslate() {
80
+      const swiper = this;
81
+      if (swiper.params.effect !== 'fade') return;
82
+      swiper.fadeEffect.setTranslate();
83
+    },
84
+    setTransition(duration) {
85
+      const swiper = this;
86
+      if (swiper.params.effect !== 'fade') return;
87
+      swiper.fadeEffect.setTransition(duration);
88
+    },
89
+  },
90
+};
0 91
new file mode 100644
... ...
@@ -0,0 +1,19 @@
1
+.swiper-container-fade {
2
+  &.swiper-container-free-mode {
3
+    .swiper-slide {
4
+      transition-timing-function: ease-out;
5
+    }
6
+  }
7
+  .swiper-slide {
8
+    pointer-events: none;
9
+    transition-property: opacity;
10
+    .swiper-slide {
11
+      pointer-events: none;
12
+    }
13
+  }
14
+  .swiper-slide-active {
15
+    &, & .swiper-slide-active {
16
+      pointer-events: auto;
17
+    }
18
+  }
19
+}
0 20
new file mode 100644
... ...
@@ -0,0 +1,19 @@
1
+.swiper-container-fade {
2
+  &.swiper-container-free-mode {
3
+    .swiper-slide {
4
+      transition-timing-function: ease-out;
5
+    }
6
+  }
7
+  .swiper-slide {
8
+    pointer-events: none;
9
+    transition-property: opacity;
10
+    .swiper-slide {
11
+      pointer-events: none;
12
+    }
13
+  }
14
+  .swiper-slide-active {
15
+    &, & .swiper-slide-active {
16
+      pointer-events: auto;
17
+    }
18
+  }
19
+}
0 20
new file mode 100644
... ...
@@ -0,0 +1,120 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Flip = {
5
+  setTranslate() {
6
+    const swiper = this;
7
+    const { slides, rtlTranslate: rtl } = swiper;
8
+    for (let i = 0; i < slides.length; i += 1) {
9
+      const $slideEl = slides.eq(i);
10
+      let progress = $slideEl[0].progress;
11
+      if (swiper.params.flipEffect.limitRotation) {
12
+        progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
13
+      }
14
+      const offset = $slideEl[0].swiperSlideOffset;
15
+      const rotate = -180 * progress;
16
+      let rotateY = rotate;
17
+      let rotateX = 0;
18
+      let tx = -offset;
19
+      let ty = 0;
20
+      if (!swiper.isHorizontal()) {
21
+        ty = tx;
22
+        tx = 0;
23
+        rotateX = -rotateY;
24
+        rotateY = 0;
25
+      } else if (rtl) {
26
+        rotateY = -rotateY;
27
+      }
28
+
29
+      $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
30
+
31
+      if (swiper.params.flipEffect.slideShadows) {
32
+        // Set shadows
33
+        let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
34
+        let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
35
+        if (shadowBefore.length === 0) {
36
+          shadowBefore = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`);
37
+          $slideEl.append(shadowBefore);
38
+        }
39
+        if (shadowAfter.length === 0) {
40
+          shadowAfter = $(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`);
41
+          $slideEl.append(shadowAfter);
42
+        }
43
+        if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
44
+        if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
45
+      }
46
+      $slideEl
47
+        .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`);
48
+    }
49
+  },
50
+  setTransition(duration) {
51
+    const swiper = this;
52
+    const { slides, activeIndex, $wrapperEl } = swiper;
53
+    slides
54
+      .transition(duration)
55
+      .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
56
+      .transition(duration);
57
+    if (swiper.params.virtualTranslate && duration !== 0) {
58
+      let eventTriggered = false;
59
+      // eslint-disable-next-line
60
+      slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
61
+        if (eventTriggered) return;
62
+        if (!swiper || swiper.destroyed) return;
63
+        // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
64
+        eventTriggered = true;
65
+        swiper.animating = false;
66
+        const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
67
+        for (let i = 0; i < triggerEvents.length; i += 1) {
68
+          $wrapperEl.trigger(triggerEvents[i]);
69
+        }
70
+      });
71
+    }
72
+  },
73
+};
74
+
75
+export default {
76
+  name: 'effect-flip',
77
+  params: {
78
+    flipEffect: {
79
+      slideShadows: true,
80
+      limitRotation: true,
81
+    },
82
+  },
83
+  create() {
84
+    const swiper = this;
85
+    Utils.extend(swiper, {
86
+      flipEffect: {
87
+        setTranslate: Flip.setTranslate.bind(swiper),
88
+        setTransition: Flip.setTransition.bind(swiper),
89
+      },
90
+    });
91
+  },
92
+  on: {
93
+    beforeInit() {
94
+      const swiper = this;
95
+      if (swiper.params.effect !== 'flip') return;
96
+      swiper.classNames.push(`${swiper.params.containerModifierClass}flip`);
97
+      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
98
+      const overwriteParams = {
99
+        slidesPerView: 1,
100
+        slidesPerColumn: 1,
101
+        slidesPerGroup: 1,
102
+        watchSlidesProgress: true,
103
+        spaceBetween: 0,
104
+        virtualTranslate: true,
105
+      };
106
+      Utils.extend(swiper.params, overwriteParams);
107
+      Utils.extend(swiper.originalParams, overwriteParams);
108
+    },
109
+    setTranslate() {
110
+      const swiper = this;
111
+      if (swiper.params.effect !== 'flip') return;
112
+      swiper.flipEffect.setTranslate();
113
+    },
114
+    setTransition(duration) {
115
+      const swiper = this;
116
+      if (swiper.params.effect !== 'flip') return;
117
+      swiper.flipEffect.setTransition(duration);
118
+    },
119
+  },
120
+};
0 121
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+.swiper-container-flip {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    .swiper-slide {
8
+      pointer-events: none;
9
+    }
10
+  }
11
+  .swiper-slide-active {
12
+    &, & .swiper-slide-active {
13
+      pointer-events: auto;
14
+    }
15
+  }
16
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
17
+    z-index: 0;
18
+    backface-visibility: hidden;
19
+  }
20
+}
0 21
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+.swiper-container-flip {
2
+  overflow: visible;
3
+  .swiper-slide {
4
+    pointer-events: none;
5
+    backface-visibility: hidden;
6
+    z-index: 1;
7
+    .swiper-slide {
8
+      pointer-events: none;
9
+    }
10
+  }
11
+  .swiper-slide-active {
12
+    &, & .swiper-slide-active {
13
+      pointer-events: auto;
14
+    }
15
+  }
16
+  .swiper-slide-shadow-top, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left, .swiper-slide-shadow-right {
17
+    z-index: 0;
18
+    backface-visibility: hidden;
19
+  }
20
+}
0 21
new file mode 100644
... ...
@@ -0,0 +1,104 @@
1
+import { window, document } from 'ssr-window';
2
+import $ from '../../utils/dom';
3
+import Utils from '../../utils/utils';
4
+
5
+const HashNavigation = {
6
+  onHashCange() {
7
+    const swiper = this;
8
+    swiper.emit('hashChange');
9
+    const newHash = document.location.hash.replace('#', '');
10
+    const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
11
+    if (newHash !== activeSlideHash) {
12
+      const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index();
13
+      if (typeof newIndex === 'undefined') return;
14
+      swiper.slideTo(newIndex);
15
+    }
16
+  },
17
+  setHash() {
18
+    const swiper = this;
19
+    if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
20
+    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {
21
+      window.history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''));
22
+      swiper.emit('hashSet');
23
+    } else {
24
+      const slide = swiper.slides.eq(swiper.activeIndex);
25
+      const hash = slide.attr('data-hash') || slide.attr('data-history');
26
+      document.location.hash = hash || '';
27
+      swiper.emit('hashSet');
28
+    }
29
+  },
30
+  init() {
31
+    const swiper = this;
32
+    if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return;
33
+    swiper.hashNavigation.initialized = true;
34
+    const hash = document.location.hash.replace('#', '');
35
+    if (hash) {
36
+      const speed = 0;
37
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
38
+        const slide = swiper.slides.eq(i);
39
+        const slideHash = slide.attr('data-hash') || slide.attr('data-history');
40
+        if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
41
+          const index = slide.index();
42
+          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
43
+        }
44
+      }
45
+    }
46
+    if (swiper.params.hashNavigation.watchState) {
47
+      $(window).on('hashchange', swiper.hashNavigation.onHashCange);
48
+    }
49
+  },
50
+  destroy() {
51
+    const swiper = this;
52
+    if (swiper.params.hashNavigation.watchState) {
53
+      $(window).off('hashchange', swiper.hashNavigation.onHashCange);
54
+    }
55
+  },
56
+};
57
+export default {
58
+  name: 'hash-navigation',
59
+  params: {
60
+    hashNavigation: {
61
+      enabled: false,
62
+      replaceState: false,
63
+      watchState: false,
64
+    },
65
+  },
66
+  create() {
67
+    const swiper = this;
68
+    Utils.extend(swiper, {
69
+      hashNavigation: {
70
+        initialized: false,
71
+        init: HashNavigation.init.bind(swiper),
72
+        destroy: HashNavigation.destroy.bind(swiper),
73
+        setHash: HashNavigation.setHash.bind(swiper),
74
+        onHashCange: HashNavigation.onHashCange.bind(swiper),
75
+      },
76
+    });
77
+  },
78
+  on: {
79
+    init() {
80
+      const swiper = this;
81
+      if (swiper.params.hashNavigation.enabled) {
82
+        swiper.hashNavigation.init();
83
+      }
84
+    },
85
+    destroy() {
86
+      const swiper = this;
87
+      if (swiper.params.hashNavigation.enabled) {
88
+        swiper.hashNavigation.destroy();
89
+      }
90
+    },
91
+    transitionEnd() {
92
+      const swiper = this;
93
+      if (swiper.hashNavigation.initialized) {
94
+        swiper.hashNavigation.setHash();
95
+      }
96
+    },
97
+    slideChange() {
98
+      const swiper = this;
99
+      if (swiper.hashNavigation.initialized && swiper.params.cssMode) {
100
+        swiper.hashNavigation.setHash();
101
+      }
102
+    },
103
+  },
104
+};
0 105
new file mode 100644
... ...
@@ -0,0 +1,130 @@
1
+import { window } from 'ssr-window';
2
+import Utils from '../../utils/utils';
3
+
4
+const History = {
5
+  init() {
6
+    const swiper = this;
7
+    if (!swiper.params.history) return;
8
+    if (!window.history || !window.history.pushState) {
9
+      swiper.params.history.enabled = false;
10
+      swiper.params.hashNavigation.enabled = true;
11
+      return;
12
+    }
13
+    const history = swiper.history;
14
+    history.initialized = true;
15
+    history.paths = History.getPathValues();
16
+    if (!history.paths.key && !history.paths.value) return;
17
+    history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
18
+    if (!swiper.params.history.replaceState) {
19
+      window.addEventListener('popstate', swiper.history.setHistoryPopState);
20
+    }
21
+  },
22
+  destroy() {
23
+    const swiper = this;
24
+    if (!swiper.params.history.replaceState) {
25
+      window.removeEventListener('popstate', swiper.history.setHistoryPopState);
26
+    }
27
+  },
28
+  setHistoryPopState() {
29
+    const swiper = this;
30
+    swiper.history.paths = History.getPathValues();
31
+    swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
32
+  },
33
+  getPathValues() {
34
+    const pathArray = window.location.pathname.slice(1).split('/').filter((part) => part !== '');
35
+    const total = pathArray.length;
36
+    const key = pathArray[total - 2];
37
+    const value = pathArray[total - 1];
38
+    return { key, value };
39
+  },
40
+  setHistory(key, index) {
41
+    const swiper = this;
42
+    if (!swiper.history.initialized || !swiper.params.history.enabled) return;
43
+    const slide = swiper.slides.eq(index);
44
+    let value = History.slugify(slide.attr('data-history'));
45
+    if (!window.location.pathname.includes(key)) {
46
+      value = `${key}/${value}`;
47
+    }
48
+    const currentState = window.history.state;
49
+    if (currentState && currentState.value === value) {
50
+      return;
51
+    }
52
+    if (swiper.params.history.replaceState) {
53
+      window.history.replaceState({ value }, null, value);
54
+    } else {
55
+      window.history.pushState({ value }, null, value);
56
+    }
57
+  },
58
+  slugify(text) {
59
+    return text.toString()
60
+      .replace(/\s+/g, '-')
61
+      .replace(/[^\w-]+/g, '')
62
+      .replace(/--+/g, '-')
63
+      .replace(/^-+/, '')
64
+      .replace(/-+$/, '');
65
+  },
66
+  scrollToSlide(speed, value, runCallbacks) {
67
+    const swiper = this;
68
+    if (value) {
69
+      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
70
+        const slide = swiper.slides.eq(i);
71
+        const slideHistory = History.slugify(slide.attr('data-history'));
72
+        if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
73
+          const index = slide.index();
74
+          swiper.slideTo(index, speed, runCallbacks);
75
+        }
76
+      }
77
+    } else {
78
+      swiper.slideTo(0, speed, runCallbacks);
79
+    }
80
+  },
81
+};
82
+
83
+export default {
84
+  name: 'history',
85
+  params: {
86
+    history: {
87
+      enabled: false,
88
+      replaceState: false,
89
+      key: 'slides',
90
+    },
91
+  },
92
+  create() {
93
+    const swiper = this;
94
+    Utils.extend(swiper, {
95
+      history: {
96
+        init: History.init.bind(swiper),
97
+        setHistory: History.setHistory.bind(swiper),
98
+        setHistoryPopState: History.setHistoryPopState.bind(swiper),
99
+        scrollToSlide: History.scrollToSlide.bind(swiper),
100
+        destroy: History.destroy.bind(swiper),
101
+      },
102
+    });
103
+  },
104
+  on: {
105
+    init() {
106
+      const swiper = this;
107
+      if (swiper.params.history.enabled) {
108
+        swiper.history.init();
109
+      }
110
+    },
111
+    destroy() {
112
+      const swiper = this;
113
+      if (swiper.params.history.enabled) {
114
+        swiper.history.destroy();
115
+      }
116
+    },
117
+    transitionEnd() {
118
+      const swiper = this;
119
+      if (swiper.history.initialized) {
120
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
121
+      }
122
+    },
123
+    slideChange() {
124
+      const swiper = this;
125
+      if (swiper.history.initialized && swiper.params.cssMode) {
126
+        swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
127
+      }
128
+    },
129
+  },
130
+};
0 131
new file mode 100644
... ...
@@ -0,0 +1,117 @@
1
+import { window, document } from 'ssr-window';
2
+import $ from '../../utils/dom';
3
+import Utils from '../../utils/utils';
4
+
5
+const Keyboard = {
6
+  handle(event) {
7
+    const swiper = this;
8
+    const { rtlTranslate: rtl } = swiper;
9
+    let e = event;
10
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
11
+    const kc = e.keyCode || e.charCode;
12
+    // Directions locks
13
+    if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40) || kc === 34)) {
14
+      return false;
15
+    }
16
+    if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38) || kc === 33)) {
17
+      return false;
18
+    }
19
+    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
20
+      return undefined;
21
+    }
22
+    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
23
+      return undefined;
24
+    }
25
+    if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
26
+      let inView = false;
27
+      // Check that swiper should be inside of visible area of window
28
+      if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {
29
+        return undefined;
30
+      }
31
+      const windowWidth = window.innerWidth;
32
+      const windowHeight = window.innerHeight;
33
+      const swiperOffset = swiper.$el.offset();
34
+      if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
35
+      const swiperCoord = [
36
+        [swiperOffset.left, swiperOffset.top],
37
+        [swiperOffset.left + swiper.width, swiperOffset.top],
38
+        [swiperOffset.left, swiperOffset.top + swiper.height],
39
+        [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],
40
+      ];
41
+      for (let i = 0; i < swiperCoord.length; i += 1) {
42
+        const point = swiperCoord[i];
43
+        if (
44
+          point[0] >= 0 && point[0] <= windowWidth
45
+          && point[1] >= 0 && point[1] <= windowHeight
46
+        ) {
47
+          inView = true;
48
+        }
49
+      }
50
+      if (!inView) return undefined;
51
+    }
52
+    if (swiper.isHorizontal()) {
53
+      if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
54
+        if (e.preventDefault) e.preventDefault();
55
+        else e.returnValue = false;
56
+      }
57
+      if (((kc === 34 || kc === 39) && !rtl) || ((kc === 33 || kc === 37) && rtl)) swiper.slideNext();
58
+      if (((kc === 33 || kc === 37) && !rtl) || ((kc === 34 || kc === 39) && rtl)) swiper.slidePrev();
59
+    } else {
60
+      if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
61
+        if (e.preventDefault) e.preventDefault();
62
+        else e.returnValue = false;
63
+      }
64
+      if (kc === 34 || kc === 40) swiper.slideNext();
65
+      if (kc === 33 || kc === 38) swiper.slidePrev();
66
+    }
67
+    swiper.emit('keyPress', kc);
68
+    return undefined;
69
+  },
70
+  enable() {
71
+    const swiper = this;
72
+    if (swiper.keyboard.enabled) return;
73
+    $(document).on('keydown', swiper.keyboard.handle);
74
+    swiper.keyboard.enabled = true;
75
+  },
76
+  disable() {
77
+    const swiper = this;
78
+    if (!swiper.keyboard.enabled) return;
79
+    $(document).off('keydown', swiper.keyboard.handle);
80
+    swiper.keyboard.enabled = false;
81
+  },
82
+};
83
+
84
+export default {
85
+  name: 'keyboard',
86
+  params: {
87
+    keyboard: {
88
+      enabled: false,
89
+      onlyInViewport: true,
90
+    },
91
+  },
92
+  create() {
93
+    const swiper = this;
94
+    Utils.extend(swiper, {
95
+      keyboard: {
96
+        enabled: false,
97
+        enable: Keyboard.enable.bind(swiper),
98
+        disable: Keyboard.disable.bind(swiper),
99
+        handle: Keyboard.handle.bind(swiper),
100
+      },
101
+    });
102
+  },
103
+  on: {
104
+    init() {
105
+      const swiper = this;
106
+      if (swiper.params.keyboard.enabled) {
107
+        swiper.keyboard.enable();
108
+      }
109
+    },
110
+    destroy() {
111
+      const swiper = this;
112
+      if (swiper.keyboard.enabled) {
113
+        swiper.keyboard.disable();
114
+      }
115
+    },
116
+  },
117
+};
0 118
new file mode 100644
... ...
@@ -0,0 +1,227 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Lazy = {
5
+  loadInSlide(index, loadInDuplicate = true) {
6
+    const swiper = this;
7
+    const params = swiper.params.lazy;
8
+    if (typeof index === 'undefined') return;
9
+    if (swiper.slides.length === 0) return;
10
+    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
11
+
12
+    const $slideEl = isVirtual
13
+      ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`)
14
+      : swiper.slides.eq(index);
15
+
16
+    let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);
17
+    if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
18
+      $images = $images.add($slideEl[0]);
19
+    }
20
+    if ($images.length === 0) return;
21
+
22
+    $images.each((imageIndex, imageEl) => {
23
+      const $imageEl = $(imageEl);
24
+      $imageEl.addClass(params.loadingClass);
25
+
26
+      const background = $imageEl.attr('data-background');
27
+      const src = $imageEl.attr('data-src');
28
+      const srcset = $imageEl.attr('data-srcset');
29
+      const sizes = $imageEl.attr('data-sizes');
30
+      const $pictureEl = $imageEl.parent('picture');
31
+
32
+      swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => {
33
+        if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return;
34
+        if (background) {
35
+          $imageEl.css('background-image', `url("${background}")`);
36
+          $imageEl.removeAttr('data-background');
37
+        } else {
38
+          if (srcset) {
39
+            $imageEl.attr('srcset', srcset);
40
+            $imageEl.removeAttr('data-srcset');
41
+          }
42
+          if (sizes) {
43
+            $imageEl.attr('sizes', sizes);
44
+            $imageEl.removeAttr('data-sizes');
45
+          }
46
+          if ($pictureEl.length) {
47
+            $pictureEl.children('source').each((sourceIndex, sourceEl) => {
48
+              const $source = $(sourceEl);
49
+
50
+              if ($source.attr('data-srcset')) {
51
+                $source.attr('srcset', $source.attr('data-srcset'));
52
+                $source.removeAttr('data-srcset');
53
+              }
54
+            });
55
+          }
56
+          if (src) {
57
+            $imageEl.attr('src', src);
58
+            $imageEl.removeAttr('data-src');
59
+          }
60
+        }
61
+
62
+        $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
63
+        $slideEl.find(`.${params.preloaderClass}`).remove();
64
+        if (swiper.params.loop && loadInDuplicate) {
65
+          const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
66
+          if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
67
+            const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`);
68
+            swiper.lazy.loadInSlide(originalSlide.index(), false);
69
+          } else {
70
+            const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`);
71
+            swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
72
+          }
73
+        }
74
+        swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
75
+        if (swiper.params.autoHeight) {
76
+          swiper.updateAutoHeight();
77
+        }
78
+      });
79
+
80
+      swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
81
+    });
82
+  },
83
+  load() {
84
+    const swiper = this;
85
+    const {
86
+      $wrapperEl, params: swiperParams, slides, activeIndex,
87
+    } = swiper;
88
+    const isVirtual = swiper.virtual && swiperParams.virtual.enabled;
89
+    const params = swiperParams.lazy;
90
+
91
+    let slidesPerView = swiperParams.slidesPerView;
92
+    if (slidesPerView === 'auto') {
93
+      slidesPerView = 0;
94
+    }
95
+
96
+    function slideExist(index) {
97
+      if (isVirtual) {
98
+        if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) {
99
+          return true;
100
+        }
101
+      } else if (slides[index]) return true;
102
+      return false;
103
+    }
104
+
105
+    function slideIndex(slideEl) {
106
+      if (isVirtual) {
107
+        return $(slideEl).attr('data-swiper-slide-index');
108
+      }
109
+      return $(slideEl).index();
110
+    }
111
+
112
+    if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
113
+    if (swiper.params.watchSlidesVisibility) {
114
+      $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => {
115
+        const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
116
+        swiper.lazy.loadInSlide(index);
117
+      });
118
+    } else if (slidesPerView > 1) {
119
+      for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
120
+        if (slideExist(i)) swiper.lazy.loadInSlide(i);
121
+      }
122
+    } else {
123
+      swiper.lazy.loadInSlide(activeIndex);
124
+    }
125
+    if (params.loadPrevNext) {
126
+      if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
127
+        const amount = params.loadPrevNextAmount;
128
+        const spv = slidesPerView;
129
+        const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
130
+        const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
131
+        // Next Slides
132
+        for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {
133
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
134
+        }
135
+        // Prev Slides
136
+        for (let i = minIndex; i < activeIndex; i += 1) {
137
+          if (slideExist(i)) swiper.lazy.loadInSlide(i);
138
+        }
139
+      } else {
140
+        const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);
141
+        if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
142
+
143
+        const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);
144
+        if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
145
+      }
146
+    }
147
+  },
148
+};
149
+
150
+export default {
151
+  name: 'lazy',
152
+  params: {
153
+    lazy: {
154
+      enabled: false,
155
+      loadPrevNext: false,
156
+      loadPrevNextAmount: 1,
157
+      loadOnTransitionStart: false,
158
+
159
+      elementClass: 'swiper-lazy',
160
+      loadingClass: 'swiper-lazy-loading',
161
+      loadedClass: 'swiper-lazy-loaded',
162
+      preloaderClass: 'swiper-lazy-preloader',
163
+    },
164
+  },
165
+  create() {
166
+    const swiper = this;
167
+    Utils.extend(swiper, {
168
+      lazy: {
169
+        initialImageLoaded: false,
170
+        load: Lazy.load.bind(swiper),
171
+        loadInSlide: Lazy.loadInSlide.bind(swiper),
172
+      },
173
+    });
174
+  },
175
+  on: {
176
+    beforeInit() {
177
+      const swiper = this;
178
+      if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
179
+        swiper.params.preloadImages = false;
180
+      }
181
+    },
182
+    init() {
183
+      const swiper = this;
184
+      if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
185
+        swiper.lazy.load();
186
+      }
187
+    },
188
+    scroll() {
189
+      const swiper = this;
190
+      if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
191
+        swiper.lazy.load();
192
+      }
193
+    },
194
+    resize() {
195
+      const swiper = this;
196
+      if (swiper.params.lazy.enabled) {
197
+        swiper.lazy.load();
198
+      }
199
+    },
200
+    scrollbarDragMove() {
201
+      const swiper = this;
202
+      if (swiper.params.lazy.enabled) {
203
+        swiper.lazy.load();
204
+      }
205
+    },
206
+    transitionStart() {
207
+      const swiper = this;
208
+      if (swiper.params.lazy.enabled) {
209
+        if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
210
+          swiper.lazy.load();
211
+        }
212
+      }
213
+    },
214
+    transitionEnd() {
215
+      const swiper = this;
216
+      if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
217
+        swiper.lazy.load();
218
+      }
219
+    },
220
+    slideChange() {
221
+      const swiper = this;
222
+      if (swiper.params.lazy.enabled && swiper.params.cssMode) {
223
+        swiper.lazy.load();
224
+      }
225
+    },
226
+  },
227
+};
0 228
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+/* Preloader */
2
+:root {
3
+  /*
4
+  --swiper-preloader-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-lazy-preloader {
8
+  width: 42px;
9
+  height: 42px;
10
+  position: absolute;
11
+  left: 50%;
12
+  top: 50%;
13
+  margin-left: -21px;
14
+  margin-top: -21px;
15
+  z-index: 10;
16
+  transform-origin: 50%;
17
+  animation: swiper-preloader-spin 1s infinite linear;
18
+  box-sizing: border-box;
19
+  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
20
+  border-radius: 50%;
21
+  border-top-color: transparent;
22
+}
23
+
24
+.swiper-lazy-preloader-white {
25
+  --swiper-preloader-color: #fff;
26
+}
27
+.swiper-lazy-preloader-black {
28
+  --swiper-preloader-color: #000;
29
+}
30
+@keyframes swiper-preloader-spin {
31
+  100% {
32
+    transform: rotate(360deg);
33
+  }
34
+}
0 35
new file mode 100644
... ...
@@ -0,0 +1,34 @@
1
+/* Preloader */
2
+:root {
3
+  /*
4
+  --swiper-preloader-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-lazy-preloader {
8
+  width: 42px;
9
+  height: 42px;
10
+  position: absolute;
11
+  left: 50%;
12
+  top: 50%;
13
+  margin-left: -21px;
14
+  margin-top: -21px;
15
+  z-index: 10;
16
+  transform-origin: 50%;
17
+  animation: swiper-preloader-spin 1s infinite linear;
18
+  box-sizing: border-box;
19
+  border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
20
+  border-radius: 50%;
21
+  border-top-color: transparent;
22
+}
23
+
24
+.swiper-lazy-preloader-white {
25
+  --swiper-preloader-color: #fff;
26
+}
27
+.swiper-lazy-preloader-black {
28
+  --swiper-preloader-color: #000;
29
+}
30
+@keyframes swiper-preloader-spin {
31
+  100% {
32
+    transform: rotate(360deg);
33
+  }
34
+}
0 35
new file mode 100644
... ...
@@ -0,0 +1,424 @@
1
+import { window, document } from 'ssr-window';
2
+import $ from '../../utils/dom';
3
+import Utils from '../../utils/utils';
4
+
5
+function isEventSupported() {
6
+  const eventName = 'onwheel';
7
+  let isSupported = eventName in document;
8
+
9
+  if (!isSupported) {
10
+    const element = document.createElement('div');
11
+    element.setAttribute(eventName, 'return;');
12
+    isSupported = typeof element[eventName] === 'function';
13
+  }
14
+
15
+  if (!isSupported
16
+    && document.implementation
17
+    && document.implementation.hasFeature
18
+    // always returns true in newer browsers as per the standard.
19
+    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
20
+    && document.implementation.hasFeature('', '') !== true
21
+  ) {
22
+    // This is the only way to test support for the `wheel` event in IE9+.
23
+    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
24
+  }
25
+
26
+  return isSupported;
27
+}
28
+const Mousewheel = {
29
+  lastScrollTime: Utils.now(),
30
+  lastEventBeforeSnap: undefined,
31
+  recentWheelEvents: [],
32
+  event() {
33
+    if (window.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
34
+    return isEventSupported() ? 'wheel' : 'mousewheel';
35
+  },
36
+  normalize(e) {
37
+    // Reasonable defaults
38
+    const PIXEL_STEP = 10;
39
+    const LINE_HEIGHT = 40;
40
+    const PAGE_HEIGHT = 800;
41
+
42
+    let sX = 0;
43
+    let sY = 0; // spinX, spinY
44
+    let pX = 0;
45
+    let pY = 0; // pixelX, pixelY
46
+
47
+    // Legacy
48
+    if ('detail' in e) {
49
+      sY = e.detail;
50
+    }
51
+    if ('wheelDelta' in e) {
52
+      sY = -e.wheelDelta / 120;
53
+    }
54
+    if ('wheelDeltaY' in e) {
55
+      sY = -e.wheelDeltaY / 120;
56
+    }
57
+    if ('wheelDeltaX' in e) {
58
+      sX = -e.wheelDeltaX / 120;
59
+    }
60
+
61
+    // side scrolling on FF with DOMMouseScroll
62
+    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
63
+      sX = sY;
64
+      sY = 0;
65
+    }
66
+
67
+    pX = sX * PIXEL_STEP;
68
+    pY = sY * PIXEL_STEP;
69
+
70
+    if ('deltaY' in e) {
71
+      pY = e.deltaY;
72
+    }
73
+    if ('deltaX' in e) {
74
+      pX = e.deltaX;
75
+    }
76
+
77
+    if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll
78
+      pX = pY;
79
+      pY = 0;
80
+    }
81
+
82
+    if ((pX || pY) && e.deltaMode) {
83
+      if (e.deltaMode === 1) { // delta in LINE units
84
+        pX *= LINE_HEIGHT;
85
+        pY *= LINE_HEIGHT;
86
+      } else { // delta in PAGE units
87
+        pX *= PAGE_HEIGHT;
88
+        pY *= PAGE_HEIGHT;
89
+      }
90
+    }
91
+
92
+    // Fall-back if spin cannot be determined
93
+    if (pX && !sX) {
94
+      sX = (pX < 1) ? -1 : 1;
95
+    }
96
+    if (pY && !sY) {
97
+      sY = (pY < 1) ? -1 : 1;
98
+    }
99
+
100
+    return {
101
+      spinX: sX,
102
+      spinY: sY,
103
+      pixelX: pX,
104
+      pixelY: pY,
105
+    };
106
+  },
107
+  handleMouseEnter() {
108
+    const swiper = this;
109
+    swiper.mouseEntered = true;
110
+  },
111
+  handleMouseLeave() {
112
+    const swiper = this;
113
+    swiper.mouseEntered = false;
114
+  },
115
+  handle(event) {
116
+    let e = event;
117
+    const swiper = this;
118
+    const params = swiper.params.mousewheel;
119
+
120
+    if (swiper.params.cssMode) {
121
+      e.preventDefault();
122
+    }
123
+
124
+    let target = swiper.$el;
125
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
126
+      target = $(swiper.params.mousewheel.eventsTarged);
127
+    }
128
+    if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;
129
+
130
+    if (e.originalEvent) e = e.originalEvent; // jquery fix
131
+    let delta = 0;
132
+    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
133
+
134
+    const data = Mousewheel.normalize(e);
135
+
136
+    if (params.forceToAxis) {
137
+      if (swiper.isHorizontal()) {
138
+        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
139
+        else return true;
140
+      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
141
+      else return true;
142
+    } else {
143
+      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
144
+    }
145
+
146
+    if (delta === 0) return true;
147
+
148
+    if (params.invert) delta = -delta;
149
+
150
+    if (!swiper.params.freeMode) {
151
+      // Register the new event in a variable which stores the relevant data
152
+      const newEvent = {
153
+        time: Utils.now(),
154
+        delta: Math.abs(delta),
155
+        direction: Math.sign(delta),
156
+        raw: event,
157
+      };
158
+
159
+      // Keep the most recent events
160
+      const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
161
+      if (recentWheelEvents.length >= 2) {
162
+        recentWheelEvents.shift(); // only store the last N events
163
+      }
164
+      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
165
+      recentWheelEvents.push(newEvent);
166
+
167
+      // If there is at least one previous recorded event:
168
+      //   If direction has changed or
169
+      //   if the scroll is quicker than the previous one:
170
+      //     Animate the slider.
171
+      // Else (this is the first time the wheel is moved):
172
+      //     Animate the slider.
173
+      if (prevEvent) {
174
+        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
175
+          swiper.mousewheel.animateSlider(newEvent);
176
+        }
177
+      } else {
178
+        swiper.mousewheel.animateSlider(newEvent);
179
+      }
180
+
181
+      // If it's time to release the scroll:
182
+      //   Return now so you don't hit the preventDefault.
183
+      if (swiper.mousewheel.releaseScroll(newEvent)) {
184
+        return true;
185
+      }
186
+    } else {
187
+      // Freemode or scrollContainer:
188
+
189
+      // If we recently snapped after a momentum scroll, then ignore wheel events
190
+      // to give time for the deceleration to finish. Stop ignoring after 500 msecs
191
+      // or if it's a new scroll (larger delta or inverse sign as last event before
192
+      // an end-of-momentum snap).
193
+      const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };
194
+      const { lastEventBeforeSnap } = swiper.mousewheel;
195
+      const ignoreWheelEvents = lastEventBeforeSnap
196
+        && newEvent.time < lastEventBeforeSnap.time + 500
197
+        && newEvent.delta <= lastEventBeforeSnap.delta
198
+        && newEvent.direction === lastEventBeforeSnap.direction;
199
+      if (!ignoreWheelEvents) {
200
+        swiper.mousewheel.lastEventBeforeSnap = undefined;
201
+
202
+        if (swiper.params.loop) {
203
+          swiper.loopFix();
204
+        }
205
+        let position = swiper.getTranslate() + (delta * params.sensitivity);
206
+        const wasBeginning = swiper.isBeginning;
207
+        const wasEnd = swiper.isEnd;
208
+
209
+        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
210
+        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
211
+
212
+        swiper.setTransition(0);
213
+        swiper.setTranslate(position);
214
+        swiper.updateProgress();
215
+        swiper.updateActiveIndex();
216
+        swiper.updateSlidesClasses();
217
+
218
+        if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
219
+          swiper.updateSlidesClasses();
220
+        }
221
+
222
+        if (swiper.params.freeModeSticky) {
223
+          // When wheel scrolling starts with sticky (aka snap) enabled, then detect
224
+          // the end of a momentum scroll by storing recent (N=15?) wheel events.
225
+          // 1. do all N events have decreasing or same (absolute value) delta?
226
+          // 2. did all N events arrive in the last M (M=500?) msecs?
227
+          // 3. does the earliest event have an (absolute value) delta that's
228
+          //    at least P (P=1?) larger than the most recent event's delta?
229
+          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?
230
+          // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration.
231
+          // Snap immediately and ignore remaining wheel events in this scroll.
232
+          // See comment above for "remaining wheel events in this scroll" determination.
233
+          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.
234
+          clearTimeout(swiper.mousewheel.timeout);
235
+          swiper.mousewheel.timeout = undefined;
236
+          const recentWheelEvents = swiper.mousewheel.recentWheelEvents;
237
+          if (recentWheelEvents.length >= 15) {
238
+            recentWheelEvents.shift(); // only store the last N events
239
+          }
240
+          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;
241
+          const firstEvent = recentWheelEvents[0];
242
+          recentWheelEvents.push(newEvent);
243
+          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
244
+            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.
245
+            recentWheelEvents.splice(0);
246
+          } else if (recentWheelEvents.length >= 15
247
+              && newEvent.time - firstEvent.time < 500
248
+              && firstEvent.delta - newEvent.delta >= 1
249
+              && newEvent.delta <= 6
250
+          ) {
251
+            // We're at the end of the deceleration of a momentum scroll, so there's no need
252
+            // to wait for more events. Snap ASAP on the next tick.
253
+            // Also, because there's some remaining momentum we'll bias the snap in the
254
+            // direction of the ongoing scroll because it's better UX for the scroll to snap
255
+            // in the same direction as the scroll instead of reversing to snap.  Therefore,
256
+            // if it's already scrolled more than 20% in the current direction, keep going.
257
+            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
258
+            swiper.mousewheel.lastEventBeforeSnap = newEvent;
259
+            recentWheelEvents.splice(0);
260
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
261
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
262
+            }, 0); // no delay; move on next tick
263
+          }
264
+          if (!swiper.mousewheel.timeout) {
265
+            // if we get here, then we haven't detected the end of a momentum scroll, so
266
+            // we'll consider a scroll "complete" when there haven't been any wheel events
267
+            // for 500ms.
268
+            swiper.mousewheel.timeout = Utils.nextTick(() => {
269
+              const snapToThreshold = 0.5;
270
+              swiper.mousewheel.lastEventBeforeSnap = newEvent;
271
+              recentWheelEvents.splice(0);
272
+              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);
273
+            }, 500);
274
+          }
275
+        }
276
+
277
+        // Emit event
278
+        if (!ignoreWheelEvents) swiper.emit('scroll', e);
279
+
280
+        // Stop autoplay
281
+        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
282
+        // Return page scroll on edge positions
283
+        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
284
+      }
285
+    }
286
+
287
+    if (e.preventDefault) e.preventDefault();
288
+    else e.returnValue = false;
289
+    return false;
290
+  },
291
+  animateSlider(newEvent) {
292
+    const swiper = this;
293
+    // If the movement is NOT big enough and
294
+    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):
295
+    //   Don't go any further (avoid insignificant scroll movement).
296
+    if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) {
297
+      // Return false as a default
298
+      return true;
299
+    }
300
+    // If user is scrolling towards the end:
301
+    //   If the slider hasn't hit the latest slide or
302
+    //   if the slider is a loop and
303
+    //   if the slider isn't moving right now:
304
+    //     Go to next slide and
305
+    //     emit a scroll event.
306
+    // Else (the user is scrolling towards the beginning) and
307
+    // if the slider hasn't hit the first slide or
308
+    // if the slider is a loop and
309
+    // if the slider isn't moving right now:
310
+    //   Go to prev slide and
311
+    //   emit a scroll event.
312
+    if (newEvent.direction < 0) {
313
+      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
314
+        swiper.slideNext();
315
+        swiper.emit('scroll', newEvent.raw);
316
+      }
317
+    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
318
+      swiper.slidePrev();
319
+      swiper.emit('scroll', newEvent.raw);
320
+    }
321
+    // If you got here is because an animation has been triggered so store the current time
322
+    swiper.mousewheel.lastScrollTime = (new window.Date()).getTime();
323
+    // Return false as a default
324
+    return false;
325
+  },
326
+  releaseScroll(newEvent) {
327
+    const swiper = this;
328
+    const params = swiper.params.mousewheel;
329
+    if (newEvent.direction < 0) {
330
+      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
331
+        // Return true to animate scroll on edges
332
+        return true;
333
+      }
334
+    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
335
+      // Return true to animate scroll on edges
336
+      return true;
337
+    }
338
+    return false;
339
+  },
340
+  enable() {
341
+    const swiper = this;
342
+    const event = Mousewheel.event();
343
+    if (swiper.params.cssMode) {
344
+      swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);
345
+      return true;
346
+    }
347
+    if (!event) return false;
348
+    if (swiper.mousewheel.enabled) return false;
349
+    let target = swiper.$el;
350
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
351
+      target = $(swiper.params.mousewheel.eventsTarged);
352
+    }
353
+    target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
354
+    target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
355
+    target.on(event, swiper.mousewheel.handle);
356
+    swiper.mousewheel.enabled = true;
357
+    return true;
358
+  },
359
+  disable() {
360
+    const swiper = this;
361
+    const event = Mousewheel.event();
362
+    if (swiper.params.cssMode) {
363
+      swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);
364
+      return true;
365
+    }
366
+    if (!event) return false;
367
+    if (!swiper.mousewheel.enabled) return false;
368
+    let target = swiper.$el;
369
+    if (swiper.params.mousewheel.eventsTarged !== 'container') {
370
+      target = $(swiper.params.mousewheel.eventsTarged);
371
+    }
372
+    target.off(event, swiper.mousewheel.handle);
373
+    swiper.mousewheel.enabled = false;
374
+    return true;
375
+  },
376
+};
377
+
378
+export default {
379
+  name: 'mousewheel',
380
+  params: {
381
+    mousewheel: {
382
+      enabled: false,
383
+      releaseOnEdges: false,
384
+      invert: false,
385
+      forceToAxis: false,
386
+      sensitivity: 1,
387
+      eventsTarged: 'container',
388
+    },
389
+  },
390
+  create() {
391
+    const swiper = this;
392
+    Utils.extend(swiper, {
393
+      mousewheel: {
394
+        enabled: false,
395
+        enable: Mousewheel.enable.bind(swiper),
396
+        disable: Mousewheel.disable.bind(swiper),
397
+        handle: Mousewheel.handle.bind(swiper),
398
+        handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
399
+        handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
400
+        animateSlider: Mousewheel.animateSlider.bind(swiper),
401
+        releaseScroll: Mousewheel.releaseScroll.bind(swiper),
402
+        lastScrollTime: Utils.now(),
403
+        lastEventBeforeSnap: undefined,
404
+        recentWheelEvents: [],
405
+      },
406
+    });
407
+  },
408
+  on: {
409
+    init() {
410
+      const swiper = this;
411
+      if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
412
+        swiper.mousewheel.disable();
413
+      }
414
+      if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
415
+    },
416
+    destroy() {
417
+      const swiper = this;
418
+      if (swiper.params.cssMode) {
419
+        swiper.mousewheel.enable();
420
+      }
421
+      if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
422
+    },
423
+  },
424
+};
0 425
new file mode 100644
... ...
@@ -0,0 +1,171 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Navigation = {
5
+  update() {
6
+    // Update Navigation Buttons
7
+    const swiper = this;
8
+    const params = swiper.params.navigation;
9
+
10
+    if (swiper.params.loop) return;
11
+    const { $nextEl, $prevEl } = swiper.navigation;
12
+
13
+    if ($prevEl && $prevEl.length > 0) {
14
+      if (swiper.isBeginning) {
15
+        $prevEl.addClass(params.disabledClass);
16
+      } else {
17
+        $prevEl.removeClass(params.disabledClass);
18
+      }
19
+      $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
20
+    }
21
+    if ($nextEl && $nextEl.length > 0) {
22
+      if (swiper.isEnd) {
23
+        $nextEl.addClass(params.disabledClass);
24
+      } else {
25
+        $nextEl.removeClass(params.disabledClass);
26
+      }
27
+      $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
28
+    }
29
+  },
30
+  onPrevClick(e) {
31
+    const swiper = this;
32
+    e.preventDefault();
33
+    if (swiper.isBeginning && !swiper.params.loop) return;
34
+    swiper.slidePrev();
35
+  },
36
+  onNextClick(e) {
37
+    const swiper = this;
38
+    e.preventDefault();
39
+    if (swiper.isEnd && !swiper.params.loop) return;
40
+    swiper.slideNext();
41
+  },
42
+  init() {
43
+    const swiper = this;
44
+    const params = swiper.params.navigation;
45
+    if (!(params.nextEl || params.prevEl)) return;
46
+
47
+    let $nextEl;
48
+    let $prevEl;
49
+    if (params.nextEl) {
50
+      $nextEl = $(params.nextEl);
51
+      if (
52
+        swiper.params.uniqueNavElements
53
+        && typeof params.nextEl === 'string'
54
+        && $nextEl.length > 1
55
+        && swiper.$el.find(params.nextEl).length === 1
56
+      ) {
57
+        $nextEl = swiper.$el.find(params.nextEl);
58
+      }
59
+    }
60
+    if (params.prevEl) {
61
+      $prevEl = $(params.prevEl);
62
+      if (
63
+        swiper.params.uniqueNavElements
64
+        && typeof params.prevEl === 'string'
65
+        && $prevEl.length > 1
66
+        && swiper.$el.find(params.prevEl).length === 1
67
+      ) {
68
+        $prevEl = swiper.$el.find(params.prevEl);
69
+      }
70
+    }
71
+
72
+    if ($nextEl && $nextEl.length > 0) {
73
+      $nextEl.on('click', swiper.navigation.onNextClick);
74
+    }
75
+    if ($prevEl && $prevEl.length > 0) {
76
+      $prevEl.on('click', swiper.navigation.onPrevClick);
77
+    }
78
+
79
+    Utils.extend(swiper.navigation, {
80
+      $nextEl,
81
+      nextEl: $nextEl && $nextEl[0],
82
+      $prevEl,
83
+      prevEl: $prevEl && $prevEl[0],
84
+    });
85
+  },
86
+  destroy() {
87
+    const swiper = this;
88
+    const { $nextEl, $prevEl } = swiper.navigation;
89
+    if ($nextEl && $nextEl.length) {
90
+      $nextEl.off('click', swiper.navigation.onNextClick);
91
+      $nextEl.removeClass(swiper.params.navigation.disabledClass);
92
+    }
93
+    if ($prevEl && $prevEl.length) {
94
+      $prevEl.off('click', swiper.navigation.onPrevClick);
95
+      $prevEl.removeClass(swiper.params.navigation.disabledClass);
96
+    }
97
+  },
98
+};
99
+
100
+export default {
101
+  name: 'navigation',
102
+  params: {
103
+    navigation: {
104
+      nextEl: null,
105
+      prevEl: null,
106
+
107
+      hideOnClick: false,
108
+      disabledClass: 'swiper-button-disabled',
109
+      hiddenClass: 'swiper-button-hidden',
110
+      lockClass: 'swiper-button-lock',
111
+    },
112
+  },
113
+  create() {
114
+    const swiper = this;
115
+    Utils.extend(swiper, {
116
+      navigation: {
117
+        init: Navigation.init.bind(swiper),
118
+        update: Navigation.update.bind(swiper),
119
+        destroy: Navigation.destroy.bind(swiper),
120
+        onNextClick: Navigation.onNextClick.bind(swiper),
121
+        onPrevClick: Navigation.onPrevClick.bind(swiper),
122
+      },
123
+    });
124
+  },
125
+  on: {
126
+    init() {
127
+      const swiper = this;
128
+      swiper.navigation.init();
129
+      swiper.navigation.update();
130
+    },
131
+    toEdge() {
132
+      const swiper = this;
133
+      swiper.navigation.update();
134
+    },
135
+    fromEdge() {
136
+      const swiper = this;
137
+      swiper.navigation.update();
138
+    },
139
+    destroy() {
140
+      const swiper = this;
141
+      swiper.navigation.destroy();
142
+    },
143
+    click(e) {
144
+      const swiper = this;
145
+      const { $nextEl, $prevEl } = swiper.navigation;
146
+      if (
147
+        swiper.params.navigation.hideOnClick
148
+        && !$(e.target).is($prevEl)
149
+        && !$(e.target).is($nextEl)
150
+      ) {
151
+        let isHidden;
152
+        if ($nextEl) {
153
+          isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
154
+        } else if ($prevEl) {
155
+          isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
156
+        }
157
+        if (isHidden === true) {
158
+          swiper.emit('navigationShow', swiper);
159
+        } else {
160
+          swiper.emit('navigationHide', swiper);
161
+        }
162
+        if ($nextEl) {
163
+          $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
164
+        }
165
+        if ($prevEl) {
166
+          $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
167
+        }
168
+      }
169
+    },
170
+  },
171
+};
0 172
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+:root {
2
+  --swiper-navigation-size: 44px;
3
+  /*
4
+  --swiper-navigation-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-button-prev, .swiper-button-next {
8
+  position: absolute;
9
+  top: 50%;
10
+  width: calc(var(--swiper-navigation-size) / 44 * 27);
11
+  height: var(--swiper-navigation-size);
12
+  margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
13
+  z-index: 10;
14
+  cursor: pointer;
15
+  display: flex;
16
+  align-items: center;
17
+  justify-content: center;
18
+  color: var(--swiper-navigation-color, var(--swiper-theme-color));
19
+  &.swiper-button-disabled {
20
+    opacity: 0.35;
21
+    cursor: auto;
22
+    pointer-events: none;
23
+  }
24
+  &:after {
25
+    font-family: swiper-icons;
26
+    font-size: var(--swiper-navigation-size);
27
+    text-transform: none !important;
28
+    letter-spacing: 0;
29
+    text-transform: none;
30
+    font-variant: initial;
31
+    line-height: 1;
32
+  }
33
+}
34
+.swiper-button-prev,
35
+.swiper-container-rtl .swiper-button-next {
36
+  &:after {
37
+    content: 'prev';
38
+  }
39
+  left: 10px;
40
+  right: auto;
41
+}
42
+.swiper-button-next,
43
+.swiper-container-rtl .swiper-button-prev {
44
+  &:after {
45
+    content: 'next';
46
+  }
47
+  right: 10px;
48
+  left: auto;
49
+}
50
+.navigation-color-loop({
51
+  .swiper-button-prev,
52
+  .swiper-button-next {
53
+    &.swiper-button-@{navColorName} {
54
+      --swiper-navigation-color: @navColorValue;
55
+    }
56
+  }
57
+});
58
+.swiper-button-lock {
59
+  display: none;
60
+}
0 61
new file mode 100644
... ...
@@ -0,0 +1,61 @@
1
+:root {
2
+  --swiper-navigation-size: 44px;
3
+  /*
4
+  --swiper-navigation-color: var(--swiper-theme-color);
5
+  */
6
+}
7
+.swiper-button-prev, .swiper-button-next {
8
+  position: absolute;
9
+  top: 50%;
10
+  width: calc(var(--swiper-navigation-size) / 44 * 27);
11
+  height: var(--swiper-navigation-size);
12
+  margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
13
+  z-index: 10;
14
+  cursor: pointer;
15
+  display: flex;
16
+  align-items: center;
17
+  justify-content: center;
18
+  color: var(--swiper-navigation-color, var(--swiper-theme-color));
19
+  &.swiper-button-disabled {
20
+    opacity: 0.35;
21
+    cursor: auto;
22
+    pointer-events: none;
23
+  }
24
+  &:after {
25
+    font-family: swiper-icons;
26
+    font-size: var(--swiper-navigation-size);
27
+    text-transform: none !important;
28
+    letter-spacing: 0;
29
+    text-transform: none;
30
+    font-variant: initial;
31
+    line-height: 1;
32
+  }
33
+}
34
+.swiper-button-prev,
35
+.swiper-container-rtl .swiper-button-next {
36
+  &:after {
37
+    content: 'prev';
38
+  }
39
+  left: 10px;
40
+  right: auto;
41
+}
42
+.swiper-button-next,
43
+.swiper-container-rtl .swiper-button-prev {
44
+  &:after {
45
+    content: 'next';
46
+  }
47
+  right: 10px;
48
+  left: auto;
49
+}
50
+
51
+@each $navColorName, $navColorValue in $colors {
52
+  .swiper-button-prev,
53
+  .swiper-button-next {
54
+    &.swiper-button-#{$navColorName} {
55
+      --swiper-navigation-color: #{$navColorValue};
56
+    }
57
+  }
58
+}
59
+.swiper-button-lock {
60
+  display: none;
61
+}
0 62
new file mode 100644
... ...
@@ -0,0 +1,360 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Pagination = {
5
+  update() {
6
+    // Render || Update Pagination bullets/items
7
+    const swiper = this;
8
+    const rtl = swiper.rtl;
9
+    const params = swiper.params.pagination;
10
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
11
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
12
+    const $el = swiper.pagination.$el;
13
+    // Current/Total
14
+    let current;
15
+    const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
16
+    if (swiper.params.loop) {
17
+      current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
18
+      if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
19
+        current -= (slidesLength - (swiper.loopedSlides * 2));
20
+      }
21
+      if (current > total - 1) current -= total;
22
+      if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
23
+    } else if (typeof swiper.snapIndex !== 'undefined') {
24
+      current = swiper.snapIndex;
25
+    } else {
26
+      current = swiper.activeIndex || 0;
27
+    }
28
+    // Types
29
+    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
30
+      const bullets = swiper.pagination.bullets;
31
+      let firstIndex;
32
+      let lastIndex;
33
+      let midIndex;
34
+      if (params.dynamicBullets) {
35
+        swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
36
+        $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`);
37
+        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
38
+          swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
39
+          if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
40
+            swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
41
+          } else if (swiper.pagination.dynamicBulletIndex < 0) {
42
+            swiper.pagination.dynamicBulletIndex = 0;
43
+          }
44
+        }
45
+        firstIndex = current - swiper.pagination.dynamicBulletIndex;
46
+        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
47
+        midIndex = (lastIndex + firstIndex) / 2;
48
+      }
49
+      bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`);
50
+      if ($el.length > 1) {
51
+        bullets.each((index, bullet) => {
52
+          const $bullet = $(bullet);
53
+          const bulletIndex = $bullet.index();
54
+          if (bulletIndex === current) {
55
+            $bullet.addClass(params.bulletActiveClass);
56
+          }
57
+          if (params.dynamicBullets) {
58
+            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
59
+              $bullet.addClass(`${params.bulletActiveClass}-main`);
60
+            }
61
+            if (bulletIndex === firstIndex) {
62
+              $bullet
63
+                .prev()
64
+                .addClass(`${params.bulletActiveClass}-prev`)
65
+                .prev()
66
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
67
+            }
68
+            if (bulletIndex === lastIndex) {
69
+              $bullet
70
+                .next()
71
+                .addClass(`${params.bulletActiveClass}-next`)
72
+                .next()
73
+                .addClass(`${params.bulletActiveClass}-next-next`);
74
+            }
75
+          }
76
+        });
77
+      } else {
78
+        const $bullet = bullets.eq(current);
79
+        const bulletIndex = $bullet.index();
80
+        $bullet.addClass(params.bulletActiveClass);
81
+        if (params.dynamicBullets) {
82
+          const $firstDisplayedBullet = bullets.eq(firstIndex);
83
+          const $lastDisplayedBullet = bullets.eq(lastIndex);
84
+          for (let i = firstIndex; i <= lastIndex; i += 1) {
85
+            bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);
86
+          }
87
+          if (swiper.params.loop) {
88
+            if (bulletIndex >= bullets.length - params.dynamicMainBullets) {
89
+              for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {
90
+                bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);
91
+              }
92
+              bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);
93
+            } else {
94
+              $firstDisplayedBullet
95
+                .prev()
96
+                .addClass(`${params.bulletActiveClass}-prev`)
97
+                .prev()
98
+                .addClass(`${params.bulletActiveClass}-prev-prev`);
99
+              $lastDisplayedBullet
100
+                .next()
101
+                .addClass(`${params.bulletActiveClass}-next`)
102
+                .next()
103
+                .addClass(`${params.bulletActiveClass}-next-next`);
104
+            }
105
+          } else {
106
+            $firstDisplayedBullet
107
+              .prev()
108
+              .addClass(`${params.bulletActiveClass}-prev`)
109
+              .prev()
110
+              .addClass(`${params.bulletActiveClass}-prev-prev`);
111
+            $lastDisplayedBullet
112
+              .next()
113
+              .addClass(`${params.bulletActiveClass}-next`)
114
+              .next()
115
+              .addClass(`${params.bulletActiveClass}-next-next`);
116
+          }
117
+        }
118
+      }
119
+      if (params.dynamicBullets) {
120
+        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
121
+        const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
122
+        const offsetProp = rtl ? 'right' : 'left';
123
+        bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);
124
+      }
125
+    }
126
+    if (params.type === 'fraction') {
127
+      $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1));
128
+      $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total));
129
+    }
130
+    if (params.type === 'progressbar') {
131
+      let progressbarDirection;
132
+      if (params.progressbarOpposite) {
133
+        progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
134
+      } else {
135
+        progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
136
+      }
137
+      const scale = (current + 1) / total;
138
+      let scaleX = 1;
139
+      let scaleY = 1;
140
+      if (progressbarDirection === 'horizontal') {
141
+        scaleX = scale;
142
+      } else {
143
+        scaleY = scale;
144
+      }
145
+      $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);
146
+    }
147
+    if (params.type === 'custom' && params.renderCustom) {
148
+      $el.html(params.renderCustom(swiper, current + 1, total));
149
+      swiper.emit('paginationRender', swiper, $el[0]);
150
+    } else {
151
+      swiper.emit('paginationUpdate', swiper, $el[0]);
152
+    }
153
+    $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
154
+  },
155
+  render() {
156
+    // Render Container
157
+    const swiper = this;
158
+    const params = swiper.params.pagination;
159
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
160
+    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
161
+
162
+    const $el = swiper.pagination.$el;
163
+    let paginationHTML = '';
164
+    if (params.type === 'bullets') {
165
+      const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
166
+      for (let i = 0; i < numberOfBullets; i += 1) {
167
+        if (params.renderBullet) {
168
+          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
169
+        } else {
170
+          paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`;
171
+        }
172
+      }
173
+      $el.html(paginationHTML);
174
+      swiper.pagination.bullets = $el.find(`.${params.bulletClass}`);
175
+    }
176
+    if (params.type === 'fraction') {
177
+      if (params.renderFraction) {
178
+        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
179
+      } else {
180
+        paginationHTML = `<span class="${params.currentClass}"></span>`
181
+        + ' / '
182
+        + `<span class="${params.totalClass}"></span>`;
183
+      }
184
+      $el.html(paginationHTML);
185
+    }
186
+    if (params.type === 'progressbar') {
187
+      if (params.renderProgressbar) {
188
+        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
189
+      } else {
190
+        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
191
+      }
192
+      $el.html(paginationHTML);
193
+    }
194
+    if (params.type !== 'custom') {
195
+      swiper.emit('paginationRender', swiper.pagination.$el[0]);
196
+    }
197
+  },
198
+  init() {
199
+    const swiper = this;
200
+    const params = swiper.params.pagination;
201
+    if (!params.el) return;
202
+
203
+    let $el = $(params.el);
204
+    if ($el.length === 0) return;
205
+
206
+    if (
207
+      swiper.params.uniqueNavElements
208
+      && typeof params.el === 'string'
209
+      && $el.length > 1
210
+      && swiper.$el.find(params.el).length === 1
211
+    ) {
212
+      $el = swiper.$el.find(params.el);
213
+    }
214
+
215
+    if (params.type === 'bullets' && params.clickable) {
216
+      $el.addClass(params.clickableClass);
217
+    }
218
+
219
+    $el.addClass(params.modifierClass + params.type);
220
+
221
+    if (params.type === 'bullets' && params.dynamicBullets) {
222
+      $el.addClass(`${params.modifierClass}${params.type}-dynamic`);
223
+      swiper.pagination.dynamicBulletIndex = 0;
224
+      if (params.dynamicMainBullets < 1) {
225
+        params.dynamicMainBullets = 1;
226
+      }
227
+    }
228
+    if (params.type === 'progressbar' && params.progressbarOpposite) {
229
+      $el.addClass(params.progressbarOppositeClass);
230
+    }
231
+
232
+    if (params.clickable) {
233
+      $el.on('click', `.${params.bulletClass}`, function onClick(e) {
234
+        e.preventDefault();
235
+        let index = $(this).index() * swiper.params.slidesPerGroup;
236
+        if (swiper.params.loop) index += swiper.loopedSlides;
237
+        swiper.slideTo(index);
238
+      });
239
+    }
240
+
241
+    Utils.extend(swiper.pagination, {
242
+      $el,
243
+      el: $el[0],
244
+    });
245
+  },
246
+  destroy() {
247
+    const swiper = this;
248
+    const params = swiper.params.pagination;
249
+    if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
250
+    const $el = swiper.pagination.$el;
251
+
252
+    $el.removeClass(params.hiddenClass);
253
+    $el.removeClass(params.modifierClass + params.type);
254
+    if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
255
+    if (params.clickable) {
256
+      $el.off('click', `.${params.bulletClass}`);
257
+    }
258
+  },
259
+};
260
+
261
+export default {
262
+  name: 'pagination',
263
+  params: {
264
+    pagination: {
265
+      el: null,
266
+      bulletElement: 'span',
267
+      clickable: false,
268
+      hideOnClick: false,
269
+      renderBullet: null,
270
+      renderProgressbar: null,
271
+      renderFraction: null,
272
+      renderCustom: null,
273
+      progressbarOpposite: false,
274
+      type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
275
+      dynamicBullets: false,
276
+      dynamicMainBullets: 1,
277
+      formatFractionCurrent: (number) => number,
278
+      formatFractionTotal: (number) => number,
279
+      bulletClass: 'swiper-pagination-bullet',
280
+      bulletActiveClass: 'swiper-pagination-bullet-active',
281
+      modifierClass: 'swiper-pagination-', // NEW
282
+      currentClass: 'swiper-pagination-current',
283
+      totalClass: 'swiper-pagination-total',
284
+      hiddenClass: 'swiper-pagination-hidden',
285
+      progressbarFillClass: 'swiper-pagination-progressbar-fill',
286
+      progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
287
+      clickableClass: 'swiper-pagination-clickable', // NEW
288
+      lockClass: 'swiper-pagination-lock',
289
+    },
290
+  },
291
+  create() {
292
+    const swiper = this;
293
+    Utils.extend(swiper, {
294
+      pagination: {
295
+        init: Pagination.init.bind(swiper),
296
+        render: Pagination.render.bind(swiper),
297
+        update: Pagination.update.bind(swiper),
298
+        destroy: Pagination.destroy.bind(swiper),
299
+        dynamicBulletIndex: 0,
300
+      },
301
+    });
302
+  },
303
+  on: {
304
+    init() {
305
+      const swiper = this;
306
+      swiper.pagination.init();
307
+      swiper.pagination.render();
308
+      swiper.pagination.update();
309
+    },
310
+    activeIndexChange() {
311
+      const swiper = this;
312
+      if (swiper.params.loop) {
313
+        swiper.pagination.update();
314
+      } else if (typeof swiper.snapIndex === 'undefined') {
315
+        swiper.pagination.update();
316
+      }
317
+    },
318
+    snapIndexChange() {
319
+      const swiper = this;
320
+      if (!swiper.params.loop) {
321
+        swiper.pagination.update();
322
+      }
323
+    },
324
+    slidesLengthChange() {
325
+      const swiper = this;
326
+      if (swiper.params.loop) {
327
+        swiper.pagination.render();
328
+        swiper.pagination.update();
329
+      }
330
+    },
331
+    snapGridLengthChange() {
332
+      const swiper = this;
333
+      if (!swiper.params.loop) {
334
+        swiper.pagination.render();
335
+        swiper.pagination.update();
336
+      }
337
+    },
338
+    destroy() {
339
+      const swiper = this;
340
+      swiper.pagination.destroy();
341
+    },
342
+    click(e) {
343
+      const swiper = this;
344
+      if (
345
+        swiper.params.pagination.el
346
+        && swiper.params.pagination.hideOnClick
347
+        && swiper.pagination.$el.length > 0
348
+        && !$(e.target).hasClass(swiper.params.pagination.bulletClass)
349
+      ) {
350
+        const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
351
+        if (isHidden === true) {
352
+          swiper.emit('paginationShow', swiper);
353
+        } else {
354
+          swiper.emit('paginationHide', swiper);
355
+        }
356
+        swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
357
+      }
358
+    },
359
+  },
360
+};
0 361
new file mode 100644
... ...
@@ -0,0 +1,149 @@
1
+:root {
2
+  /*
3
+  --swiper-pagination-color: var(--swiper-theme-color);
4
+  */
5
+}
6
+.swiper-pagination {
7
+  position: absolute;
8
+  text-align: center;
9
+  transition: 300ms opacity;
10
+  transform: translate3d(0,0,0);
11
+  z-index: 10;
12
+  &.swiper-pagination-hidden {
13
+    opacity: 0;
14
+  }
15
+}
16
+/* Common Styles */
17
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
18
+  bottom: 10px;
19
+  left: 0;
20
+  width: 100%;
21
+}
22
+/* Bullets */
23
+.swiper-pagination-bullets-dynamic {
24
+  overflow: hidden;
25
+  font-size: 0;
26
+  .swiper-pagination-bullet {
27
+    transform: scale(0.33);
28
+    position: relative;
29
+  }
30
+  .swiper-pagination-bullet-active {
31
+    transform: scale(1);
32
+  }
33
+  .swiper-pagination-bullet-active-main {
34
+    transform: scale(1);
35
+  }
36
+  .swiper-pagination-bullet-active-prev {
37
+    transform: scale(0.66);
38
+  }
39
+  .swiper-pagination-bullet-active-prev-prev {
40
+    transform: scale(0.33);
41
+  }
42
+  .swiper-pagination-bullet-active-next {
43
+    transform: scale(0.66);
44
+  }
45
+  .swiper-pagination-bullet-active-next-next {
46
+    transform: scale(0.33);
47
+  }
48
+}
49
+.swiper-pagination-bullet {
50
+  width: 8px;
51
+  height: 8px;
52
+  display: inline-block;
53
+  border-radius: 100%;
54
+  background: #000;
55
+  opacity: 0.2;
56
+  button& {
57
+    border: none;
58
+    margin: 0;
59
+    padding: 0;
60
+    box-shadow: none;
61
+    appearance: none;
62
+  }
63
+  .swiper-pagination-clickable & {
64
+    cursor: pointer;
65
+  }
66
+}
67
+.swiper-pagination-bullet-active {
68
+  opacity: 1;
69
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
70
+}
71
+
72
+.swiper-container-vertical {
73
+  > .swiper-pagination-bullets {
74
+    right: 10px;
75
+    top: 50%;
76
+    transform:translate3d(0px,-50%,0);
77
+    .swiper-pagination-bullet {
78
+      margin: 6px 0;
79
+      display: block;
80
+    }
81
+    &.swiper-pagination-bullets-dynamic {
82
+      top: 50%;
83
+      transform: translateY(-50%);
84
+      width: 8px;
85
+      .swiper-pagination-bullet {
86
+        display: inline-block;
87
+        transition: 200ms transform, 200ms top;
88
+      }
89
+    }
90
+  }
91
+}
92
+.swiper-container-horizontal {
93
+  > .swiper-pagination-bullets {
94
+    .swiper-pagination-bullet {
95
+      margin: 0 4px;
96
+    }
97
+    &.swiper-pagination-bullets-dynamic {
98
+      left: 50%;
99
+      transform: translateX(-50%);
100
+      white-space: nowrap;
101
+      .swiper-pagination-bullet {
102
+        transition: 200ms transform, 200ms left;
103
+      }
104
+    }
105
+  }
106
+  &.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
107
+    transition: 200ms transform, 200ms right;
108
+  }
109
+}
110
+/* Progress */
111
+.swiper-pagination-progressbar {
112
+  background: rgba(0,0,0,0.25);
113
+  position: absolute;
114
+  .swiper-pagination-progressbar-fill {
115
+    background: var(--swiper-pagination-color, var(--swiper-theme-color));
116
+    position: absolute;
117
+    left: 0;
118
+    top: 0;
119
+    width: 100%;
120
+    height: 100%;
121
+    transform: scale(0);
122
+    transform-origin: left top;
123
+  }
124
+  .swiper-container-rtl & .swiper-pagination-progressbar-fill {
125
+    transform-origin: right top;
126
+  }
127
+  .swiper-container-horizontal > &,
128
+  .swiper-container-vertical > &.swiper-pagination-progressbar-opposite {
129
+    width: 100%;
130
+    height: 4px;
131
+    left: 0;
132
+    top: 0;
133
+  }
134
+  .swiper-container-vertical > &,
135
+  .swiper-container-horizontal > &.swiper-pagination-progressbar-opposite {
136
+    width: 4px;
137
+    height: 100%;
138
+    left: 0;
139
+    top: 0;
140
+  }
141
+}
142
+.pagination-color-loop({
143
+  .swiper-pagination-@{paginationColorName} {
144
+    --swiper-pagination-color: @paginationColorValue;
145
+  }
146
+});
147
+.swiper-pagination-lock {
148
+  display: none;
149
+}
0 150
new file mode 100644
... ...
@@ -0,0 +1,149 @@
1
+:root {
2
+  /*
3
+  --swiper-pagination-color: var(--swiper-theme-color);
4
+  */
5
+}
6
+.swiper-pagination {
7
+  position: absolute;
8
+  text-align: center;
9
+  transition: 300ms opacity;
10
+  transform: translate3d(0,0,0);
11
+  z-index: 10;
12
+  &.swiper-pagination-hidden {
13
+    opacity: 0;
14
+  }
15
+}
16
+/* Common Styles */
17
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets{
18
+  bottom: 10px;
19
+  left: 0;
20
+  width: 100%;
21
+}
22
+/* Bullets */
23
+.swiper-pagination-bullets-dynamic {
24
+  overflow: hidden;
25
+  font-size: 0;
26
+  .swiper-pagination-bullet {
27
+    transform: scale(0.33);
28
+    position: relative;
29
+  }
30
+  .swiper-pagination-bullet-active {
31
+    transform: scale(1);
32
+  }
33
+  .swiper-pagination-bullet-active-main {
34
+    transform: scale(1);
35
+  }
36
+  .swiper-pagination-bullet-active-prev {
37
+    transform: scale(0.66);
38
+  }
39
+  .swiper-pagination-bullet-active-prev-prev {
40
+    transform: scale(0.33);
41
+  }
42
+  .swiper-pagination-bullet-active-next {
43
+    transform: scale(0.66);
44
+  }
45
+  .swiper-pagination-bullet-active-next-next {
46
+    transform: scale(0.33);
47
+  }
48
+}
49
+.swiper-pagination-bullet {
50
+  width: 8px;
51
+  height: 8px;
52
+  display: inline-block;
53
+  border-radius: 100%;
54
+  background: #000;
55
+  opacity: 0.2;
56
+  @at-root button#{&} {
57
+    border: none;
58
+    margin: 0;
59
+    padding: 0;
60
+    box-shadow: none;
61
+    appearance: none;
62
+  }
63
+  .swiper-pagination-clickable & {
64
+    cursor: pointer;
65
+  }
66
+}
67
+.swiper-pagination-bullet-active {
68
+  opacity: 1;
69
+  background: var(--swiper-pagination-color, var(--swiper-theme-color));
70
+}
71
+
72
+.swiper-container-vertical {
73
+  > .swiper-pagination-bullets {
74
+    right: 10px;
75
+    top: 50%;
76
+    transform:translate3d(0px,-50%,0);
77
+    .swiper-pagination-bullet {
78
+      margin: 6px 0;
79
+      display: block;
80
+    }
81
+    &.swiper-pagination-bullets-dynamic {
82
+      top: 50%;
83
+      transform: translateY(-50%);
84
+      width: 8px;
85
+      .swiper-pagination-bullet {
86
+        display: inline-block;
87
+        transition: 200ms transform, 200ms top;
88
+      }
89
+    }
90
+  }
91
+}
92
+.swiper-container-horizontal {
93
+  > .swiper-pagination-bullets {
94
+    .swiper-pagination-bullet {
95
+      margin: 0 4px;
96
+    }
97
+    &.swiper-pagination-bullets-dynamic {
98
+      left: 50%;
99
+      transform: translateX(-50%);
100
+      white-space: nowrap;
101
+      .swiper-pagination-bullet {
102
+        transition: 200ms transform, 200ms left;
103
+      }
104
+    }
105
+  }
106
+  &.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
107
+    transition: 200ms transform, 200ms right;
108
+  }
109
+}
110
+/* Progress */
111
+.swiper-pagination-progressbar {
112
+  background: rgba(0,0,0,0.25);
113
+  position: absolute;
114
+  .swiper-pagination-progressbar-fill {
115
+    background: var(--swiper-pagination-color, var(--swiper-theme-color));
116
+    position: absolute;
117
+    left: 0;
118
+    top: 0;
119
+    width: 100%;
120
+    height: 100%;
121
+    transform: scale(0);
122
+    transform-origin: left top;
123
+  }
124
+  .swiper-container-rtl & .swiper-pagination-progressbar-fill {
125
+    transform-origin: right top;
126
+  }
127
+  .swiper-container-horizontal > &,
128
+  .swiper-container-vertical > &.swiper-pagination-progressbar-opposite {
129
+    width: 100%;
130
+    height: 4px;
131
+    left: 0;
132
+    top: 0;
133
+  }
134
+  .swiper-container-vertical > &,
135
+  .swiper-container-horizontal > &.swiper-pagination-progressbar-opposite {
136
+    width: 4px;
137
+    height: 100%;
138
+    left: 0;
139
+    top: 0;
140
+  }
141
+}
142
+@each $paginationColorName, $paginationColorValue in $colors {
143
+  .swiper-pagination-#{$paginationColorName} {
144
+    --swiper-pagination-color: #{$paginationColorValue};
145
+  }
146
+}
147
+.swiper-pagination-lock {
148
+  display: none;
149
+}
0 150
new file mode 100644
... ...
@@ -0,0 +1,125 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Parallax = {
5
+  setTransform(el, progress) {
6
+    const swiper = this;
7
+    const { rtl } = swiper;
8
+
9
+    const $el = $(el);
10
+    const rtlFactor = rtl ? -1 : 1;
11
+
12
+    const p = $el.attr('data-swiper-parallax') || '0';
13
+    let x = $el.attr('data-swiper-parallax-x');
14
+    let y = $el.attr('data-swiper-parallax-y');
15
+    const scale = $el.attr('data-swiper-parallax-scale');
16
+    const opacity = $el.attr('data-swiper-parallax-opacity');
17
+
18
+    if (x || y) {
19
+      x = x || '0';
20
+      y = y || '0';
21
+    } else if (swiper.isHorizontal()) {
22
+      x = p;
23
+      y = '0';
24
+    } else {
25
+      y = p;
26
+      x = '0';
27
+    }
28
+
29
+    if ((x).indexOf('%') >= 0) {
30
+      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
31
+    } else {
32
+      x = `${x * progress * rtlFactor}px`;
33
+    }
34
+    if ((y).indexOf('%') >= 0) {
35
+      y = `${parseInt(y, 10) * progress}%`;
36
+    } else {
37
+      y = `${y * progress}px`;
38
+    }
39
+
40
+    if (typeof opacity !== 'undefined' && opacity !== null) {
41
+      const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
42
+      $el[0].style.opacity = currentOpacity;
43
+    }
44
+    if (typeof scale === 'undefined' || scale === null) {
45
+      $el.transform(`translate3d(${x}, ${y}, 0px)`);
46
+    } else {
47
+      const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
48
+      $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);
49
+    }
50
+  },
51
+  setTranslate() {
52
+    const swiper = this;
53
+    const {
54
+      $el, slides, progress, snapGrid,
55
+    } = swiper;
56
+    $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
57
+      .each((index, el) => {
58
+        swiper.parallax.setTransform(el, progress);
59
+      });
60
+    slides.each((slideIndex, slideEl) => {
61
+      let slideProgress = slideEl.progress;
62
+      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
63
+        slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
64
+      }
65
+      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
66
+      $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
67
+        .each((index, el) => {
68
+          swiper.parallax.setTransform(el, slideProgress);
69
+        });
70
+    });
71
+  },
72
+  setTransition(duration = this.params.speed) {
73
+    const swiper = this;
74
+    const { $el } = swiper;
75
+    $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]')
76
+      .each((index, parallaxEl) => {
77
+        const $parallaxEl = $(parallaxEl);
78
+        let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
79
+        if (duration === 0) parallaxDuration = 0;
80
+        $parallaxEl.transition(parallaxDuration);
81
+      });
82
+  },
83
+};
84
+
85
+export default {
86
+  name: 'parallax',
87
+  params: {
88
+    parallax: {
89
+      enabled: false,
90
+    },
91
+  },
92
+  create() {
93
+    const swiper = this;
94
+    Utils.extend(swiper, {
95
+      parallax: {
96
+        setTransform: Parallax.setTransform.bind(swiper),
97
+        setTranslate: Parallax.setTranslate.bind(swiper),
98
+        setTransition: Parallax.setTransition.bind(swiper),
99
+      },
100
+    });
101
+  },
102
+  on: {
103
+    beforeInit() {
104
+      const swiper = this;
105
+      if (!swiper.params.parallax.enabled) return;
106
+      swiper.params.watchSlidesProgress = true;
107
+      swiper.originalParams.watchSlidesProgress = true;
108
+    },
109
+    init() {
110
+      const swiper = this;
111
+      if (!swiper.params.parallax.enabled) return;
112
+      swiper.parallax.setTranslate();
113
+    },
114
+    setTranslate() {
115
+      const swiper = this;
116
+      if (!swiper.params.parallax.enabled) return;
117
+      swiper.parallax.setTranslate();
118
+    },
119
+    setTransition(duration) {
120
+      const swiper = this;
121
+      if (!swiper.params.parallax.enabled) return;
122
+      swiper.parallax.setTransition(duration);
123
+    },
124
+  },
125
+};
0 126
new file mode 100644
... ...
@@ -0,0 +1,333 @@
1
+import { document } from 'ssr-window';
2
+import $ from '../../utils/dom';
3
+import Utils from '../../utils/utils';
4
+import Support from '../../utils/support';
5
+
6
+const Scrollbar = {
7
+  setTranslate() {
8
+    const swiper = this;
9
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
10
+    const { scrollbar, rtlTranslate: rtl, progress } = swiper;
11
+    const {
12
+      dragSize, trackSize, $dragEl, $el,
13
+    } = scrollbar;
14
+    const params = swiper.params.scrollbar;
15
+
16
+    let newSize = dragSize;
17
+    let newPos = (trackSize - dragSize) * progress;
18
+    if (rtl) {
19
+      newPos = -newPos;
20
+      if (newPos > 0) {
21
+        newSize = dragSize - newPos;
22
+        newPos = 0;
23
+      } else if (-newPos + dragSize > trackSize) {
24
+        newSize = trackSize + newPos;
25
+      }
26
+    } else if (newPos < 0) {
27
+      newSize = dragSize + newPos;
28
+      newPos = 0;
29
+    } else if (newPos + dragSize > trackSize) {
30
+      newSize = trackSize - newPos;
31
+    }
32
+    if (swiper.isHorizontal()) {
33
+      $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);
34
+      $dragEl[0].style.width = `${newSize}px`;
35
+    } else {
36
+      $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);
37
+      $dragEl[0].style.height = `${newSize}px`;
38
+    }
39
+    if (params.hide) {
40
+      clearTimeout(swiper.scrollbar.timeout);
41
+      $el[0].style.opacity = 1;
42
+      swiper.scrollbar.timeout = setTimeout(() => {
43
+        $el[0].style.opacity = 0;
44
+        $el.transition(400);
45
+      }, 1000);
46
+    }
47
+  },
48
+  setTransition(duration) {
49
+    const swiper = this;
50
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
51
+    swiper.scrollbar.$dragEl.transition(duration);
52
+  },
53
+  updateSize() {
54
+    const swiper = this;
55
+    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
56
+
57
+    const { scrollbar } = swiper;
58
+    const { $dragEl, $el } = scrollbar;
59
+
60
+    $dragEl[0].style.width = '';
61
+    $dragEl[0].style.height = '';
62
+    const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
63
+
64
+    const divider = swiper.size / swiper.virtualSize;
65
+    const moveDivider = divider * (trackSize / swiper.size);
66
+    let dragSize;
67
+    if (swiper.params.scrollbar.dragSize === 'auto') {
68
+      dragSize = trackSize * divider;
69
+    } else {
70
+      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
71
+    }
72
+
73
+    if (swiper.isHorizontal()) {
74
+      $dragEl[0].style.width = `${dragSize}px`;
75
+    } else {
76
+      $dragEl[0].style.height = `${dragSize}px`;
77
+    }
78
+
79
+    if (divider >= 1) {
80
+      $el[0].style.display = 'none';
81
+    } else {
82
+      $el[0].style.display = '';
83
+    }
84
+    if (swiper.params.scrollbar.hide) {
85
+      $el[0].style.opacity = 0;
86
+    }
87
+    Utils.extend(scrollbar, {
88
+      trackSize,
89
+      divider,
90
+      moveDivider,
91
+      dragSize,
92
+    });
93
+    scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
94
+  },
95
+  getPointerPosition(e) {
96
+    const swiper = this;
97
+    if (swiper.isHorizontal()) {
98
+      return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX);
99
+    }
100
+    return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY);
101
+  },
102
+  setDragPosition(e) {
103
+    const swiper = this;
104
+    const { scrollbar, rtlTranslate: rtl } = swiper;
105
+    const {
106
+      $el,
107
+      dragSize,
108
+      trackSize,
109
+      dragStartPos,
110
+    } = scrollbar;
111
+
112
+    let positionRatio;
113
+    positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top']
114
+      - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
115
+    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
116
+    if (rtl) {
117
+      positionRatio = 1 - positionRatio;
118
+    }
119
+
120
+    const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
121
+
122
+    swiper.updateProgress(position);
123
+    swiper.setTranslate(position);
124
+    swiper.updateActiveIndex();
125
+    swiper.updateSlidesClasses();
126
+  },
127
+  onDragStart(e) {
128
+    const swiper = this;
129
+    const params = swiper.params.scrollbar;
130
+    const { scrollbar, $wrapperEl } = swiper;
131
+    const { $el, $dragEl } = scrollbar;
132
+    swiper.scrollbar.isTouched = true;
133
+    swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl)
134
+      ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
135
+    e.preventDefault();
136
+    e.stopPropagation();
137
+
138
+    $wrapperEl.transition(100);
139
+    $dragEl.transition(100);
140
+    scrollbar.setDragPosition(e);
141
+
142
+    clearTimeout(swiper.scrollbar.dragTimeout);
143
+
144
+    $el.transition(0);
145
+    if (params.hide) {
146
+      $el.css('opacity', 1);
147
+    }
148
+    if (swiper.params.cssMode) {
149
+      swiper.$wrapperEl.css('scroll-snap-type', 'none');
150
+    }
151
+    swiper.emit('scrollbarDragStart', e);
152
+  },
153
+  onDragMove(e) {
154
+    const swiper = this;
155
+    const { scrollbar, $wrapperEl } = swiper;
156
+    const { $el, $dragEl } = scrollbar;
157
+
158
+    if (!swiper.scrollbar.isTouched) return;
159
+    if (e.preventDefault) e.preventDefault();
160
+    else e.returnValue = false;
161
+    scrollbar.setDragPosition(e);
162
+    $wrapperEl.transition(0);
163
+    $el.transition(0);
164
+    $dragEl.transition(0);
165
+    swiper.emit('scrollbarDragMove', e);
166
+  },
167
+  onDragEnd(e) {
168
+    const swiper = this;
169
+
170
+    const params = swiper.params.scrollbar;
171
+    const { scrollbar, $wrapperEl } = swiper;
172
+    const { $el } = scrollbar;
173
+
174
+    if (!swiper.scrollbar.isTouched) return;
175
+    swiper.scrollbar.isTouched = false;
176
+    if (swiper.params.cssMode) {
177
+      swiper.$wrapperEl.css('scroll-snap-type', '');
178
+      $wrapperEl.transition('');
179
+    }
180
+    if (params.hide) {
181
+      clearTimeout(swiper.scrollbar.dragTimeout);
182
+      swiper.scrollbar.dragTimeout = Utils.nextTick(() => {
183
+        $el.css('opacity', 0);
184
+        $el.transition(400);
185
+      }, 1000);
186
+    }
187
+    swiper.emit('scrollbarDragEnd', e);
188
+    if (params.snapOnRelease) {
189
+      swiper.slideToClosest();
190
+    }
191
+  },
192
+  enableDraggable() {
193
+    const swiper = this;
194
+    if (!swiper.params.scrollbar.el) return;
195
+    const {
196
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
197
+    } = swiper;
198
+    const $el = scrollbar.$el;
199
+    const target = $el[0];
200
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
201
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
202
+    if (!Support.touch) {
203
+      target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
204
+      document.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
205
+      document.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
206
+    } else {
207
+      target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
208
+      target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
209
+      target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
210
+    }
211
+  },
212
+  disableDraggable() {
213
+    const swiper = this;
214
+    if (!swiper.params.scrollbar.el) return;
215
+    const {
216
+      scrollbar, touchEventsTouch, touchEventsDesktop, params,
217
+    } = swiper;
218
+    const $el = scrollbar.$el;
219
+    const target = $el[0];
220
+    const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false;
221
+    const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
222
+    if (!Support.touch) {
223
+      target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
224
+      document.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
225
+      document.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
226
+    } else {
227
+      target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
228
+      target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
229
+      target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
230
+    }
231
+  },
232
+  init() {
233
+    const swiper = this;
234
+    if (!swiper.params.scrollbar.el) return;
235
+    const { scrollbar, $el: $swiperEl } = swiper;
236
+    const params = swiper.params.scrollbar;
237
+
238
+    let $el = $(params.el);
239
+    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
240
+      $el = $swiperEl.find(params.el);
241
+    }
242
+
243
+    let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);
244
+    if ($dragEl.length === 0) {
245
+      $dragEl = $(`<div class="${swiper.params.scrollbar.dragClass}"></div>`);
246
+      $el.append($dragEl);
247
+    }
248
+
249
+    Utils.extend(scrollbar, {
250
+      $el,
251
+      el: $el[0],
252
+      $dragEl,
253
+      dragEl: $dragEl[0],
254
+    });
255
+
256
+    if (params.draggable) {
257
+      scrollbar.enableDraggable();
258
+    }
259
+  },
260
+  destroy() {
261
+    const swiper = this;
262
+    swiper.scrollbar.disableDraggable();
263
+  },
264
+};
265
+
266
+export default {
267
+  name: 'scrollbar',
268
+  params: {
269
+    scrollbar: {
270
+      el: null,
271
+      dragSize: 'auto',
272
+      hide: false,
273
+      draggable: false,
274
+      snapOnRelease: true,
275
+      lockClass: 'swiper-scrollbar-lock',
276
+      dragClass: 'swiper-scrollbar-drag',
277
+    },
278
+  },
279
+  create() {
280
+    const swiper = this;
281
+    Utils.extend(swiper, {
282
+      scrollbar: {
283
+        init: Scrollbar.init.bind(swiper),
284
+        destroy: Scrollbar.destroy.bind(swiper),
285
+        updateSize: Scrollbar.updateSize.bind(swiper),
286
+        setTranslate: Scrollbar.setTranslate.bind(swiper),
287
+        setTransition: Scrollbar.setTransition.bind(swiper),
288
+        enableDraggable: Scrollbar.enableDraggable.bind(swiper),
289
+        disableDraggable: Scrollbar.disableDraggable.bind(swiper),
290
+        setDragPosition: Scrollbar.setDragPosition.bind(swiper),
291
+        getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
292
+        onDragStart: Scrollbar.onDragStart.bind(swiper),
293
+        onDragMove: Scrollbar.onDragMove.bind(swiper),
294
+        onDragEnd: Scrollbar.onDragEnd.bind(swiper),
295
+        isTouched: false,
296
+        timeout: null,
297
+        dragTimeout: null,
298
+      },
299
+    });
300
+  },
301
+  on: {
302
+    init() {
303
+      const swiper = this;
304
+      swiper.scrollbar.init();
305
+      swiper.scrollbar.updateSize();
306
+      swiper.scrollbar.setTranslate();
307
+    },
308
+    update() {
309
+      const swiper = this;
310
+      swiper.scrollbar.updateSize();
311
+    },
312
+    resize() {
313
+      const swiper = this;
314
+      swiper.scrollbar.updateSize();
315
+    },
316
+    observerUpdate() {
317
+      const swiper = this;
318
+      swiper.scrollbar.updateSize();
319
+    },
320
+    setTranslate() {
321
+      const swiper = this;
322
+      swiper.scrollbar.setTranslate();
323
+    },
324
+    setTransition(duration) {
325
+      const swiper = this;
326
+      swiper.scrollbar.setTransition(duration);
327
+    },
328
+    destroy() {
329
+      const swiper = this;
330
+      swiper.scrollbar.destroy();
331
+    },
332
+  },
333
+};
0 334
new file mode 100644
... ...
@@ -0,0 +1,38 @@
1
+/* Scrollbar */
2
+.swiper-scrollbar {
3
+  border-radius: 10px;
4
+  position: relative;
5
+  -ms-touch-action: none;
6
+  background: rgba(0,0,0,0.1);
7
+  .swiper-container-horizontal > & {
8
+    position: absolute;
9
+    left: 1%;
10
+    bottom: 3px;
11
+    z-index: 50;
12
+    height: 5px;
13
+    width: 98%;
14
+  }
15
+  .swiper-container-vertical > & {
16
+    position: absolute;
17
+    right: 3px;
18
+    top: 1%;
19
+    z-index: 50;
20
+    width: 5px;
21
+    height: 98%;
22
+  }
23
+}
24
+.swiper-scrollbar-drag {
25
+  height: 100%;
26
+  width: 100%;
27
+  position: relative;
28
+  background: rgba(0,0,0,0.5);
29
+  border-radius: 10px;
30
+  left: 0;
31
+  top: 0;
32
+}
33
+.swiper-scrollbar-cursor-drag {
34
+  cursor: move;
35
+}
36
+.swiper-scrollbar-lock {
37
+  display: none;
38
+}
0 39
\ No newline at end of file
1 40
new file mode 100644
... ...
@@ -0,0 +1,38 @@
1
+/* Scrollbar */
2
+.swiper-scrollbar {
3
+  border-radius: 10px;
4
+  position: relative;
5
+  -ms-touch-action: none;
6
+  background: rgba(0,0,0,0.1);
7
+  .swiper-container-horizontal > & {
8
+    position: absolute;
9
+    left: 1%;
10
+    bottom: 3px;
11
+    z-index: 50;
12
+    height: 5px;
13
+    width: 98%;
14
+  }
15
+  .swiper-container-vertical > & {
16
+    position: absolute;
17
+    right: 3px;
18
+    top: 1%;
19
+    z-index: 50;
20
+    width: 5px;
21
+    height: 98%;
22
+  }
23
+}
24
+.swiper-scrollbar-drag {
25
+  height: 100%;
26
+  width: 100%;
27
+  position: relative;
28
+  background: rgba(0,0,0,0.5);
29
+  border-radius: 10px;
30
+  left: 0;
31
+  top: 0;
32
+}
33
+.swiper-scrollbar-cursor-drag {
34
+  cursor: move;
35
+}
36
+.swiper-scrollbar-lock {
37
+  display: none;
38
+}
0 39
\ No newline at end of file
1 40
new file mode 100644
... ...
@@ -0,0 +1,211 @@
1
+import Utils from '../../utils/utils';
2
+import $ from '../../utils/dom';
3
+
4
+const Thumbs = {
5
+  init() {
6
+    const swiper = this;
7
+    const { thumbs: thumbsParams } = swiper.params;
8
+    const SwiperClass = swiper.constructor;
9
+    if (thumbsParams.swiper instanceof SwiperClass) {
10
+      swiper.thumbs.swiper = thumbsParams.swiper;
11
+      Utils.extend(swiper.thumbs.swiper.originalParams, {
12
+        watchSlidesProgress: true,
13
+        slideToClickedSlide: false,
14
+      });
15
+      Utils.extend(swiper.thumbs.swiper.params, {
16
+        watchSlidesProgress: true,
17
+        slideToClickedSlide: false,
18
+      });
19
+    } else if (Utils.isObject(thumbsParams.swiper)) {
20
+      swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
21
+        watchSlidesVisibility: true,
22
+        watchSlidesProgress: true,
23
+        slideToClickedSlide: false,
24
+      }));
25
+      swiper.thumbs.swiperCreated = true;
26
+    }
27
+    swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
28
+    swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
29
+  },
30
+  onThumbClick() {
31
+    const swiper = this;
32
+    const thumbsSwiper = swiper.thumbs.swiper;
33
+    if (!thumbsSwiper) return;
34
+    const clickedIndex = thumbsSwiper.clickedIndex;
35
+    const clickedSlide = thumbsSwiper.clickedSlide;
36
+    if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
37
+    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
38
+    let slideToIndex;
39
+    if (thumbsSwiper.params.loop) {
40
+      slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
41
+    } else {
42
+      slideToIndex = clickedIndex;
43
+    }
44
+    if (swiper.params.loop) {
45
+      let currentIndex = swiper.activeIndex;
46
+      if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
47
+        swiper.loopFix();
48
+        // eslint-disable-next-line
49
+        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
50
+        currentIndex = swiper.activeIndex;
51
+      }
52
+      const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
53
+      const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index();
54
+      if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;
55
+      else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;
56
+      else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;
57
+      else slideToIndex = prevIndex;
58
+    }
59
+    swiper.slideTo(slideToIndex);
60
+  },
61
+  update(initial) {
62
+    const swiper = this;
63
+    const thumbsSwiper = swiper.thumbs.swiper;
64
+    if (!thumbsSwiper) return;
65
+
66
+    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto'
67
+      ? thumbsSwiper.slidesPerViewDynamic()
68
+      : thumbsSwiper.params.slidesPerView;
69
+
70
+    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
71
+    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
72
+    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
73
+      let currentThumbsIndex = thumbsSwiper.activeIndex;
74
+      let newThumbsIndex;
75
+      let direction;
76
+      if (thumbsSwiper.params.loop) {
77
+        if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
78
+          thumbsSwiper.loopFix();
79
+          // eslint-disable-next-line
80
+          thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
81
+          currentThumbsIndex = thumbsSwiper.activeIndex;
82
+        }
83
+        // Find actual thumbs index to slide to
84
+        const prevThumbsIndex = thumbsSwiper.slides
85
+          .eq(currentThumbsIndex)
86
+          .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
87
+          .index();
88
+        const nextThumbsIndex = thumbsSwiper.slides
89
+          .eq(currentThumbsIndex)
90
+          .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0)
91
+          .index();
92
+        if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;
93
+        else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;
94
+        else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;
95
+        else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;
96
+        else newThumbsIndex = prevThumbsIndex;
97
+        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';
98
+      } else {
99
+        newThumbsIndex = swiper.realIndex;
100
+        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';
101
+      }
102
+      if (useOffset) {
103
+        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;
104
+      }
105
+
106
+      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
107
+        if (thumbsSwiper.params.centeredSlides) {
108
+          if (newThumbsIndex > currentThumbsIndex) {
109
+            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
110
+          } else {
111
+            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
112
+          }
113
+        } else if (newThumbsIndex > currentThumbsIndex) {
114
+          newThumbsIndex = newThumbsIndex - slidesPerView + 1;
115
+        }
116
+        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
117
+      }
118
+    }
119
+
120
+    // Activate thumbs
121
+    let thumbsToActivate = 1;
122
+    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
123
+
124
+    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
125
+      thumbsToActivate = swiper.params.slidesPerView;
126
+    }
127
+
128
+    if (!swiper.params.thumbs.multipleActiveThumbs) {
129
+      thumbsToActivate = 1;
130
+    }
131
+
132
+    thumbsToActivate = Math.floor(thumbsToActivate);
133
+
134
+    thumbsSwiper.slides.removeClass(thumbActiveClass);
135
+    if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) {
136
+      for (let i = 0; i < thumbsToActivate; i += 1) {
137
+        thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass);
138
+      }
139
+    } else {
140
+      for (let i = 0; i < thumbsToActivate; i += 1) {
141
+        thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);
142
+      }
143
+    }
144
+  },
145
+};
146
+export default {
147
+  name: 'thumbs',
148
+  params: {
149
+    thumbs: {
150
+      swiper: null,
151
+      multipleActiveThumbs: true,
152
+      autoScrollOffset: 0,
153
+      slideThumbActiveClass: 'swiper-slide-thumb-active',
154
+      thumbsContainerClass: 'swiper-container-thumbs',
155
+    },
156
+  },
157
+  create() {
158
+    const swiper = this;
159
+    Utils.extend(swiper, {
160
+      thumbs: {
161
+        swiper: null,
162
+        init: Thumbs.init.bind(swiper),
163
+        update: Thumbs.update.bind(swiper),
164
+        onThumbClick: Thumbs.onThumbClick.bind(swiper),
165
+      },
166
+    });
167
+  },
168
+  on: {
169
+    beforeInit() {
170
+      const swiper = this;
171
+      const { thumbs } = swiper.params;
172
+      if (!thumbs || !thumbs.swiper) return;
173
+      swiper.thumbs.init();
174
+      swiper.thumbs.update(true);
175
+    },
176
+    slideChange() {
177
+      const swiper = this;
178
+      if (!swiper.thumbs.swiper) return;
179
+      swiper.thumbs.update();
180
+    },
181
+    update() {
182
+      const swiper = this;
183
+      if (!swiper.thumbs.swiper) return;
184
+      swiper.thumbs.update();
185
+    },
186
+    resize() {
187
+      const swiper = this;
188
+      if (!swiper.thumbs.swiper) return;
189
+      swiper.thumbs.update();
190
+    },
191
+    observerUpdate() {
192
+      const swiper = this;
193
+      if (!swiper.thumbs.swiper) return;
194
+      swiper.thumbs.update();
195
+    },
196
+    setTransition(duration) {
197
+      const swiper = this;
198
+      const thumbsSwiper = swiper.thumbs.swiper;
199
+      if (!thumbsSwiper) return;
200
+      thumbsSwiper.setTransition(duration);
201
+    },
202
+    beforeDestroy() {
203
+      const swiper = this;
204
+      const thumbsSwiper = swiper.thumbs.swiper;
205
+      if (!thumbsSwiper) return;
206
+      if (swiper.thumbs.swiperCreated && thumbsSwiper) {
207
+        thumbsSwiper.destroy();
208
+      }
209
+    },
210
+  },
211
+};
0 212
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+.swiper-container-thumbs {
2
+  .swiper-slide-thumb-active {
3
+    // Styles for active thumb slide
4
+  }
5
+}
0 6
\ No newline at end of file
1 7
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+.swiper-container-thumbs {
2
+  .swiper-slide-thumb-active {
3
+    // Styles for active thumb slide
4
+  }
5
+}
0 6
\ No newline at end of file
1 7
new file mode 100644
... ...
@@ -0,0 +1,245 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+
4
+const Virtual = {
5
+  update(force) {
6
+    const swiper = this;
7
+    const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;
8
+    const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;
9
+    const {
10
+      from: previousFrom,
11
+      to: previousTo,
12
+      slides,
13
+      slidesGrid: previousSlidesGrid,
14
+      renderSlide,
15
+      offset: previousOffset,
16
+    } = swiper.virtual;
17
+    swiper.updateActiveIndex();
18
+    const activeIndex = swiper.activeIndex || 0;
19
+
20
+    let offsetProp;
21
+    if (swiper.rtlTranslate) offsetProp = 'right';
22
+    else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
23
+
24
+    let slidesAfter;
25
+    let slidesBefore;
26
+    if (centeredSlides) {
27
+      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
28
+      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
29
+    } else {
30
+      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
31
+      slidesBefore = slidesPerGroup + addSlidesAfter;
32
+    }
33
+    const from = Math.max((activeIndex || 0) - slidesBefore, 0);
34
+    const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
35
+    const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
36
+
37
+    Utils.extend(swiper.virtual, {
38
+      from,
39
+      to,
40
+      offset,
41
+      slidesGrid: swiper.slidesGrid,
42
+    });
43
+
44
+    function onRendered() {
45
+      swiper.updateSlides();
46
+      swiper.updateProgress();
47
+      swiper.updateSlidesClasses();
48
+      if (swiper.lazy && swiper.params.lazy.enabled) {
49
+        swiper.lazy.load();
50
+      }
51
+    }
52
+
53
+    if (previousFrom === from && previousTo === to && !force) {
54
+      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
55
+        swiper.slides.css(offsetProp, `${offset}px`);
56
+      }
57
+      swiper.updateProgress();
58
+      return;
59
+    }
60
+    if (swiper.params.virtual.renderExternal) {
61
+      swiper.params.virtual.renderExternal.call(swiper, {
62
+        offset,
63
+        from,
64
+        to,
65
+        slides: (function getSlides() {
66
+          const slidesToRender = [];
67
+          for (let i = from; i <= to; i += 1) {
68
+            slidesToRender.push(slides[i]);
69
+          }
70
+          return slidesToRender;
71
+        }()),
72
+      });
73
+      onRendered();
74
+      return;
75
+    }
76
+    const prependIndexes = [];
77
+    const appendIndexes = [];
78
+    if (force) {
79
+      swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();
80
+    } else {
81
+      for (let i = previousFrom; i <= previousTo; i += 1) {
82
+        if (i < from || i > to) {
83
+          swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove();
84
+        }
85
+      }
86
+    }
87
+    for (let i = 0; i < slides.length; i += 1) {
88
+      if (i >= from && i <= to) {
89
+        if (typeof previousTo === 'undefined' || force) {
90
+          appendIndexes.push(i);
91
+        } else {
92
+          if (i > previousTo) appendIndexes.push(i);
93
+          if (i < previousFrom) prependIndexes.push(i);
94
+        }
95
+      }
96
+    }
97
+    appendIndexes.forEach((index) => {
98
+      swiper.$wrapperEl.append(renderSlide(slides[index], index));
99
+    });
100
+    prependIndexes.sort((a, b) => b - a).forEach((index) => {
101
+      swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
102
+    });
103
+    swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);
104
+    onRendered();
105
+  },
106
+  renderSlide(slide, index) {
107
+    const swiper = this;
108
+    const params = swiper.params.virtual;
109
+    if (params.cache && swiper.virtual.cache[index]) {
110
+      return swiper.virtual.cache[index];
111
+    }
112
+    const $slideEl = params.renderSlide
113
+      ? $(params.renderSlide.call(swiper, slide, index))
114
+      : $(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`);
115
+    if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
116
+    if (params.cache) swiper.virtual.cache[index] = $slideEl;
117
+    return $slideEl;
118
+  },
119
+  appendSlide(slides) {
120
+    const swiper = this;
121
+    if (typeof slides === 'object' && 'length' in slides) {
122
+      for (let i = 0; i < slides.length; i += 1) {
123
+        if (slides[i]) swiper.virtual.slides.push(slides[i]);
124
+      }
125
+    } else {
126
+      swiper.virtual.slides.push(slides);
127
+    }
128
+    swiper.virtual.update(true);
129
+  },
130
+  prependSlide(slides) {
131
+    const swiper = this;
132
+    const activeIndex = swiper.activeIndex;
133
+    let newActiveIndex = activeIndex + 1;
134
+    let numberOfNewSlides = 1;
135
+
136
+    if (Array.isArray(slides)) {
137
+      for (let i = 0; i < slides.length; i += 1) {
138
+        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
139
+      }
140
+      newActiveIndex = activeIndex + slides.length;
141
+      numberOfNewSlides = slides.length;
142
+    } else {
143
+      swiper.virtual.slides.unshift(slides);
144
+    }
145
+    if (swiper.params.virtual.cache) {
146
+      const cache = swiper.virtual.cache;
147
+      const newCache = {};
148
+      Object.keys(cache).forEach((cachedIndex) => {
149
+        const $cachedEl = cache[cachedIndex];
150
+        const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');
151
+        if (cachedElIndex) {
152
+          $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1);
153
+        }
154
+        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;
155
+      });
156
+      swiper.virtual.cache = newCache;
157
+    }
158
+    swiper.virtual.update(true);
159
+    swiper.slideTo(newActiveIndex, 0);
160
+  },
161
+  removeSlide(slidesIndexes) {
162
+    const swiper = this;
163
+    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
164
+    let activeIndex = swiper.activeIndex;
165
+    if (Array.isArray(slidesIndexes)) {
166
+      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
167
+        swiper.virtual.slides.splice(slidesIndexes[i], 1);
168
+        if (swiper.params.virtual.cache) {
169
+          delete swiper.virtual.cache[slidesIndexes[i]];
170
+        }
171
+        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
172
+        activeIndex = Math.max(activeIndex, 0);
173
+      }
174
+    } else {
175
+      swiper.virtual.slides.splice(slidesIndexes, 1);
176
+      if (swiper.params.virtual.cache) {
177
+        delete swiper.virtual.cache[slidesIndexes];
178
+      }
179
+      if (slidesIndexes < activeIndex) activeIndex -= 1;
180
+      activeIndex = Math.max(activeIndex, 0);
181
+    }
182
+    swiper.virtual.update(true);
183
+    swiper.slideTo(activeIndex, 0);
184
+  },
185
+  removeAllSlides() {
186
+    const swiper = this;
187
+    swiper.virtual.slides = [];
188
+    if (swiper.params.virtual.cache) {
189
+      swiper.virtual.cache = {};
190
+    }
191
+    swiper.virtual.update(true);
192
+    swiper.slideTo(0, 0);
193
+  },
194
+};
195
+
196
+export default {
197
+  name: 'virtual',
198
+  params: {
199
+    virtual: {
200
+      enabled: false,
201
+      slides: [],
202
+      cache: true,
203
+      renderSlide: null,
204
+      renderExternal: null,
205
+      addSlidesBefore: 0,
206
+      addSlidesAfter: 0,
207
+    },
208
+  },
209
+  create() {
210
+    const swiper = this;
211
+    Utils.extend(swiper, {
212
+      virtual: {
213
+        update: Virtual.update.bind(swiper),
214
+        appendSlide: Virtual.appendSlide.bind(swiper),
215
+        prependSlide: Virtual.prependSlide.bind(swiper),
216
+        removeSlide: Virtual.removeSlide.bind(swiper),
217
+        removeAllSlides: Virtual.removeAllSlides.bind(swiper),
218
+        renderSlide: Virtual.renderSlide.bind(swiper),
219
+        slides: swiper.params.virtual.slides,
220
+        cache: {},
221
+      },
222
+    });
223
+  },
224
+  on: {
225
+    beforeInit() {
226
+      const swiper = this;
227
+      if (!swiper.params.virtual.enabled) return;
228
+      swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
229
+      const overwriteParams = {
230
+        watchSlidesProgress: true,
231
+      };
232
+      Utils.extend(swiper.params, overwriteParams);
233
+      Utils.extend(swiper.originalParams, overwriteParams);
234
+
235
+      if (!swiper.params.initialSlide) {
236
+        swiper.virtual.update();
237
+      }
238
+    },
239
+    setTranslate() {
240
+      const swiper = this;
241
+      if (!swiper.params.virtual.enabled) return;
242
+      swiper.virtual.update();
243
+    },
244
+  },
245
+};
0 246
new file mode 100644
... ...
@@ -0,0 +1,561 @@
1
+import $ from '../../utils/dom';
2
+import Utils from '../../utils/utils';
3
+import Device from '../../utils/device';
4
+import Support from '../../utils/support';
5
+
6
+const Zoom = {
7
+  // Calc Scale From Multi-touches
8
+  getDistanceBetweenTouches(e) {
9
+    if (e.targetTouches.length < 2) return 1;
10
+    const x1 = e.targetTouches[0].pageX;
11
+    const y1 = e.targetTouches[0].pageY;
12
+    const x2 = e.targetTouches[1].pageX;
13
+    const y2 = e.targetTouches[1].pageY;
14
+    const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2));
15
+    return distance;
16
+  },
17
+  // Events
18
+  onGestureStart(e) {
19
+    const swiper = this;
20
+    const params = swiper.params.zoom;
21
+    const zoom = swiper.zoom;
22
+    const { gesture } = zoom;
23
+    zoom.fakeGestureTouched = false;
24
+    zoom.fakeGestureMoved = false;
25
+    if (!Support.gestures) {
26
+      if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
27
+        return;
28
+      }
29
+      zoom.fakeGestureTouched = true;
30
+      gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
31
+    }
32
+    if (!gesture.$slideEl || !gesture.$slideEl.length) {
33
+      gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);
34
+      if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
35
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
36
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
37
+      gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
38
+      if (gesture.$imageWrapEl.length === 0) {
39
+        gesture.$imageEl = undefined;
40
+        return;
41
+      }
42
+    }
43
+    if (gesture.$imageEl) {
44
+      gesture.$imageEl.transition(0);
45
+    }
46
+    swiper.zoom.isScaling = true;
47
+  },
48
+  onGestureChange(e) {
49
+    const swiper = this;
50
+    const params = swiper.params.zoom;
51
+    const zoom = swiper.zoom;
52
+    const { gesture } = zoom;
53
+    if (!Support.gestures) {
54
+      if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
55
+        return;
56
+      }
57
+      zoom.fakeGestureMoved = true;
58
+      gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
59
+    }
60
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
61
+    if (Support.gestures) {
62
+      zoom.scale = e.scale * zoom.currentScale;
63
+    } else {
64
+      zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
65
+    }
66
+    if (zoom.scale > gesture.maxRatio) {
67
+      zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5);
68
+    }
69
+    if (zoom.scale < params.minRatio) {
70
+      zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5);
71
+    }
72
+    gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);
73
+  },
74
+  onGestureEnd(e) {
75
+    const swiper = this;
76
+    const params = swiper.params.zoom;
77
+    const zoom = swiper.zoom;
78
+    const { gesture } = zoom;
79
+    if (!Support.gestures) {
80
+      if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
81
+        return;
82
+      }
83
+      if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
84
+        return;
85
+      }
86
+      zoom.fakeGestureTouched = false;
87
+      zoom.fakeGestureMoved = false;
88
+    }
89
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
90
+    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
91
+    gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
92
+    zoom.currentScale = zoom.scale;
93
+    zoom.isScaling = false;
94
+    if (zoom.scale === 1) gesture.$slideEl = undefined;
95
+  },
96
+  onTouchStart(e) {
97
+    const swiper = this;
98
+    const zoom = swiper.zoom;
99
+    const { gesture, image } = zoom;
100
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
101
+    if (image.isTouched) return;
102
+    if (Device.android && e.cancelable) e.preventDefault();
103
+    image.isTouched = true;
104
+    image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
105
+    image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
106
+  },
107
+  onTouchMove(e) {
108
+    const swiper = this;
109
+    const zoom = swiper.zoom;
110
+    const { gesture, image, velocity } = zoom;
111
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
112
+    swiper.allowClick = false;
113
+    if (!image.isTouched || !gesture.$slideEl) return;
114
+
115
+    if (!image.isMoved) {
116
+      image.width = gesture.$imageEl[0].offsetWidth;
117
+      image.height = gesture.$imageEl[0].offsetHeight;
118
+      image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
119
+      image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
120
+      gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
121
+      gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
122
+      gesture.$imageWrapEl.transition(0);
123
+      if (swiper.rtl) {
124
+        image.startX = -image.startX;
125
+        image.startY = -image.startY;
126
+      }
127
+    }
128
+    // Define if we need image drag
129
+    const scaledWidth = image.width * zoom.scale;
130
+    const scaledHeight = image.height * zoom.scale;
131
+
132
+    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
133
+
134
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
135
+    image.maxX = -image.minX;
136
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
137
+    image.maxY = -image.minY;
138
+
139
+    image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
140
+    image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
141
+
142
+    if (!image.isMoved && !zoom.isScaling) {
143
+      if (
144
+        swiper.isHorizontal()
145
+        && (
146
+          (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x)
147
+          || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
148
+        )
149
+      ) {
150
+        image.isTouched = false;
151
+        return;
152
+      } if (
153
+        !swiper.isHorizontal()
154
+        && (
155
+          (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y)
156
+          || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
157
+        )
158
+      ) {
159
+        image.isTouched = false;
160
+        return;
161
+      }
162
+    }
163
+    if (e.cancelable) {
164
+      e.preventDefault();
165
+    }
166
+    e.stopPropagation();
167
+
168
+    image.isMoved = true;
169
+    image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
170
+    image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
171
+
172
+    if (image.currentX < image.minX) {
173
+      image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8);
174
+    }
175
+    if (image.currentX > image.maxX) {
176
+      image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8);
177
+    }
178
+
179
+    if (image.currentY < image.minY) {
180
+      image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8);
181
+    }
182
+    if (image.currentY > image.maxY) {
183
+      image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8);
184
+    }
185
+
186
+    // Velocity
187
+    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
188
+    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
189
+    if (!velocity.prevTime) velocity.prevTime = Date.now();
190
+    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
191
+    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
192
+    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
193
+    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
194
+    velocity.prevPositionX = image.touchesCurrent.x;
195
+    velocity.prevPositionY = image.touchesCurrent.y;
196
+    velocity.prevTime = Date.now();
197
+
198
+    gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
199
+  },
200
+  onTouchEnd() {
201
+    const swiper = this;
202
+    const zoom = swiper.zoom;
203
+    const { gesture, image, velocity } = zoom;
204
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
205
+    if (!image.isTouched || !image.isMoved) {
206
+      image.isTouched = false;
207
+      image.isMoved = false;
208
+      return;
209
+    }
210
+    image.isTouched = false;
211
+    image.isMoved = false;
212
+    let momentumDurationX = 300;
213
+    let momentumDurationY = 300;
214
+    const momentumDistanceX = velocity.x * momentumDurationX;
215
+    const newPositionX = image.currentX + momentumDistanceX;
216
+    const momentumDistanceY = velocity.y * momentumDurationY;
217
+    const newPositionY = image.currentY + momentumDistanceY;
218
+
219
+    // Fix duration
220
+    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
221
+    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
222
+    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
223
+
224
+    image.currentX = newPositionX;
225
+    image.currentY = newPositionY;
226
+
227
+    // Define if we need image drag
228
+    const scaledWidth = image.width * zoom.scale;
229
+    const scaledHeight = image.height * zoom.scale;
230
+    image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
231
+    image.maxX = -image.minX;
232
+    image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
233
+    image.maxY = -image.minY;
234
+    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
235
+    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
236
+
237
+    gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);
238
+  },
239
+  onTransitionEnd() {
240
+    const swiper = this;
241
+    const zoom = swiper.zoom;
242
+    const { gesture } = zoom;
243
+    if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
244
+      if (gesture.$imageEl) {
245
+        gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
246
+      }
247
+      if (gesture.$imageWrapEl) {
248
+        gesture.$imageWrapEl.transform('translate3d(0,0,0)');
249
+      }
250
+
251
+      zoom.scale = 1;
252
+      zoom.currentScale = 1;
253
+
254
+      gesture.$slideEl = undefined;
255
+      gesture.$imageEl = undefined;
256
+      gesture.$imageWrapEl = undefined;
257
+    }
258
+  },
259
+  // Toggle Zoom
260
+  toggle(e) {
261
+    const swiper = this;
262
+    const zoom = swiper.zoom;
263
+
264
+    if (zoom.scale && zoom.scale !== 1) {
265
+      // Zoom Out
266
+      zoom.out();
267
+    } else {
268
+      // Zoom In
269
+      zoom.in(e);
270
+    }
271
+  },
272
+  in(e) {
273
+    const swiper = this;
274
+
275
+    const zoom = swiper.zoom;
276
+    const params = swiper.params.zoom;
277
+    const { gesture, image } = zoom;
278
+
279
+    if (!gesture.$slideEl) {
280
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
281
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
282
+      } else {
283
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
284
+      }
285
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
286
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
287
+    }
288
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
289
+
290
+    gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);
291
+
292
+    let touchX;
293
+    let touchY;
294
+    let offsetX;
295
+    let offsetY;
296
+    let diffX;
297
+    let diffY;
298
+    let translateX;
299
+    let translateY;
300
+    let imageWidth;
301
+    let imageHeight;
302
+    let scaledWidth;
303
+    let scaledHeight;
304
+    let translateMinX;
305
+    let translateMinY;
306
+    let translateMaxX;
307
+    let translateMaxY;
308
+    let slideWidth;
309
+    let slideHeight;
310
+
311
+    if (typeof image.touchesStart.x === 'undefined' && e) {
312
+      touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
313
+      touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
314
+    } else {
315
+      touchX = image.touchesStart.x;
316
+      touchY = image.touchesStart.y;
317
+    }
318
+
319
+    zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
320
+    zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
321
+    if (e) {
322
+      slideWidth = gesture.$slideEl[0].offsetWidth;
323
+      slideHeight = gesture.$slideEl[0].offsetHeight;
324
+      offsetX = gesture.$slideEl.offset().left;
325
+      offsetY = gesture.$slideEl.offset().top;
326
+      diffX = (offsetX + (slideWidth / 2)) - touchX;
327
+      diffY = (offsetY + (slideHeight / 2)) - touchY;
328
+
329
+      imageWidth = gesture.$imageEl[0].offsetWidth;
330
+      imageHeight = gesture.$imageEl[0].offsetHeight;
331
+      scaledWidth = imageWidth * zoom.scale;
332
+      scaledHeight = imageHeight * zoom.scale;
333
+
334
+      translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
335
+      translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
336
+      translateMaxX = -translateMinX;
337
+      translateMaxY = -translateMinY;
338
+
339
+      translateX = diffX * zoom.scale;
340
+      translateY = diffY * zoom.scale;
341
+
342
+      if (translateX < translateMinX) {
343
+        translateX = translateMinX;
344
+      }
345
+      if (translateX > translateMaxX) {
346
+        translateX = translateMaxX;
347
+      }
348
+
349
+      if (translateY < translateMinY) {
350
+        translateY = translateMinY;
351
+      }
352
+      if (translateY > translateMaxY) {
353
+        translateY = translateMaxY;
354
+      }
355
+    } else {
356
+      translateX = 0;
357
+      translateY = 0;
358
+    }
359
+    gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);
360
+    gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);
361
+  },
362
+  out() {
363
+    const swiper = this;
364
+
365
+    const zoom = swiper.zoom;
366
+    const params = swiper.params.zoom;
367
+    const { gesture } = zoom;
368
+
369
+    if (!gesture.$slideEl) {
370
+      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
371
+        gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);
372
+      } else {
373
+        gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
374
+      }
375
+      gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target');
376
+      gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);
377
+    }
378
+    if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
379
+
380
+    zoom.scale = 1;
381
+    zoom.currentScale = 1;
382
+    gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
383
+    gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
384
+    gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);
385
+    gesture.$slideEl = undefined;
386
+  },
387
+  // Attach/Detach Events
388
+  enable() {
389
+    const swiper = this;
390
+    const zoom = swiper.zoom;
391
+    if (zoom.enabled) return;
392
+    zoom.enabled = true;
393
+
394
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
395
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
396
+
397
+    const slideSelector = `.${swiper.params.slideClass}`;
398
+
399
+    // Scale image
400
+    if (Support.gestures) {
401
+      swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
402
+      swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
403
+      swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
404
+    } else if (swiper.touchEvents.start === 'touchstart') {
405
+      swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
406
+      swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
407
+      swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
408
+      if (swiper.touchEvents.cancel) {
409
+        swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
410
+      }
411
+    }
412
+
413
+    // Move image
414
+    swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
415
+  },
416
+  disable() {
417
+    const swiper = this;
418
+    const zoom = swiper.zoom;
419
+    if (!zoom.enabled) return;
420
+
421
+    swiper.zoom.enabled = false;
422
+
423
+    const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
424
+    const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true;
425
+
426
+    const slideSelector = `.${swiper.params.slideClass}`;
427
+
428
+    // Scale image
429
+    if (Support.gestures) {
430
+      swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener);
431
+      swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener);
432
+      swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener);
433
+    } else if (swiper.touchEvents.start === 'touchstart') {
434
+      swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener);
435
+      swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture);
436
+      swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener);
437
+      if (swiper.touchEvents.cancel) {
438
+        swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener);
439
+      }
440
+    }
441
+
442
+    // Move image
443
+    swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture);
444
+  },
445
+};
446
+
447
+export default {
448
+  name: 'zoom',
449
+  params: {
450
+    zoom: {
451
+      enabled: false,
452
+      maxRatio: 3,
453
+      minRatio: 1,
454
+      toggle: true,
455
+      containerClass: 'swiper-zoom-container',
456
+      zoomedSlideClass: 'swiper-slide-zoomed',
457
+    },
458
+  },
459
+  create() {
460
+    const swiper = this;
461
+    const zoom = {
462
+      enabled: false,
463
+      scale: 1,
464
+      currentScale: 1,
465
+      isScaling: false,
466
+      gesture: {
467
+        $slideEl: undefined,
468
+        slideWidth: undefined,
469
+        slideHeight: undefined,
470
+        $imageEl: undefined,
471
+        $imageWrapEl: undefined,
472
+        maxRatio: 3,
473
+      },
474
+      image: {
475
+        isTouched: undefined,
476
+        isMoved: undefined,
477
+        currentX: undefined,
478
+        currentY: undefined,
479
+        minX: undefined,
480
+        minY: undefined,
481
+        maxX: undefined,
482
+        maxY: undefined,
483
+        width: undefined,
484
+        height: undefined,
485
+        startX: undefined,
486
+        startY: undefined,
487
+        touchesStart: {},
488
+        touchesCurrent: {},
489
+      },
490
+      velocity: {
491
+        x: undefined,
492
+        y: undefined,
493
+        prevPositionX: undefined,
494
+        prevPositionY: undefined,
495
+        prevTime: undefined,
496
+      },
497
+    };
498
+
499
+    ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => {
500
+      zoom[methodName] = Zoom[methodName].bind(swiper);
501
+    });
502
+    Utils.extend(swiper, {
503
+      zoom,
504
+    });
505
+
506
+    let scale = 1;
507
+    Object.defineProperty(swiper.zoom, 'scale', {
508
+      get() {
509
+        return scale;
510
+      },
511
+      set(value) {
512
+        if (scale !== value) {
513
+          const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
514
+          const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
515
+          swiper.emit('zoomChange', value, imageEl, slideEl);
516
+        }
517
+        scale = value;
518
+      },
519
+    });
520
+  },
521
+  on: {
522
+    init() {
523
+      const swiper = this;
524
+      if (swiper.params.zoom.enabled) {
525
+        swiper.zoom.enable();
526
+      }
527
+    },
528
+    destroy() {
529
+      const swiper = this;
530
+      swiper.zoom.disable();
531
+    },
532
+    touchStart(e) {
533
+      const swiper = this;
534
+      if (!swiper.zoom.enabled) return;
535
+      swiper.zoom.onTouchStart(e);
536
+    },
537
+    touchEnd(e) {
538
+      const swiper = this;
539
+      if (!swiper.zoom.enabled) return;
540
+      swiper.zoom.onTouchEnd(e);
541
+    },
542
+    doubleTap(e) {
543
+      const swiper = this;
544
+      if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
545
+        swiper.zoom.toggle(e);
546
+      }
547
+    },
548
+    transitionEnd() {
549
+      const swiper = this;
550
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
551
+        swiper.zoom.onTransitionEnd();
552
+      }
553
+    },
554
+    slideChange() {
555
+      const swiper = this;
556
+      if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
557
+        swiper.zoom.onTransitionEnd();
558
+      }
559
+    },
560
+  },
561
+};
0 562
new file mode 100644
... ...
@@ -0,0 +1,18 @@
1
+.swiper-zoom-container {
2
+  width: 100%;
3
+  height: 100%;
4
+  display: flex;
5
+  justify-content: center;
6
+  align-items: center;
7
+  text-align: center;
8
+
9
+  > img, > svg, > canvas {
10
+    max-width: 100%;
11
+    max-height: 100%;
12
+    object-fit: contain;
13
+  }
14
+}
15
+
16
+.swiper-slide-zoomed {
17
+  cursor: move;
18
+}
0 19
new file mode 100644
... ...
@@ -0,0 +1,18 @@
1
+.swiper-zoom-container {
2
+  width: 100%;
3
+  height: 100%;
4
+  display: flex;
5
+  justify-content: center;
6
+  align-items: center;
7
+  text-align: center;
8
+
9
+  > img, > svg, > canvas {
10
+    max-width: 100%;
11
+    max-height: 100%;
12
+    object-fit: contain;
13
+  }
14
+}
15
+
16
+.swiper-slide-zoomed {
17
+  cursor: move;
18
+}
0 19
new file mode 100644
1 20
Binary files /dev/null and b/assets/lib/swiper/5.4.0/src/icons/font/swiper-icons.ttf differ
2 21
new file mode 100644
3 22
Binary files /dev/null and b/assets/lib/swiper/5.4.0/src/icons/font/swiper-icons.woff differ
4 23
new file mode 100644
5 24
Binary files /dev/null and b/assets/lib/swiper/5.4.0/src/icons/font/swiper-icons.woff2 differ
6 25
new file mode 100644
... ...
@@ -0,0 +1,3 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
2
+  <path d="M1.37727273,19.5227273 C1.11368228,19.2591368 1.11368228,18.8317723 1.37727273,18.5681818 L9.94545455,10 L1.37727273,1.43181818 C1.11368228,1.16822773 1.11368228,0.740863176 1.37727273,0.477272727 C1.64086318,0.213682278 2.06822773,0.213682278 2.33181818,0.477272727 L11.1474387,9.29289322 C11.537963,9.68341751 11.537963,10.3165825 11.1474387,10.7071068 L2.33181818,19.5227273 C2.06822773,19.7863177 1.64086318,19.7863177 1.37727273,19.5227273 Z" transform="translate(4)"/>
3
+</svg>
0 4
new file mode 100644
... ...
@@ -0,0 +1,3 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
2
+  <path d="M10.4772727,0.477272727 C10.7408632,0.740863176 10.7408632,1.16822773 10.4772727,1.43181818 L1.90909091,10 L10.4772727,18.5681818 C10.7408632,18.8317723 10.7408632,19.2591368 10.4772727,19.5227273 C10.2136823,19.7863177 9.78631772,19.7863177 9.52272727,19.5227273 L0.707106781,10.7071068 C0.316582489,10.3165825 0.316582489,9.68341751 0.707106781,9.29289322 L9.52272727,0.477272727 C9.78631772,0.213682278 10.2136823,0.213682278 10.4772727,0.477272727 Z" transform="translate(4)"/>
3
+</svg>
0 4
new file mode 100644
... ...
@@ -0,0 +1,24 @@
1
+@plugin './plugin.js';
2
+.navigation-color-loop(@ruleset) when (length( @colors ) >= 1) {
3
+  @length: length( @colors ) ;
4
+  .looper( 1 ) ;
5
+  .looper( @index ) when ( @index <= @length ) and (length(extract( @colors, @index )) = 2) {
6
+    @navPair: extract( @colors, @index );
7
+    @navColorName: extract( @navPair, 1 ) ;
8
+    @navColorValue: extract( @navPair, 2 ) ;
9
+    @ruleset();
10
+    .looper( @index + 1 ) ;
11
+  }
12
+}
13
+
14
+.pagination-color-loop(@ruleset) when (length( @colors ) >= 1) {
15
+  @length: length( @colors ) ;
16
+  .looper( 1 ) ;
17
+  .looper( @index ) when ( @index <= @length ) and (length(extract( @colors, @index )) = 2) {
18
+    @paginationPair: extract( @colors, @index );
19
+    @paginationColorName: extract( @paginationPair, 1 ) ;
20
+    @paginationColorValue: extract( @paginationPair, 2 ) ;
21
+    @ruleset();
22
+    .looper( @index + 1 ) ;
23
+  }
24
+}
0 25
new file mode 100644
... ...
@@ -0,0 +1,17 @@
1
+const fs = require('fs');
2
+
3
+function base64Encode(file) {
4
+  // read binary data
5
+  const bitmap = fs.readFileSync(file);
6
+  // convert binary data to base64 encoded string
7
+  return Buffer.from(bitmap).toString('base64');
8
+}
9
+
10
+module.exports = {
11
+  install(less, pluginManager, functions) {
12
+    functions.add('swiperIconsFont', () => {
13
+      const iconsFontBase64 = base64Encode('./src/icons/font/swiper-icons.woff');
14
+      return iconsFontBase64;
15
+    });
16
+  },
17
+};
0 18
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+import Browser from '../../utils/browser';
2
+
3
+export default {
4
+  name: 'browser',
5
+  proto: {
6
+    browser: Browser,
7
+  },
8
+  static: {
9
+    browser: Browser,
10
+  },
11
+};
0 12
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+import Device from '../../utils/device';
2
+
3
+export default {
4
+  name: 'device',
5
+  proto: {
6
+    device: Device,
7
+  },
8
+  static: {
9
+    device: Device,
10
+  },
11
+};
0 12
new file mode 100644
... ...
@@ -0,0 +1,90 @@
1
+import { window } from 'ssr-window';
2
+import Utils from '../../utils/utils';
3
+import Support from '../../utils/support';
4
+
5
+const Observer = {
6
+  func: window.MutationObserver || window.WebkitMutationObserver,
7
+  attach(target, options = {}) {
8
+    const swiper = this;
9
+
10
+    const ObserverFunc = Observer.func;
11
+    const observer = new ObserverFunc((mutations) => {
12
+      // The observerUpdate event should only be triggered
13
+      // once despite the number of mutations.  Additional
14
+      // triggers are redundant and are very costly
15
+      if (mutations.length === 1) {
16
+        swiper.emit('observerUpdate', mutations[0]);
17
+        return;
18
+      }
19
+      const observerUpdate = function observerUpdate() {
20
+        swiper.emit('observerUpdate', mutations[0]);
21
+      };
22
+
23
+      if (window.requestAnimationFrame) {
24
+        window.requestAnimationFrame(observerUpdate);
25
+      } else {
26
+        window.setTimeout(observerUpdate, 0);
27
+      }
28
+    });
29
+
30
+    observer.observe(target, {
31
+      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
32
+      childList: typeof options.childList === 'undefined' ? true : options.childList,
33
+      characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
34
+    });
35
+
36
+    swiper.observer.observers.push(observer);
37
+  },
38
+  init() {
39
+    const swiper = this;
40
+    if (!Support.observer || !swiper.params.observer) return;
41
+    if (swiper.params.observeParents) {
42
+      const containerParents = swiper.$el.parents();
43
+      for (let i = 0; i < containerParents.length; i += 1) {
44
+        swiper.observer.attach(containerParents[i]);
45
+      }
46
+    }
47
+    // Observe container
48
+    swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });
49
+
50
+    // Observe wrapper
51
+    swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
52
+  },
53
+  destroy() {
54
+    const swiper = this;
55
+    swiper.observer.observers.forEach((observer) => {
56
+      observer.disconnect();
57
+    });
58
+    swiper.observer.observers = [];
59
+  },
60
+};
61
+
62
+export default {
63
+  name: 'observer',
64
+  params: {
65
+    observer: false,
66
+    observeParents: false,
67
+    observeSlideChildren: false,
68
+  },
69
+  create() {
70
+    const swiper = this;
71
+    Utils.extend(swiper, {
72
+      observer: {
73
+        init: Observer.init.bind(swiper),
74
+        attach: Observer.attach.bind(swiper),
75
+        destroy: Observer.destroy.bind(swiper),
76
+        observers: [],
77
+      },
78
+    });
79
+  },
80
+  on: {
81
+    init() {
82
+      const swiper = this;
83
+      swiper.observer.init();
84
+    },
85
+    destroy() {
86
+      const swiper = this;
87
+      swiper.observer.destroy();
88
+    },
89
+  },
90
+};
0 91
new file mode 100644
... ...
@@ -0,0 +1,37 @@
1
+import { window } from 'ssr-window';
2
+import Utils from '../../utils/utils';
3
+
4
+export default {
5
+  name: 'resize',
6
+  create() {
7
+    const swiper = this;
8
+    Utils.extend(swiper, {
9
+      resize: {
10
+        resizeHandler() {
11
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
12
+          swiper.emit('beforeResize');
13
+          swiper.emit('resize');
14
+        },
15
+        orientationChangeHandler() {
16
+          if (!swiper || swiper.destroyed || !swiper.initialized) return;
17
+          swiper.emit('orientationchange');
18
+        },
19
+      },
20
+    });
21
+  },
22
+  on: {
23
+    init() {
24
+      const swiper = this;
25
+      // Emit resize
26
+      window.addEventListener('resize', swiper.resize.resizeHandler);
27
+
28
+      // Emit orientationchange
29
+      window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
30
+    },
31
+    destroy() {
32
+      const swiper = this;
33
+      window.removeEventListener('resize', swiper.resize.resizeHandler);
34
+      window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
35
+    },
36
+  },
37
+};
0 38
new file mode 100644
... ...
@@ -0,0 +1,11 @@
1
+import Support from '../../utils/support';
2
+
3
+export default {
4
+  name: 'support',
5
+  proto: {
6
+    support: Support,
7
+  },
8
+  static: {
9
+    support: Support,
10
+  },
11
+};
0 12
new file mode 100644
... ...
@@ -0,0 +1,60 @@
1
+/// Urlencode the SVG string
2
+/// @param {String} $svg - SVG image to encode
3
+/// @return {String} - Encoded SVG data uri
4
+@function swiper-svg-uri($svg) {
5
+  $encoded: '';
6
+  $chunkSize: 2048;
7
+  $index: 0;
8
+  $loops: ceil(str-length($svg) / $chunkSize);
9
+
10
+  $map: (
11
+   "%": "%25",
12
+   "<": "%3C",
13
+   ">": "%3E",
14
+   " ": "%20",
15
+   "!": "%21",
16
+   "*": "%2A",
17
+   '"': "%22",
18
+   ";": "%3B",
19
+   ":": "%3A",
20
+   "@": "%40",
21
+   "&": "%26",
22
+   "=": "%3D",
23
+   "+": "%2B",
24
+   "$": "%24",
25
+   ",": "%2C",
26
+   "/": "%2F",
27
+   "?": "%3F",
28
+   "#": "%23",
29
+   "[": "%5B",
30
+   "]": "%5D"
31
+  );
32
+
33
+  @for $i from 1 through $loops {
34
+    $chunk: str-slice($svg, $index, $index + $chunkSize - 1);
35
+    @each $search, $replace in $map {
36
+      $chunk: swiper-str-replace($chunk, $search, $replace);
37
+    }
38
+    $encoded: #{$encoded}#{$chunk};
39
+    $index: $index + $chunkSize;
40
+  }
41
+
42
+  @return url("data:image/svg+xml;charset=utf-8,#{$encoded}");
43
+}
44
+
45
+/// Replace `$search` with `$replace` in `$string`
46
+/// @author Hugo Giraudel
47
+/// @link http://sassmeister.com/gist/1b4f2da5527830088e4d
48
+/// @param {String} $string - Initial string
49
+/// @param {String} $search - Substring to replace
50
+/// @param {String} $replace ('') - New value
51
+/// @return {String} - Updated string
52
+@function swiper-str-replace($string, $search, $replace: '') {
53
+  $index: str-index($string, $search);
54
+
55
+  @if $index {
56
+    @return str-slice($string, 1, $index - 1) + $replace + swiper-str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
57
+  }
58
+
59
+  @return $string;
60
+}
0 61
new file mode 100644
... ...
@@ -0,0 +1,29 @@
1
+// Swiper Class
2
+import Swiper from './components/core/core-class';
3
+
4
+// Core Modules
5
+import Device from './modules/device/device';
6
+import Support from './modules/support/support';
7
+import Browser from './modules/browser/browser';
8
+import Resize from './modules/resize/resize';
9
+import Observer from './modules/observer/observer';
10
+
11
+//IMPORT_COMPONENTS
12
+
13
+const components = [
14
+  Device,
15
+  Support,
16
+  Browser,
17
+  Resize,
18
+  Observer,
19
+  //INSTALL_COMPONENTS
20
+];
21
+
22
+if (typeof Swiper.use === 'undefined') {
23
+  Swiper.use = Swiper.Class.use;
24
+  Swiper.installModule = Swiper.Class.installModule;
25
+}
26
+
27
+Swiper.use(components);
28
+
29
+//EXPORT
0 30
new file mode 100644
... ...
@@ -0,0 +1,16 @@
1
+@import url('./less/mixins.less');
2
+
3
+@themeColor: $themeColor;
4
+@colors: $colors;
5
+
6
+@font-face {
7
+  @fontBase64: swiperIconsFont();
8
+  font-family: 'swiper-icons';
9
+  src: url("data:application/font-woff;charset=utf-8;base64, @{fontBase64}") format("woff");
10
+  font-weight: 400;
11
+  font-style: normal;
12
+}
13
+
14
+@import url('./components/core/core.less');
15
+
16
+//IMPORT_COMPONENTS
0 17
new file mode 100644
... ...
@@ -0,0 +1,15 @@
1
+@import "./scss/functions";
2
+
3
+$themeColor: #007aff !default;
4
+$colors: ('white': #ffffff, 'black': #000000) !default;
5
+
6
+@font-face {
7
+  font-family: 'swiper-icons';
8
+  src: url("data:application/font-woff;charset=utf-8;base64, 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") format("woff");
9
+  font-weight: 400;
10
+  font-style: normal;
11
+}
12
+
13
+@import "./components/core/core";
14
+
15
+//IMPORT_COMPONENTS
0 16
new file mode 100644
... ...
@@ -0,0 +1,15 @@
1
+import { window } from 'ssr-window';
2
+
3
+const Browser = (function Browser() {
4
+  function isSafari() {
5
+    const ua = window.navigator.userAgent.toLowerCase();
6
+    return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
7
+  }
8
+  return {
9
+    isEdge: !!window.navigator.userAgent.match(/Edge/g),
10
+    isSafari: isSafari(),
11
+    isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
12
+  };
13
+}());
14
+
15
+export default Browser;
0 16
new file mode 100644
... ...
@@ -0,0 +1,173 @@
1
+import Utils from './utils';
2
+
3
+class SwiperClass {
4
+  constructor(params = {}) {
5
+    const self = this;
6
+    self.params = params;
7
+
8
+    // Events
9
+    self.eventsListeners = {};
10
+
11
+    if (self.params && self.params.on) {
12
+      Object.keys(self.params.on).forEach((eventName) => {
13
+        self.on(eventName, self.params.on[eventName]);
14
+      });
15
+    }
16
+  }
17
+
18
+  on(events, handler, priority) {
19
+    const self = this;
20
+    if (typeof handler !== 'function') return self;
21
+    const method = priority ? 'unshift' : 'push';
22
+    events.split(' ').forEach((event) => {
23
+      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
24
+      self.eventsListeners[event][method](handler);
25
+    });
26
+    return self;
27
+  }
28
+
29
+  once(events, handler, priority) {
30
+    const self = this;
31
+    if (typeof handler !== 'function') return self;
32
+    function onceHandler(...args) {
33
+      self.off(events, onceHandler);
34
+      if (onceHandler.f7proxy) {
35
+        delete onceHandler.f7proxy;
36
+      }
37
+      handler.apply(self, args);
38
+    }
39
+    onceHandler.f7proxy = handler;
40
+    return self.on(events, onceHandler, priority);
41
+  }
42
+
43
+  off(events, handler) {
44
+    const self = this;
45
+    if (!self.eventsListeners) return self;
46
+    events.split(' ').forEach((event) => {
47
+      if (typeof handler === 'undefined') {
48
+        self.eventsListeners[event] = [];
49
+      } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
50
+        self.eventsListeners[event].forEach((eventHandler, index) => {
51
+          if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {
52
+            self.eventsListeners[event].splice(index, 1);
53
+          }
54
+        });
55
+      }
56
+    });
57
+    return self;
58
+  }
59
+
60
+  emit(...args) {
61
+    const self = this;
62
+    if (!self.eventsListeners) return self;
63
+    let events;
64
+    let data;
65
+    let context;
66
+    if (typeof args[0] === 'string' || Array.isArray(args[0])) {
67
+      events = args[0];
68
+      data = args.slice(1, args.length);
69
+      context = self;
70
+    } else {
71
+      events = args[0].events;
72
+      data = args[0].data;
73
+      context = args[0].context || self;
74
+    }
75
+    const eventsArray = Array.isArray(events) ? events : events.split(' ');
76
+    eventsArray.forEach((event) => {
77
+      if (self.eventsListeners && self.eventsListeners[event]) {
78
+        const handlers = [];
79
+        self.eventsListeners[event].forEach((eventHandler) => {
80
+          handlers.push(eventHandler);
81
+        });
82
+        handlers.forEach((eventHandler) => {
83
+          eventHandler.apply(context, data);
84
+        });
85
+      }
86
+    });
87
+    return self;
88
+  }
89
+
90
+  useModulesParams(instanceParams) {
91
+    const instance = this;
92
+    if (!instance.modules) return;
93
+    Object.keys(instance.modules).forEach((moduleName) => {
94
+      const module = instance.modules[moduleName];
95
+      // Extend params
96
+      if (module.params) {
97
+        Utils.extend(instanceParams, module.params);
98
+      }
99
+    });
100
+  }
101
+
102
+  useModules(modulesParams = {}) {
103
+    const instance = this;
104
+    if (!instance.modules) return;
105
+    Object.keys(instance.modules).forEach((moduleName) => {
106
+      const module = instance.modules[moduleName];
107
+      const moduleParams = modulesParams[moduleName] || {};
108
+      // Extend instance methods and props
109
+      if (module.instance) {
110
+        Object.keys(module.instance).forEach((modulePropName) => {
111
+          const moduleProp = module.instance[modulePropName];
112
+          if (typeof moduleProp === 'function') {
113
+            instance[modulePropName] = moduleProp.bind(instance);
114
+          } else {
115
+            instance[modulePropName] = moduleProp;
116
+          }
117
+        });
118
+      }
119
+      // Add event listeners
120
+      if (module.on && instance.on) {
121
+        Object.keys(module.on).forEach((moduleEventName) => {
122
+          instance.on(moduleEventName, module.on[moduleEventName]);
123
+        });
124
+      }
125
+
126
+      // Module create callback
127
+      if (module.create) {
128
+        module.create.bind(instance)(moduleParams);
129
+      }
130
+    });
131
+  }
132
+
133
+  static set components(components) {
134
+    const Class = this;
135
+    if (!Class.use) return;
136
+    Class.use(components);
137
+  }
138
+
139
+  static installModule(module, ...params) {
140
+    const Class = this;
141
+    if (!Class.prototype.modules) Class.prototype.modules = {};
142
+    const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`);
143
+    Class.prototype.modules[name] = module;
144
+    // Prototype
145
+    if (module.proto) {
146
+      Object.keys(module.proto).forEach((key) => {
147
+        Class.prototype[key] = module.proto[key];
148
+      });
149
+    }
150
+    // Class
151
+    if (module.static) {
152
+      Object.keys(module.static).forEach((key) => {
153
+        Class[key] = module.static[key];
154
+      });
155
+    }
156
+    // Callback
157
+    if (module.install) {
158
+      module.install.apply(Class, params);
159
+    }
160
+    return Class;
161
+  }
162
+
163
+  static use(module, ...params) {
164
+    const Class = this;
165
+    if (Array.isArray(module)) {
166
+      module.forEach((m) => Class.installModule(m));
167
+      return Class;
168
+    }
169
+    return Class.installModule(module, ...params);
170
+  }
171
+}
172
+
173
+export default SwiperClass;
0 174
new file mode 100644
... ...
@@ -0,0 +1,117 @@
1
+import { window } from 'ssr-window';
2
+import Support from './support';
3
+
4
+const Device = (function Device() {
5
+  const platform = window.navigator.platform;
6
+  const ua = window.navigator.userAgent;
7
+
8
+  const device = {
9
+    ios: false,
10
+    android: false,
11
+    androidChrome: false,
12
+    desktop: false,
13
+    iphone: false,
14
+    ipod: false,
15
+    ipad: false,
16
+    edge: false,
17
+    ie: false,
18
+    firefox: false,
19
+    macos: false,
20
+    windows: false,
21
+    cordova: !!(window.cordova || window.phonegap),
22
+    phonegap: !!(window.cordova || window.phonegap),
23
+    electron: false,
24
+  };
25
+
26
+  const screenWidth = window.screen.width;
27
+  const screenHeight = window.screen.height;
28
+
29
+  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
30
+  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
31
+  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
32
+  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
33
+  const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
34
+  const edge = ua.indexOf('Edge/') >= 0;
35
+  const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;
36
+  const windows = platform === 'Win32';
37
+  const electron = ua.toLowerCase().indexOf('electron') >= 0;
38
+  let macos = platform === 'MacIntel';
39
+
40
+  // iPadOs 13 fix
41
+  if (!ipad
42
+    && macos
43
+    && Support.touch
44
+    && (
45
+      (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9
46
+      || (screenWidth === 834 && screenHeight === 1194) // Pro 11
47
+      || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5
48
+      || (screenWidth === 768 && screenHeight === 1024) // other
49
+    )
50
+  ) {
51
+    ipad = ua.match(/(Version)\/([\d.]+)/);
52
+    macos = false;
53
+  }
54
+
55
+  device.ie = ie;
56
+  device.edge = edge;
57
+  device.firefox = firefox;
58
+
59
+  // Android
60
+  if (android && !windows) {
61
+    device.os = 'android';
62
+    device.osVersion = android[2];
63
+    device.android = true;
64
+    device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
65
+  }
66
+  if (ipad || iphone || ipod) {
67
+    device.os = 'ios';
68
+    device.ios = true;
69
+  }
70
+  // iOS
71
+  if (iphone && !ipod) {
72
+    device.osVersion = iphone[2].replace(/_/g, '.');
73
+    device.iphone = true;
74
+  }
75
+  if (ipad) {
76
+    device.osVersion = ipad[2].replace(/_/g, '.');
77
+    device.ipad = true;
78
+  }
79
+  if (ipod) {
80
+    device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
81
+    device.ipod = true;
82
+  }
83
+  // iOS 8+ changed UA
84
+  if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
85
+    if (device.osVersion.split('.')[0] === '10') {
86
+      device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
87
+    }
88
+  }
89
+
90
+  // Webview
91
+  device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone))
92
+    || (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);
93
+  device.webview = device.webView;
94
+  device.standalone = device.webView;
95
+
96
+  // Desktop
97
+  device.desktop = !(device.ios || device.android) || electron;
98
+  if (device.desktop) {
99
+    device.electron = electron;
100
+    device.macos = macos;
101
+    device.windows = windows;
102
+    if (device.macos) {
103
+      device.os = 'macos';
104
+    }
105
+    if (device.windows) {
106
+      device.os = 'windows';
107
+    }
108
+  }
109
+
110
+  // Pixel Ratio
111
+  device.pixelRatio = window.devicePixelRatio || 1;
112
+
113
+  // Export object
114
+  return device;
115
+}());
116
+
117
+export default Device;
0 118
new file mode 100644
... ...
@@ -0,0 +1,88 @@
1
+import {
2
+  $,
3
+  addClass,
4
+  removeClass,
5
+  hasClass,
6
+  toggleClass,
7
+  attr,
8
+  removeAttr,
9
+  data,
10
+  transform,
11
+  transition,
12
+  on,
13
+  off,
14
+  trigger,
15
+  transitionEnd,
16
+  outerWidth,
17
+  outerHeight,
18
+  offset,
19
+  css,
20
+  each,
21
+  html,
22
+  text,
23
+  is,
24
+  index,
25
+  eq,
26
+  append,
27
+  prepend,
28
+  next,
29
+  nextAll,
30
+  prev,
31
+  prevAll,
32
+  parent,
33
+  parents,
34
+  closest,
35
+  find,
36
+  children,
37
+  filter,
38
+  remove,
39
+  add,
40
+  styles,
41
+} from 'dom7/dist/dom7.modular';
42
+
43
+const Methods = {
44
+  addClass,
45
+  removeClass,
46
+  hasClass,
47
+  toggleClass,
48
+  attr,
49
+  removeAttr,
50
+  data,
51
+  transform,
52
+  transition,
53
+  on,
54
+  off,
55
+  trigger,
56
+  transitionEnd,
57
+  outerWidth,
58
+  outerHeight,
59
+  offset,
60
+  css,
61
+  each,
62
+  html,
63
+  text,
64
+  is,
65
+  index,
66
+  eq,
67
+  append,
68
+  prepend,
69
+  next,
70
+  nextAll,
71
+  prev,
72
+  prevAll,
73
+  parent,
74
+  parents,
75
+  closest,
76
+  find,
77
+  children,
78
+  filter,
79
+  remove,
80
+  add,
81
+  styles,
82
+};
83
+
84
+Object.keys(Methods).forEach((methodName) => {
85
+  $.fn[methodName] = $.fn[methodName] || Methods[methodName];
86
+});
87
+
88
+export default $;
0 89
new file mode 100644
... ...
@@ -0,0 +1,35 @@
1
+import { window, document } from 'ssr-window';
2
+
3
+const Support = (function Support() {
4
+  return {
5
+    touch: !!(('ontouchstart' in window) || (window.DocumentTouch && document instanceof window.DocumentTouch)),
6
+
7
+    pointerEvents: !!window.PointerEvent && ('maxTouchPoints' in window.navigator) && window.navigator.maxTouchPoints >= 0,
8
+
9
+    observer: (function checkObserver() {
10
+      return ('MutationObserver' in window || 'WebkitMutationObserver' in window);
11
+    }()),
12
+
13
+    passiveListener: (function checkPassiveListener() {
14
+      let supportsPassive = false;
15
+      try {
16
+        const opts = Object.defineProperty({}, 'passive', {
17
+          // eslint-disable-next-line
18
+          get() {
19
+            supportsPassive = true;
20
+          },
21
+        });
22
+        window.addEventListener('testPassiveListener', null, opts);
23
+      } catch (e) {
24
+        // No support
25
+      }
26
+      return supportsPassive;
27
+    }()),
28
+
29
+    gestures: (function checkGestures() {
30
+      return 'ongesturestart' in window;
31
+    }()),
32
+  };
33
+}());
34
+
35
+export default Support;
0 36
new file mode 100644
... ...
@@ -0,0 +1,110 @@
1
+import { window } from 'ssr-window';
2
+
3
+const Utils = {
4
+  deleteProps(obj) {
5
+    const object = obj;
6
+    Object.keys(object).forEach((key) => {
7
+      try {
8
+        object[key] = null;
9
+      } catch (e) {
10
+        // no getter for object
11
+      }
12
+      try {
13
+        delete object[key];
14
+      } catch (e) {
15
+        // something got wrong
16
+      }
17
+    });
18
+  },
19
+  nextTick(callback, delay = 0) {
20
+    return setTimeout(callback, delay);
21
+  },
22
+  now() {
23
+    return Date.now();
24
+  },
25
+  getTranslate(el, axis = 'x') {
26
+    let matrix;
27
+    let curTransform;
28
+    let transformMatrix;
29
+
30
+    const curStyle = window.getComputedStyle(el, null);
31
+
32
+    if (window.WebKitCSSMatrix) {
33
+      curTransform = curStyle.transform || curStyle.webkitTransform;
34
+      if (curTransform.split(',').length > 6) {
35
+        curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', ');
36
+      }
37
+      // Some old versions of Webkit choke when 'none' is passed; pass
38
+      // empty string instead in this case
39
+      transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
40
+    } else {
41
+      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
42
+      matrix = transformMatrix.toString().split(',');
43
+    }
44
+
45
+    if (axis === 'x') {
46
+      // Latest Chrome and webkits Fix
47
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
48
+      // Crazy IE10 Matrix
49
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
50
+      // Normal Browsers
51
+      else curTransform = parseFloat(matrix[4]);
52
+    }
53
+    if (axis === 'y') {
54
+      // Latest Chrome and webkits Fix
55
+      if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
56
+      // Crazy IE10 Matrix
57
+      else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
58
+      // Normal Browsers
59
+      else curTransform = parseFloat(matrix[5]);
60
+    }
61
+    return curTransform || 0;
62
+  },
63
+  parseUrlQuery(url) {
64
+    const query = {};
65
+    let urlToParse = url || window.location.href;
66
+    let i;
67
+    let params;
68
+    let param;
69
+    let length;
70
+    if (typeof urlToParse === 'string' && urlToParse.length) {
71
+      urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
72
+      params = urlToParse.split('&').filter((paramsPart) => paramsPart !== '');
73
+      length = params.length;
74
+
75
+      for (i = 0; i < length; i += 1) {
76
+        param = params[i].replace(/#\S+/g, '').split('=');
77
+        query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
78
+      }
79
+    }
80
+    return query;
81
+  },
82
+  isObject(o) {
83
+    return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
84
+  },
85
+  extend(...args) {
86
+    const to = Object(args[0]);
87
+    for (let i = 1; i < args.length; i += 1) {
88
+      const nextSource = args[i];
89
+      if (nextSource !== undefined && nextSource !== null) {
90
+        const keysArray = Object.keys(Object(nextSource));
91
+        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
92
+          const nextKey = keysArray[nextIndex];
93
+          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
94
+          if (desc !== undefined && desc.enumerable) {
95
+            if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
96
+              Utils.extend(to[nextKey], nextSource[nextKey]);
97
+            } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
98
+              to[nextKey] = {};
99
+              Utils.extend(to[nextKey], nextSource[nextKey]);
100
+            } else {
101
+              to[nextKey] = nextSource[nextKey];
102
+            }
103
+          }
104
+        }
105
+      }
106
+    }
107
+    return to;
108
+  },
109
+};
110
+export default Utils;
0 111
new file mode 100644
... ...
@@ -0,0 +1,16 @@
1
+@import url('./less/mixins.less');
2
+
3
+@themeColor: #007aff;
4
+@colors: white #ffffff, black #000000;
5
+
6
+@font-face {
7
+  @fontBase64: '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';
8
+  font-family: 'swiper-icons';
9
+  src: url("data:application/font-woff;charset=utf-8;base64, @{fontBase64}") format("woff");
10
+  font-weight: 400;
11
+  font-style: normal;
12
+}
13
+
14
+@import url('./components/core/core.less');
15
+
16
+//IMPORT_COMPONENTS
0 17
new file mode 100644
... ...
@@ -0,0 +1,15 @@
1
+@import "./scss/functions";
2
+
3
+$themeColor: #007aff !default;
4
+$colors: ('white': #ffffff, 'black': #000000) !default;
5
+
6
+@font-face {
7
+  font-family: 'swiper-icons';
8
+  src: url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA") format("woff");
9
+  font-weight: 400;
10
+  font-style: normal;
11
+}
12
+
13
+@import "./components/core/core";
14
+
15
+//IMPORT_COMPONENTS
0 16
new file mode 100644
... ...
@@ -0,0 +1,28 @@
1
+{
2
+  "name":"esalesmedia/contao-swiperjs-slider",
3
+  "description":"Versatile Slider with a bunch of options",
4
+  "keywords":["contao", "slider", "swiper", "swiperjs", "swiperjs-slider", "swiper-slider", "hero"],
5
+  "type":"contao-module",
6
+  "license":"LGPL-3.0+",
7
+  "authors":[
8
+    {
9
+      "name": "Benjamin Roth",
10
+      "homepage": "https://www.esales-media.de"
11
+    }
12
+  ],
13
+  "require":{
14
+    "php": "^5.6 || ^7.0",
15
+    "contao/core-bundle": "^4.4"
16
+  },
17
+  "conflict": {
18
+    "contao/core": "*",
19
+    "contao/manager-plugin": "<2.0 || >=3.0"
20
+  },
21
+  "extra":{
22
+    "contao": {
23
+      "sources":{
24
+        "": "system/modules/eSM_swiper"
25
+      }
26
+    }
27
+  }
28
+}
0 29
\ No newline at end of file
1 30
new file mode 100644
... ...
@@ -0,0 +1,7 @@
1
+
2
+;;
3
+; Configure what you want the autoload creator to register
4
+;;
5
+register_namespaces = true
6
+register_classes    = true
7
+register_templates  = true
0 8
\ No newline at end of file
1 9
new file mode 100644
... ...
@@ -0,0 +1,46 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+/**
13
+ * Register the namespaces
14
+ */
15
+ClassLoader::addNamespaces(array
16
+(
17
+	'eSM_swiper',
18
+));
19
+
20
+
21
+/**
22
+ * Register the classes
23
+ */
24
+ClassLoader::addClasses(array
25
+(
26
+	// Elements
27
+	'eSM_swiper\ContentSwiperSliderStart' => 'system/modules/eSM_swiper/elements/ContentSwiperSliderStart.php',
28
+	'eSM_swiper\ContentSwiperSliderStop' => 'system/modules/eSM_swiper/elements/ContentSwiperSliderStop.php',
29
+	'eSM_swiper\ContentSwiperSliderSlideStart'  => 'system/modules/eSM_swiper/elements/ContentSwiperSliderSlideStart.php',
30
+	'eSM_swiper\ContentSwiperSliderSlideStop'   => 'system/modules/eSM_swiper/elements/ContentSwiperSliderSlideStop.php',
31
+	'eSM_swiper\ContentSwiperSliderImage'       => 'system/modules/eSM_swiper/elements/ContentSwiperSliderImage.php',
32
+));
33
+
34
+
35
+/**
36
+ * Register the templates
37
+ */
38
+TemplateLoader::addFiles(array
39
+(
40
+	'js_swiper'              => 'system/modules/eSM_swiper/templates/widgets',
41
+	'ce_swiper_slider_start'      => 'system/modules/eSM_swiper/templates/elements',
42
+	'ce_swiper_slider_stop'       => 'system/modules/eSM_swiper/templates/elements',
43
+	'slide_start_default'        => 'system/modules/eSM_swiper/templates/slides',
44
+	'slide_stop_default'         => 'system/modules/eSM_swiper/templates/slides',
45
+	'ce_swiper_slider_image'      => 'system/modules/eSM_swiper/templates/elements',
46
+));
0 47
new file mode 100644
... ...
@@ -0,0 +1,36 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+/**
13
+ * Asset version
14
+ */
15
+$GLOBALS['TL_ASSETS']['SWIPERJS'] = '5.4.0';
16
+
17
+/**
18
+ * Content elements
19
+ */
20
+$GLOBALS['TL_CTE']['swiperSlider'] = array
21
+(
22
+  'swiperSliderStart'     => 'ContentSwiperSliderStart',
23
+  'swiperSliderStop'      => 'ContentSwiperSliderStop',
24
+  'swiperSliderSlideStart'=> 'ContentSwiperSliderSlideStart',
25
+  'swiperSliderSlideStop' => 'ContentSwiperSliderSlideStop',
26
+  'swiperSliderImage'     => 'ContentSwiperSliderImage'
27
+);
28
+
29
+/**
30
+ * Wrapper elements
31
+ */
32
+
33
+$GLOBALS['TL_WRAPPERS']['start'][] = 'swiperSliderStart';
34
+$GLOBALS['TL_WRAPPERS']['stop'][] = 'swiperSliderStop';
35
+$GLOBALS['TL_WRAPPERS']['start'][] = 'swiperSliderSlideStart';
36
+$GLOBALS['TL_WRAPPERS']['stop'][] = 'swiperSliderImage';
0 37
new file mode 100644
... ...
@@ -0,0 +1,413 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+/**
13
+ * Table tl_content
14
+ */
15
+
16
+/**
17
+ * Add callback
18
+ */
19
+$GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('tl_content_eSM_slider', 'showJsLibraryHint');
20
+$GLOBALS['TL_DCA']['tl_content']['config']['onsubmit_callback'][] = array('tl_content_eSM_slider', 'insertEndElement');
21
+
22
+/**
23
+ * Add palettes to tl_content
24
+ */
25
+$GLOBALS['TL_DCA']['tl_content']['palettes']['__selector__'][] = 'eSM_addImage';
26
+$GLOBALS['TL_DCA']['tl_content']['palettes']['__selector__'][] = 'eSM_addText';
27
+$GLOBALS['TL_DCA']['tl_content']['palettes']['__selector__'][] = 'eSM_slider_addImageLink';
28
+$GLOBALS['TL_DCA']['tl_content']['palettes']['swiperSliderStart'] = '{type_legend},type;{swiper_legend},eSM_slider_autoPlaySpeed,eSM_slider_speed,eSM_slider_initialSlide,eSM_slider_preload,eSM_slider_slidesToShow,eSM_slider_slidesToScroll,eSM_slider_infinite,eSM_slider_arrows,eSM_slider_pagination,eSM_slider_stopOnInteraction,eSM_slider_fade,eSM_slider_adaptiveHeight;{image_legend},eSM_addImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
29
+$GLOBALS['TL_DCA']['tl_content']['palettes']['swiperSliderStop'] = '{type_legend},type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop';
30
+$GLOBALS['TL_DCA']['tl_content']['palettes']['swiperSliderSlideStart'] = '{type_legend},type;{swiper_legend},eSM_addImage;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
31
+$GLOBALS['TL_DCA']['tl_content']['palettes']['swiperSliderSlideStop'] = '{type_legend},type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests;{invisible_legend:hide},invisible,start,stop';
32
+$GLOBALS['TL_DCA']['tl_content']['palettes']['swiperSliderImage'] = '{type_legend},type;{swiper_legend},multiSRC,size,eSM_slider_bgSize,eSM_slider_bgPosition,eSM_slider_minHeight,eSM_slider_bgOpacity,eSM_slider_bgRepeat,eSM_slider_addImageLink,eSM_addText;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space;{invisible_legend:hide},invisible,start,stop';
33
+
34
+
35
+$GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_addImage'] = 'multiSRC,size,eSM_slider_bgSize,eSM_slider_bgPosition,eSM_slider_minHeight,eSM_slider_bgOpacity,eSM_slider_bgRepeat';
36
+$GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_addText'] = 'eSM_slider_text,eSM_slider_url';
37
+$GLOBALS['TL_DCA']['tl_content']['subpalettes']['eSM_slider_addImageLink'] = 'imageUrl,fullsize';
38
+
39
+/**
40
+ * Add fields to tl_content
41
+ */
42
+
43
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_autoPlaySpeed'] = array
44
+(
45
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_autoPlaySpeed'],
46
+  'exclude'                 => true,
47
+  'inputType'               => 'text',
48
+  'eval'                    => array('tl_class'=>'w50','rgxp'=>'digit'),
49
+  'sql'                     => "int(10) unsigned NOT NULL default '0'"
50
+);
51
+
52
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_speed'] = array
53
+(
54
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_speed'],
55
+  'exclude'                 => true,
56
+  'inputType'               => 'text',
57
+  'default'                 => '500',
58
+  'eval'                    => array('tl_class'=>'w50','rgxp'=>'digit'),
59
+  'sql'                     => "int(10) unsigned NOT NULL default '0'"
60
+);
61
+
62
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_initialSlide'] = array
63
+(
64
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_initialSlide'],
65
+  'exclude'                 => true,
66
+  'inputType'               => 'text',
67
+  'eval'                    => array('tl_class'=>'w50','rgxp'=>'digit'),
68
+  'sql'                     => "int(10) unsigned NOT NULL default '0'"
69
+);
70
+
71
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_slidesToShow'] = array
72
+(
73
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToShow'],
74
+  'exclude'                 => true,
75
+  'inputType'               => 'text',
76
+  'eval'                    => array('rgxp'=>'natural','minval'=>1,'tl_class'=>'w50'),
77
+  'sql'                     => "int(10) unsigned NOT NULL default '1'"
78
+);
79
+
80
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_slidesToScroll'] = array
81
+(
82
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToScroll'],
83
+  'exclude'                 => true,
84
+  'inputType'               => 'text',
85
+  'eval'                    => array('rgxp'=>'natural','minval'=>1,'tl_class'=>'w50'),
86
+  'sql'                     => "int(10) unsigned NOT NULL default '1'"
87
+);
88
+
89
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_infinite'] = array
90
+(
91
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_infinite'],
92
+  'exclude'                 => true,
93
+  'inputType'               => 'checkbox',
94
+  'eval'                    => array('tl_class'=>'w50 m12'),
95
+  'sql'                     => "char(1) NOT NULL default ''"
96
+);
97
+
98
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_arrows'] = array
99
+(
100
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_arrows'],
101
+  'exclude'                 => true,
102
+  'inputType'               => 'checkbox',
103
+  'eval'                    => array('tl_class'=>'w50 m12'),
104
+  'sql'                     => "char(1) NOT NULL default ''"
105
+);
106
+
107
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_pagination'] = array
108
+(
109
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_pagination'],
110
+  'exclude'                 => true,
111
+  'inputType'               => 'checkbox',
112
+  'eval'                    => array('tl_class'=>'w50 m12'),
113
+  'sql'                     => "char(1) NOT NULL default ''"
114
+);
115
+
116
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_stopOnInteraction'] = array
117
+(
118
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_stopOnInteraction'],
119
+  'exclude'                 => true,
120
+  'inputType'               => 'checkbox',
121
+  'eval'                    => array('tl_class'=>'w50 m12'),
122
+  'sql'                     => "char(1) NOT NULL default ''"
123
+);
124
+
125
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_preload'] = array
126
+(
127
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_preload'],
128
+  'exclude'                 => true,
129
+  'inputType'               => 'checkbox',
130
+  'eval'                    => array('tl_class'=>'w50 m12'),
131
+  'sql'                     => "char(1) NOT NULL default '1'"
132
+);
133
+
134
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_fade'] = array
135
+(
136
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_fade'],
137
+  'exclude'                 => true,
138
+  'inputType'               => 'checkbox',
139
+  'eval'                    => array('tl_class'=>'w50 m12'),
140
+  'sql'                     => "char(1) NOT NULL default ''"
141
+);
142
+
143
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_adaptiveHeight'] = array
144
+(
145
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_adaptiveHeight'],
146
+  'exclude'                 => true,
147
+  'inputType'               => 'checkbox',
148
+  'eval'                    => array('tl_class'=>'w50 m12'),
149
+  'sql'                     => "char(1) NOT NULL default ''"
150
+);
151
+
152
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_text'] = array
153
+(
154
+    'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_text'],
155
+    'exclude'                 => true,
156
+    'inputType'               => 'textarea',
157
+    'eval'                    => array('rows'=>2,'style'=>'height: 2em;', 'maxlength'=>64),
158
+    'sql'                     => "varchar(64) NOT NULL default ''"
159
+);
160
+
161
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_url'] = array
162
+(
163
+    'label'                   => &$GLOBALS['TL_LANG']['MSC']['url'],
164
+    'exclude'                 => true,
165
+    'inputType'               => 'text',
166
+    'eval'                    => array('rgxp'=>'url', 'decodeEntities'=>true, 'maxlength'=>255, 'fieldType'=>'radio', 'filesOnly'=>true, 'tl_class'=>'w50 wizard'),
167
+    'wizard' => array
168
+    (
169
+        array('tl_content', 'pagePicker')
170
+    ),
171
+    'sql'                     => "varchar(255) NOT NULL default ''"
172
+);
173
+
174
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_addImage'] = array
175
+(
176
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['addImage'],
177
+  'exclude'                 => true,
178
+  'inputType'               => 'checkbox',
179
+  'eval'                    => array('submitOnChange'=>true),
180
+  'sql'                     => "char(1) NOT NULL default ''"
181
+);
182
+
183
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_addText'] = array
184
+(
185
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_addText'],
186
+  'exclude'                 => true,
187
+  'inputType'               => 'checkbox',
188
+  'eval'                    => array('tl_class'=>'clr', 'submitOnChange'=>true),
189
+  'sql'                     => "char(1) NOT NULL default ''"
190
+);
191
+
192
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_minHeight'] = array
193
+(
194
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_minHeight'],
195
+  'exclude'                 => true,
196
+  'inputType'               => 'checkbox',
197
+  'eval'                    => array('tl_class'=>'w50 m12'),
198
+  'sql'                     => "char(1) NOT NULL default ''"
199
+);
200
+
201
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_addImageLink'] = array
202
+(
203
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_addImageLink'],
204
+  'exclude'                 => true,
205
+  'inputType'               => 'checkbox',
206
+  'eval'                    => array('tl_class'=>'clr w50','submitOnChange'=>true),
207
+  'sql'                     => "char(1) NOT NULL default ''"
208
+);
209
+
210
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_bgPosition'] = array
211
+(
212
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgPosition'],
213
+  'exclude'                 => true,
214
+  'inputType'               => 'select',
215
+  'options'                 => array
216
+  (
217
+    '0 0' => 'Links | Oben',
218
+    '50% 0' => 'Mitte | Oben',
219
+    '100% 0' => 'Rechts | Oben',
220
+    '0 50%' => 'Links | Mitte',
221
+    '50% 50%' => 'Mitte | Mitte',
222
+    '100% 50%' => 'Rechts | Mitte',
223
+    '0 100%' => 'Links | Unten',
224
+    '50% 100%' => 'Mitte | Unten',
225
+    '100% 100%' => 'Rechts | Unten',
226
+  ),
227
+  'eval'                    => array('tl_class' => 'w50','includeBlankOption'=>true),
228
+  'sql'                     => "varchar(16) NOT NULL default ''"
229
+);
230
+
231
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_bgSize'] = array
232
+(
233
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgSize'],
234
+  'exclude'                 => true,
235
+  'inputType'               => 'select',
236
+  'options'                 => array
237
+  (
238
+    'contain' => 'Proportional',
239
+    '100% 100%' => 'Verzerrt',
240
+    'auto auto' => 'Originalgröße',
241
+  ),
242
+  'eval'                    => array('tl_class' => 'w50','includeBlankOption'=>true,'blankOptionLabel'=>'Beschnitten'),
243
+  'sql'                     => "varchar(16) NOT NULL default ''"
244
+);
245
+
246
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_bgRepeat'] = array
247
+(
248
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgRepeat'],
249
+  'exclude'                 => true,
250
+  'inputType'               => 'select',
251
+  'options'                 => array
252
+  (
253
+    'repeat-x' => 'Horizontal wiederholen',
254
+    'repeat-y' => 'Vertikal wiedeholen',
255
+    'no-repeat' => 'Nicht wiederholen',
256
+  ),
257
+  'eval'                    => array('tl_class' => 'w50','includeBlankOption'=>true,'blankOptionLabel'=>'Wiederholen'),
258
+  'sql'                     => "varchar(16) NOT NULL default ''"
259
+);
260
+
261
+$GLOBALS['TL_DCA']['tl_content']['fields']['eSM_slider_bgOpacity'] = array
262
+(
263
+  'label'                   => &$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgOpacity'],
264
+  'exclude'                 => true,
265
+  'inputType'               => 'select',
266
+  'options'                 => array
267
+  (
268
+    '10' => '10%',
269
+    '20' => '20%',
270
+    '30' => '30%',
271
+    '40' => '40%',
272
+    '50' => '50%',
273
+    '60' => '60%',
274
+    '70' => '70%',
275
+    '80' => '80%',
276
+    '90' => '90%',
277
+    '100' => '100%',
278
+  ),
279
+  'eval'                    => array('tl_class' => 'w50','includeBlankOption'=>true),
280
+  'sql'                     => "varchar(16) NOT NULL default ''"
281
+);
282
+
283
+$GLOBALS['TL_DCA']['tl_content']['fields']['multiSRC']['load_callback'][] = array('tl_content_eSM_slider', 'setMultiSrcFlags');
284
+
285
+
286
+class tl_content_eSM_slider extends Backend
287
+{
288
+
289
+  /**
290
+   * Import the back end user object
291
+   */
292
+  public function __construct()
293
+  {
294
+    parent::__construct();
295
+    $this->import('BackendUser', 'User');
296
+  }
297
+
298
+  /**
299
+   * Show a hint if a JavaScript library needs to be included in the page layout
300
+   *
301
+   * @param object
302
+   */
303
+  public function showJsLibraryHint($dc)
304
+  {
305
+    if ($_POST || Input::get('act') != 'edit')
306
+    {
307
+      return;
308
+    }
309
+
310
+    // Return if the user cannot access the layout module (see #6190)
311
+    if (!$this->User->hasAccess('themes', 'modules') || !$this->User->hasAccess('layout', 'themes'))
312
+    {
313
+      return;
314
+    }
315
+
316
+    $objCte = ContentModel::findByPk($dc->id);
317
+
318
+    if ($objCte === null)
319
+    {
320
+      return;
321
+    }
322
+
323
+    switch ($objCte->type)
324
+    {
325
+      case 'swiperSliderStart':
326
+      case 'swiperSliderStop':
327
+      case 'swiperSliderSlideStart':
328
+      case 'swiperSliderSlideStop':
329
+      case 'swiperSliderImage':
330
+        Message::addInfo(sprintf($GLOBALS['TL_LANG']['tl_content']['includeTemplatesJQuery'], 'js_swiper'));
331
+        break;
332
+    }
333
+  }
334
+
335
+  /**
336
+   * Automatically insert end element if start element ist about to be added
337
+   *
338
+   * @param DataContainer $dc
339
+   */
340
+  public function insertEndElement(\DataContainer $dc)
341
+  {
342
+    $activeRecord = $dc->activeRecord;
343
+    if (!$activeRecord) {
344
+      return;
345
+    }
346
+
347
+    if ($activeRecord->type === 'swiperSliderStart' || $activeRecord->type === 'swiperSliderSlideStart') {
348
+
349
+      // Find the next wrapper element
350
+      $nextElement = \Database::getInstance()
351
+        ->prepare("
352
+					SELECT type
353
+					FROM tl_content
354
+					WHERE pid = ?
355
+						AND (ptable = ? OR ptable = ?)
356
+            AND type IN ('swiperSliderSlideStart', 'swiperSliderSlideStop','swiperSliderStart', 'swiperSliderStop')
357
+						AND sorting > ?
358
+					ORDER BY sorting ASC
359
+					LIMIT 1
360
+				")
361
+        ->execute(
362
+          $activeRecord->pid,
363
+          $activeRecord->ptable ?: 'tl_article',
364
+          $activeRecord->ptable === 'tl_article' ? '' : $activeRecord->ptable,
365
+          $activeRecord->sorting
366
+        );
367
+
368
+      // Check if a stop element should be created
369
+      if (
370
+        !$nextElement->type
371
+        || ($activeRecord->type === 'swiperSliderStart' && ($nextElement->type === 'swiperSliderStart'))
372
+        || ($activeRecord->type === 'swiperSliderSlideStart' && ($nextElement->type === 'swiperSliderSlideStart' || $nextElement->type === 'swiperSliderStart' || $nextElement->type === 'swiperSliderStop'))
373
+      ) {
374
+        \Database::getInstance()
375
+          ->prepare('INSERT INTO tl_content %s')
376
+          ->set(array(
377
+            'pid' => $activeRecord->pid,
378
+            'ptable' => $activeRecord->ptable ?: 'tl_article',
379
+            'type' => substr($activeRecord->type, 0, -5) . 'Stop',
380
+            'sorting' => $activeRecord->sorting + 1,
381
+            'tstamp' => time(),
382
+          ))
383
+          ->execute();
384
+      }
385
+
386
+    }
387
+  }
388
+
389
+  /**
390
+   * Dynamically add flags to the "multiSRC" field
391
+   *
392
+   * @param mixed                $varValue
393
+   * @param Contao\DataContainer $dc
394
+   *
395
+   * @return mixed
396
+   */
397
+  public function setMultiSrcFlags($varValue, Contao\DataContainer $dc)
398
+  {
399
+    if ($dc->activeRecord)
400
+    {
401
+      switch ($dc->activeRecord->type)
402
+      {
403
+        case 'swiperSliderStart':
404
+        case 'swiperSliderSlideStart':
405
+        case 'swiperSliderImage':
406
+          $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['isGallery'] = true;
407
+          $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Contao\Config::get('validImageTypes').'mp4,ogv,webm,mov';
408
+          break;
409
+      }
410
+    }
411
+    return $varValue;
412
+  }
413
+}
0 414
\ No newline at end of file
1 415
new file mode 100644
... ...
@@ -0,0 +1,199 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+namespace eSM_swiper;
12
+
13
+/**
14
+ * Front end content element swiper image slide.
15
+ */
16
+class ContentSwiperSliderImage extends \ContentElement
17
+{
18
+
19
+	/**
20
+	 * Template
21
+	 * @var string
22
+	 */
23
+	protected $strTemplate = 'ce_swiper_slider_image';
24
+
25
+  /**
26
+   * @return string
27
+   */
28
+  public function generate()
29
+  {
30
+    if (TL_MODE == 'BE')
31
+    {
32
+      $return = '';
33
+
34
+      if ($this->multiSRC)
35
+      {
36
+
37
+        $source = \StringUtil::deserialize($this->multiSRC);
38
+        $objFiles = \FilesModel::findMultipleByUuids($source);
39
+
40
+        if ($objFiles !== null)
41
+        {
42
+          foreach ($objFiles as $file)
43
+          {
44
+            if (is_file(TL_ROOT . '/' . $file->path))
45
+            {
46
+              if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
47
+              {
48
+                $src = \System::getContainer()->get('contao.image.image_factory')->create(TL_ROOT . '/' . $file->path, array(66, 55, 'crop'))->getUrl(TL_ROOT);
49
+                $return .= '<img src="' . $src . '">'."\n";
50
+              } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg')))) {
51
+                $return .= '<span>'.$GLOBALS['TL_LANG']['tl_content']['singleSRC'][0].': <a href="'.$file->path.'" target="_blank">'.$file->name.'</a></span>'."\n";
52
+              }
53
+            }
54
+          }
55
+        }
56
+      }
57
+
58
+      return $return;
59
+    }
60
+
61
+    $parentKey = ($this->arrData['ptable'] ?: 'tl_article') . '__' . $this->arrData['pid'];
62
+
63
+    if (isset($GLOBALS['TL_ESM_SLICK'][$parentKey]))
64
+    {
65
+      $this->arrData['parentSlickId'] = $GLOBALS['TL_ESM_SLICK'][$parentKey];
66
+    } else {
67
+      $this->arrData['parentSlickId'] = 0;
68
+    }
69
+
70
+
71
+    return parent::generate();
72
+  }
73
+
74
+  /**
75
+   * Generate the content element
76
+   */
77
+  protected function compile()
78
+  {
79
+    if (TL_MODE == 'BE')
80
+    {
81
+      $this->strTemplate = 'be_wildcard';
82
+
83
+      /** @var \BackendTemplate|object $objTemplate */
84
+      $objTemplate = new \BackendTemplate($this->strTemplate);
85
+
86
+      $this->Template = $objTemplate;
87
+    }
88
+
89
+    if ($this->multiSRC)
90
+    {
91
+
92
+      $source = \StringUtil::deserialize($this->multiSRC);
93
+      $objFiles = \FilesModel::findMultipleByUuids($source);
94
+
95
+      $imageFiles = array();
96
+      $videoFiles = array();
97
+
98
+      if ($objFiles !== null) {
99
+
100
+        foreach ($objFiles as $file) {
101
+          if (is_file(TL_ROOT . '/' . $file->path))
102
+          {
103
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
104
+            {
105
+              $imageFiles[] = $file;
106
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
107
+            {
108
+              $videoFiles[] = $file;
109
+            }
110
+          }
111
+        }
112
+      }
113
+
114
+      if (isset($imageFiles[0]))
115
+      {
116
+        $this->singleSRC = $imageFiles[0]->path;
117
+
118
+        $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size));
119
+
120
+        $backgroundStyle = '';
121
+
122
+        if ($this->eSM_slider_minHeight) {
123
+          if ($this->eSM_slider_bgSize && $this->eSM_slider_bgSize == 'auto auto') {
124
+            $minHeight = $this->Template->picture['img']['height'] . 'px';
125
+          } else
126
+          {
127
+            $minHeight = round($this->Template->picture['img']['height'] / $this->Template->picture['img']['width'] * 100) . '%';
128
+          }
129
+          $backgroundStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }';
130
+        }
131
+
132
+
133
+        $backgroundStyle .= '.slide_'.$this->id.' .swiper-slide-image { background-image: url(\''.$this->Template->src.'\');';
134
+
135
+        if ($this->eSM_slider_bgSize) {
136
+          $backgroundStyle .= 'background-size: ' . $this->eSM_slider_bgSize . ';';
137
+        } else {
138
+          $backgroundStyle .= 'background-size: cover;';
139
+        }
140
+        if ($this->eSM_slider_bgPosition) {
141
+          $backgroundStyle .= 'background-position: ' . $this->eSM_slider_bgPosition . ';';
142
+        } else {
143
+          $backgroundStyle .= 'background-position: 0 0;';
144
+        }
145
+        if ($this->eSM_slider_bgOpacity) {
146
+          $backgroundStyle .= 'opacity:' . $this->eSM_slider_bgOpacity/100 . ';';
147
+        }
148
+        if ($this->eSM_slider_bgRepeat) {
149
+          $backgroundStyle .= 'background-repeat: ' . $this->eSM_slider_bgRepeat . ';';
150
+        }
151
+
152
+        $this->Template->backgroundStyle = $backgroundStyle.' }';
153
+
154
+        // Responsive handling
155
+        if ($this->Template->picture['sources'] && is_array($this->Template->picture['sources']))
156
+        {
157
+          $backgroundStyleResponsive = '';
158
+          foreach ($this->Template->picture['sources'] as $srcSet)
159
+          {
160
+            $srcSetStyle = '.slide_'.$this->id.' .swiper-slide-image { background-image: url(\''.$srcSet['src'].'\'); }';
161
+
162
+            if ($this->eSM_slider_minHeight) {
163
+              if ($this->eSM_slider_bgSize && $this->eSM_slider_bgSize == 'auto auto') {
164
+                $minHeight = $srcSet['height'] . 'px';
165
+              } else
166
+              {
167
+                $minHeight = round($srcSet['height'] / $srcSet['width'] * 100) . '%';
168
+              }
169
+              $srcSetStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }';
170
+            }
171
+
172
+            $backgroundStyleResponsive .= '@media screen and '.$srcSet['media'].' { '.$srcSetStyle.' }';
173
+          }
174
+          $this->Template->backgroundStyleResponsive = $backgroundStyleResponsive;
175
+        }
176
+
177
+      }
178
+
179
+      if (count($videoFiles)) {
180
+        $this->Template->videoFiles = $videoFiles;
181
+      }
182
+    }
183
+
184
+    if ($this->eSM_slider_addImageLink)
185
+    {
186
+      $this->Template->lightboxId = 'image_slide_' . ($this->parentSlickId ?: 's'.$this->id);
187
+      $this->Template->fullsize = $this->fullsize;
188
+      $this->Template->imageLink = ($this->imageUrl ?: $this->singleSRC);
189
+    }
190
+
191
+    if ($this->eSM_addText)
192
+    {
193
+      $this->Template->text = nl2br($this->eSM_slider_text);
194
+      $this->Template->link = $this->eSM_slider_url;
195
+    }
196
+
197
+  }
198
+
199
+}
0 200
new file mode 100644
... ...
@@ -0,0 +1,138 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+namespace eSM_swiper;
12
+
13
+
14
+/**
15
+ * Front end content element swiper slide start.
16
+ */
17
+class ContentSwiperSliderSlideStart extends \ContentElement
18
+{
19
+
20
+	/**
21
+	 * Template
22
+	 * @var string
23
+	 */
24
+	protected $strTemplate = 'slide_start_default';
25
+
26
+
27
+	/**
28
+	 * Generate the content element
29
+	 */
30
+	protected function compile()
31
+	{
32
+		if (TL_MODE == 'BE')
33
+		{
34
+			$this->strTemplate = 'be_wildcard';
35
+
36
+			/** @var \BackendTemplate|object $objTemplate */
37
+			$objTemplate = new \BackendTemplate($this->strTemplate);
38
+
39
+			$this->Template = $objTemplate;
40
+		}
41
+
42
+    if ($this->eSM_addImage && $this->multiSRC)
43
+    {
44
+
45
+      $source = \StringUtil::deserialize($this->multiSRC);
46
+      $objFiles = \FilesModel::findMultipleByUuids($source);
47
+
48
+      $imageFiles = array();
49
+      $videoFiles = array();
50
+
51
+      if ($objFiles !== null) {
52
+
53
+        foreach ($objFiles as $file) {
54
+          if (is_file(TL_ROOT . '/' . $file->path))
55
+          {
56
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
57
+            {
58
+              $imageFiles[] = $file;
59
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
60
+            {
61
+              $videoFiles[] = $file;
62
+            }
63
+          }
64
+        }
65
+      }
66
+
67
+      if (isset($imageFiles[0]))
68
+      {
69
+        $this->singleSRC = $imageFiles[0]->path;
70
+
71
+        $this->addImageToTemplate($this->Template, array('singleSRC'=>$this->singleSRC, 'size'=>$this->size));
72
+
73
+        $backgroundStyle = '';
74
+
75
+        if ($this->eSM_slider_minHeight) {
76
+          if ($this->eSM_slider_bgSize && $this->eSM_slider_bgSize == 'auto auto') {
77
+            $minHeight = $this->Template->picture['img']['height'] . 'px';
78
+          } else
79
+          {
80
+            $minHeight = round($this->Template->picture['img']['height'] / $this->Template->picture['img']['width'] * 100) . '%';
81
+          }
82
+          $backgroundStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }';
83
+        }
84
+
85
+
86
+        $backgroundStyle .= '.slide_'.$this->id.' .swiper-background { background-image: url(\''.$this->Template->src.'\');';
87
+
88
+        if ($this->eSM_slider_bgSize) {
89
+          $backgroundStyle .= 'background-size: ' . $this->eSM_slider_bgSize . ';';
90
+        } else {
91
+          $backgroundStyle .= 'background-size: cover;';
92
+        }
93
+        if ($this->eSM_slider_bgPosition) {
94
+          $backgroundStyle .= 'background-position: ' . $this->eSM_slider_bgPosition . ';';
95
+        } else {
96
+          $backgroundStyle .= 'background-position: 0 0;';
97
+        }
98
+        if ($this->eSM_slider_bgOpacity) {
99
+          $backgroundStyle .= 'opacity:' . $this->eSM_slider_bgOpacity/100 . ';';
100
+        }
101
+        if ($this->eSM_slider_bgRepeat) {
102
+          $backgroundStyle .= 'background-repeat: ' . $this->eSM_slider_bgRepeat . ';';
103
+        }
104
+
105
+        $this->Template->backgroundStyle = $backgroundStyle.' }';
106
+
107
+        // Responsive handling
108
+        if ($this->Template->picture['sources'] && is_array($this->Template->picture['sources']))
109
+        {
110
+          $backgroundStyleResponsive = '';
111
+          foreach ($this->Template->picture['sources'] as $srcSet)
112
+          {
113
+            $srcSetStyle = '.slide_'.$this->id.' .swiper-slide-image { background-image: url(\''.$srcSet['src'].'\'); }';
114
+
115
+            if ($this->eSM_slider_minHeight) {
116
+              if ($this->eSM_slider_bgSize && $this->eSM_slider_bgSize == 'auto auto') {
117
+                $minHeight = $srcSet['height'] . 'px';
118
+              } else
119
+              {
120
+                $minHeight = round($srcSet['height'] / $srcSet['width'] * 100) . '%';
121
+              }
122
+              $srcSetStyle .= '.slide_'.$this->id.':before { content: ""; display: block; float: left; padding-top: '.$minHeight.'; }';
123
+            }
124
+
125
+            $backgroundStyleResponsive .= '@media screen and '.$srcSet['media'].' { '.$srcSetStyle.' }';
126
+          }
127
+          $this->Template->backgroundStyleResponsive = $backgroundStyleResponsive;
128
+        }
129
+
130
+      }
131
+
132
+      if (count($videoFiles)) {
133
+        $this->Template->videoFiles = $videoFiles;
134
+      }
135
+    }
136
+
137
+  }
138
+}
0 139
new file mode 100644
... ...
@@ -0,0 +1,42 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+namespace eSM_swiper;
12
+
13
+
14
+/**
15
+ * Front end content element swiper slide end.
16
+ */
17
+class ContentSwiperSliderSlideStop extends \ContentElement
18
+{
19
+
20
+	/**
21
+	 * Template
22
+	 * @var string
23
+	 */
24
+	protected $strTemplate = 'slide_stop_default';
25
+
26
+
27
+	/**
28
+	 * Generate the content element
29
+	 */
30
+	protected function compile()
31
+	{
32
+		if (TL_MODE == 'BE')
33
+		{
34
+			$this->strTemplate = 'be_wildcard';
35
+
36
+			/** @var \BackendTemplate|object $objTemplate */
37
+			$objTemplate = new \BackendTemplate($this->strTemplate);
38
+
39
+			$this->Template = $objTemplate;
40
+		}
41
+	}
42
+}
0 43
new file mode 100644
... ...
@@ -0,0 +1,129 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+namespace eSM_swiper;
12
+
13
+
14
+/**
15
+ * Front end content element swiper slider start.
16
+ */
17
+class ContentSwiperSliderStart extends \ContentElement
18
+{
19
+
20
+	/**
21
+	 * Template
22
+	 * @var string
23
+	 */
24
+	protected $strTemplate = 'ce_swiper_slider_start';
25
+
26
+
27
+	/**
28
+	 * Generate the content element
29
+	 */
30
+	protected function compile()
31
+	{
32
+		if (TL_MODE == 'BE')
33
+		{
34
+			$this->strTemplate = 'be_wildcard';
35
+
36
+			/** @var \BackendTemplate|object $objTemplate */
37
+			$objTemplate = new \BackendTemplate($this->strTemplate);
38
+
39
+			$this->Template = $objTemplate;
40
+			$this->Template->title = $this->headline;
41
+		}
42
+
43
+    $parentKey = ($this->arrData['ptable'] ?: 'tl_article') . '__' . $this->arrData['pid'];
44
+
45
+    if (!empty($GLOBALS['TL_ESM_SLICK'][$parentKey])) {
46
+      $GLOBALS['TL_ESM_SLICK_STACK'][$parentKey][] = $GLOBALS['TL_ESM_SLICK'][$parentKey];
47
+    }
48
+
49
+    $GLOBALS['TL_ESM_SLICK'][$parentKey] = $this->id;
50
+
51
+		// Slider configuration
52
+		$this->Template->config = $this->eSM_slider_autoPlaySpeed . ',' . $this->eSM_slider_speed . ',' . $this->eSM_slider_initialSlide . ',' . $this->eSM_slider_preload . ',' . $this->eSM_slider_infinite . ',' . $this->eSM_slider_arrows . ',' . $this->eSM_slider_pagination . ',' . $this->eSM_slider_stopOnInteraction . ',' . $this->eSM_slider_fade . ',' . $this->eSM_slider_slidesToShow . ',' . $this->eSM_slider_slidesToScroll . ',' . $this->eSM_slider_adaptiveHeight;
53
+
54
+		// Background image
55
+    if ($this->eSM_addImage && $this->multiSRC)
56
+    {
57
+      $source = \StringUtil::deserialize($this->multiSRC);
58
+      $objFiles = \FilesModel::findMultipleByUuids($source);
59
+
60
+      $imageFiles = array();
61
+      $videoFiles = array();
62
+
63
+      if ($objFiles !== null) {
64
+
65
+        foreach ($objFiles as $file) {
66
+          if (is_file(TL_ROOT . '/' . $file->path))
67
+          {
68
+            if (in_array($file->extension, array_map('trim', explode(',', \Config::get('validImageTypes')))))
69
+            {
70
+              $imageFiles[] = $file;
71
+            } else if (in_array($file->extension, array_map('trim', array('mp4', 'm4v', 'mov', 'wmv', 'webm', 'ogv', 'm4a', 'mp3', 'wma', 'mpeg', 'wav', 'ogg'))))
72
+            {
73
+              $videoFiles[] = $file;
74
+            }
75
+          }
76
+        }
77
+      }
78
+
79
+      if (isset($imageFiles[0]))
80
+      {
81
+        $this->singleSRC = $imageFiles[0]->path;
82
+
83
+        $this->addImageToTemplate($this->Template, array('singleSRC' => $this->singleSRC, 'size' => $this->size));
84
+
85
+        if ($this->eSM_slider_minHeight)
86
+        {
87
+          if ($this->eSM_slider_bgSize && $this->eSM_slider_bgSize == 'auto auto')
88
+          {
89
+            $this->Template->minHeight = $this->Template->picture['img']['height'] . 'px';
90
+          } else
91
+          {
92
+            $this->Template->minHeight = round($this->Template->picture['img']['height'] / $this->Template->picture['img']['width'] * 100) . '%';
93
+          }
94
+        }
95
+
96
+        $backgroundStyle = 'background-image: url(\'' . $this->Template->src . '\');';
97
+
98
+        if ($this->eSM_slider_bgSize)
99
+        {
100
+          $backgroundStyle .= 'background-size: ' . $this->eSM_slider_bgSize . ';';
101
+        } else
102
+        {
103
+          $backgroundStyle .= 'background-size: cover;';
104
+        }
105
+        if ($this->eSM_slider_bgPosition)
106
+        {
107
+          $backgroundStyle .= 'background-position: ' . $this->eSM_slider_bgPosition . ';';
108
+        } else
109
+        {
110
+          $backgroundStyle .= 'background-position: 0 0;';
111
+        }
112
+        if ($this->eSM_slider_bgOpacity)
113
+        {
114
+          $backgroundStyle .= 'opacity:' . $this->eSM_slider_bgOpacity / 100 . ';';
115
+        }
116
+        if ($this->eSM_slider_bgRepeat)
117
+        {
118
+          $backgroundStyle .= 'background-repeat: ' . $this->eSM_slider_bgRepeat . ';';
119
+        }
120
+
121
+        $this->Template->backgroundStyle = $backgroundStyle;
122
+      }
123
+
124
+      if (count($videoFiles)) {
125
+        $this->Template->videoFiles = $videoFiles;
126
+      }
127
+    }
128
+	}
129
+}
0 130
new file mode 100644
... ...
@@ -0,0 +1,62 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+namespace eSM_swiper;
12
+
13
+
14
+/**
15
+ * Front end content element swiper slider end.
16
+ */
17
+class ContentSwiperSliderStop extends \ContentElement
18
+{
19
+
20
+	/**
21
+	 * Template
22
+	 * @var string
23
+	 */
24
+	protected $strTemplate = 'ce_swiper_slider_stop';
25
+
26
+  public function generate()
27
+  {
28
+    if (TL_MODE === 'BE') {
29
+      return parent::generate();
30
+    }
31
+
32
+    $parentKey = ($this->arrData['ptable'] ?: 'tl_article') . '__' . $this->arrData['pid'];
33
+
34
+    if (isset($GLOBALS['TL_ESM_SLICK'][$parentKey])) {
35
+      unset($GLOBALS['TL_ESM_SLICK'][$parentKey]);
36
+    }
37
+
38
+    if (!empty($GLOBALS['TL_ESM_SLICK_STACK'][$parentKey])) {
39
+      $GLOBALS['TL_ESM_SLICK'][$parentKey] = array_pop($GLOBALS['TL_ESM_SLICK_STACK'][$parentKey]);
40
+    }
41
+
42
+    return parent::generate();
43
+  }
44
+
45
+
46
+  /**
47
+	 * Generate the content element
48
+	 */
49
+	protected function compile()
50
+	{
51
+		if (TL_MODE == 'BE')
52
+		{
53
+			$this->strTemplate = 'be_wildcard';
54
+
55
+			/** @var \BackendTemplate|object $objTemplate */
56
+			$objTemplate = new \BackendTemplate($this->strTemplate);
57
+
58
+			$this->Template = $objTemplate;
59
+			$this->Template->title = $this->headline;
60
+		}
61
+	}
62
+}
0 63
new file mode 100644
... ...
@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+$GLOBALS['TL_LANG']['CTE']['swiperSlider'] = "Swiper Slider";
13
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStart'][0] = "Slider Umschlag Anfang";
14
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStart'][1] = "Beginn eines Sliders.";
15
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStop'][0] = "Slider Umschlag Ende";
16
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStop'][1] = "Ende eines Sliders.";
17
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStart'][0] = "Slide Anfang";
18
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStart'][1] = "Beginn eines Slides über mehrere Inhaltselemente.";
19
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStop'][0] = "Slide Ende";
20
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStop'][1] = "Ende eines Slides über mehrere Inhaltselemente.";
21
+$GLOBALS['TL_LANG']['CTE']['swiperSliderImage'][0] = "Bild-Slide";
22
+$GLOBALS['TL_LANG']['CTE']['swiperSliderImage'][1] = "Ein Slide mit einem Bild und der Möglichkeit einen Text zu platzieren.";
23
+
24
+$GLOBALS['TL_LANG']['MSC']['swiper_lazyLoad']['ondemand'] = 'Bei Bedarf';
25
+$GLOBALS['TL_LANG']['MSC']['swiper_lazyLoad']['progressive'] = 'Fortlaufend';
0 26
\ No newline at end of file
1 27
new file mode 100644
... ...
@@ -0,0 +1,64 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+/**
13
+ * Fields
14
+ */
15
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_autoPlaySpeed'][0]  = "Autoplay-Geschwindigkeit";
16
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_autoPlaySpeed'][1]  = "Der Zeitraum in Millisekunden zwischen den Slides. 0 deaktiviert das Autoplay.";
17
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_speed'][0]          = "Slide-Geschwindigkeit";
18
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_speed'][1]          = "Die Übergangsgeschwindigkeit in Millisekunden.";
19
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_initialSlide'][0]   = "Start-Slide";
20
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_initialSlide'][1]   = "Das Element, welches als erstes angezeigt werden soll. Nummerierung beginnt mit 0.";
21
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToShow'][0]   = "Sichtbare Slides";
22
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToShow'][1]   = "Die Anzahl der auf einmal sichtbaren Slides.";
23
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToScroll'][0] = "Anzahl zu scrollender Slides";
24
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToScroll'][1] = "Die Anzahl an Slides, welche vor oder zurück gescrollt werden sollen.";
25
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_infinite'][0]       = "Kontinuierlich";
26
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_infinite'][1]       = "Der Slider läuft endlos durch und beginnt immer wieder von vorne nach dem letzten Slide.";
27
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_arrows'][0]         = "Navigation anzeigen";
28
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_arrows'][1]         = "Ermöglicht das blättern mit einer Vor- und Zurück-Navigation";
29
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_pagination'][0]     = "Pagination";
30
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_pagination'][1]     = "Zeigt eine Pagination über die Slides direkt angesprungen werden können.";
31
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_stopOnInteraction'][0]          = "Autoplay bei Interaktion stoppen";
32
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_stopOnInteraction'][1]          = "Autoplay wird bei einer User-Interaktion mit dem Slider gestoppt.";
33
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_preload'][0]        = "Bilder vorab laden";
34
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_preload'][1]        = "Es werden alle Bilder vorab geladen.";
35
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_fade'][0]           = "Überblenden";
36
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_fade'][1]           = "Die Slides werden beim Wechsel überblendet anstatt geslidet.";
37
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_adaptiveHeight'][0] = "Adaptive Höhe";
38
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_adaptiveHeight'][1] = "Die Höhe des Sliders passt sich automatisch den sichtbaren Slides an.";
39
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_text'][0]           = "Text";
40
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_text'][1]           = "Ein Text der auf dem Hintergrundbild platziert wird.";
41
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgPosition'][0]     = "Bildposition";
42
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgPosition'][1]     = "Legt die Positionierung des Bildes fest.";
43
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgSize'][0]         = "Hintergrundbildgröße";
44
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgSize'][1]         = "Steuert die Hintergrundbildgröße bezogen auf den Container.";
45
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_minHeight'][0]      = "Mindesthöhe erzwingen";
46
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_minHeight'][1]      = "Die Mindesthöhe des Slide wird am Bild ausgerichtet.";
47
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgOpacity'][0]      = "Hintergrundbildtransparenz";
48
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgOpacity'][1]      = "Die Transparenz des Hintergrundbildes.";
49
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgRepeat'][0]       = "Hintergrundbildwiederholung";
50
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgRepeat'][1]       = "Legt fest ob das Hintergrundbild wiederholt werden soll.";
51
+$GLOBALS['TL_LANG']['tl_content']['eSM_addText'][0]              = "Ein Text hinzufügen";
52
+$GLOBALS['TL_LANG']['tl_content']['eSM_addText'][1]              = "Dem Bild-Slide ein Text hinzufügen.";
53
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_addImageLink'][0]   = "Bild verlinken";
54
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_addImageLink'][1]   = "Es wird ein Link auf den Bild-Slide gesetzt.";
55
+/**
56
+ * Legends
57
+ */
58
+$GLOBALS['TL_LANG']['tl_content']['swiper_legend'] = "Slick Slider Einstellungen";
59
+
60
+/**
61
+ * Misc
62
+ */
63
+
64
+$GLOBALS['TL_LANG']['tl_content']['includeTemplatesJQuery'] = "Das <em>%s</em>-Template muss im Seitenlayout eingebunden sein.";
0 65
\ No newline at end of file
1 66
new file mode 100644
... ...
@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+$GLOBALS['TL_LANG']['CTE']['swiperSlider'] = "Swiper Slider";
13
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStart'][0] = "Slider wrapper start";
14
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStart'][1] = "Beginning of a slider.";
15
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStop'][0] = "Slider wrapper stop";
16
+$GLOBALS['TL_LANG']['CTE']['swiperSliderStop'][1] = "Ending of a slider.";
17
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStart'][0] = "Slide start";
18
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStart'][1] = "Beginning of a single slide.";
19
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStop'][0] = "Slide stop";
20
+$GLOBALS['TL_LANG']['CTE']['swiperSliderSlideStop'][1] = "Ending of a single slide.";
21
+$GLOBALS['TL_LANG']['CTE']['swiperSliderImage'][0] = "Image slide";
22
+$GLOBALS['TL_LANG']['CTE']['swiperSliderImage'][1] = "Image slide with the option to place a text on it.";
23
+
24
+$GLOBALS['TL_LANG']['MSC']['swiper_lazyLoad']['ondemand'] = 'On demand';
25
+$GLOBALS['TL_LANG']['MSC']['swiper_lazyLoad']['progressive'] = 'Progressive';
0 26
\ No newline at end of file
1 27
new file mode 100644
... ...
@@ -0,0 +1,64 @@
1
+<?php
2
+
3
+/**
4
+ * Slick slider for Contao
5
+ *
6
+ * Copyright (c) 2016 Benjamin Roth
7
+ *
8
+ * @license LGPL-3.0+
9
+ */
10
+
11
+
12
+/**
13
+ * Fields
14
+ */
15
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_autoPlaySpeed'][0]  = "Autoplay speed";
16
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_autoPlaySpeed'][1]  = "Time in milliseconds between slides. 0 deactivates autoplay.";
17
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_speed'][0]          = "Slide speed";
18
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_speed'][1]          = "Transition time in milliseconds.";
19
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_initialSlide'][0]   = "Initial slide";
20
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_initialSlide'][1]   = "Slide to start on. Iteration starts with 0.";
21
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToShow'][0]   = "Slides to show";
22
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToShow'][1]   = "Number of slides to show.";
23
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToScroll'][0] = "Slides to scroll";
24
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_slidesToScroll'][1] = "Number of slides to scroll.";
25
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_infinite'][0]       = "Infinite";
26
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_infinite'][1]       = "Infinte loop sliding. Will start over after reaching end or start.";
27
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_arrows'][0]         = "Show navigation";
28
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_arrows'][1]         = "Shows navigation elements.";
29
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_pagination'][0]     = "Show pagination";
30
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_pagination'][1]     = "Shows pagination elements.";
31
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_stopOnInteraction'][0]          = "Stop autoplay on interaction";
32
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_stopOnInteraction'][1]          = "Autoplay will be stopped if user interacts with slider.";
33
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_preload'][0]        = "Preload images";
34
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_preload'][1]        = "All images will be preloaded.";
35
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_fade'][0]           = "Fade";
36
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_fade'][1]           = "Slides will fade over instead of sliding in.";
37
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_adaptiveHeight'][0] = "Adaptive height";
38
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_adaptiveHeight'][1] = "The slider height adapts to the currently showing slides.";
39
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_text'][0]           = "Text";
40
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_text'][1]           = "Text to be placed on background image.";
41
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgPosition'][0]     = "Image position";
42
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgPosition'][1]     = "Defines the position of the image.";
43
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgSize'][0]         = "Background image size";
44
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgSize'][1]         = "Defines the image size in relation to it's container.";
45
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_minHeight'][0]      = "Force min-height";
46
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_minHeight'][1]      = "The minimum height of the slide is based on the image aspect ratio.";
47
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgOpacity'][0]      = "Background image opacity";
48
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgOpacity'][1]      = "The opacity of the background image.";
49
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgRepeat'][0]       = "Background image repetition.";
50
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_bgRepeat'][1]       = "Defines if the background image is meant to be repeated.";
51
+$GLOBALS['TL_LANG']['tl_content']['eSM_addText'][0]              = "Add text";
52
+$GLOBALS['TL_LANG']['tl_content']['eSM_addText'][1]              = "Add a text to the image slide.";
53
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_addImageLink'][0]   = "Add image link";
54
+$GLOBALS['TL_LANG']['tl_content']['eSM_slider_addImageLink'][1]   = "Adds an link to the image slide.";
55
+/**
56
+ * Legends
57
+ */
58
+$GLOBALS['TL_LANG']['tl_content']['swiper_legend'] = "Slick Slider settings";
59
+
60
+/**
61
+ * Misc
62
+ */
63
+
64
+$GLOBALS['TL_LANG']['tl_content']['includeTemplatesJQuery'] = "The <em>%s</em> template needs to be included in the page layout.";
0 65
\ No newline at end of file
1 66
new file mode 100644
... ...
@@ -0,0 +1,33 @@
1
+
2
+<?php $this->block('content'); ?>
3
+
4
+<div class="swiper-slide slide_<?= $this->id ?>">
5
+  <?php if ($this->src || count($this->videoFiles)): ?>
6
+    <div class="swiper-slide-image">
7
+      <?php if ($this->videoFiles): ?>
8
+        <video class="no-mejs" autoplay loop muted>
9
+          <?php foreach ($this->videoFiles as $video): ?>
10
+            <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
11
+          <?php endforeach ?>
12
+        </video>
13
+      <?php endif; ?>
14
+    </div>
15
+
16
+    <style>
17
+      <?= $this->backgroundStyle ?>
18
+      <?php if ($this->backgroundStyleResponsive): ?><?= $this->backgroundStyleResponsive ?><?php endif; ?>
19
+    </style>
20
+  <?php endif; ?>
21
+  <div class="slide-content">
22
+
23
+  <?php if ($this->text): ?>
24
+    <span class="slide-text"><?= $this->text ?></span>
25
+  <?php endif; ?>
26
+
27
+  </div>
28
+  <?php if ($this->link || $this->imageLink): ?>
29
+    <a class="slide-url" href="<?= ($this->link ?: $this->imageLink) ?>"<?php if ($this->fullsize): ?> data-lightbox="<?= $this->lightboxId ?>"<?php endif; ?>></a>
30
+  <?php endif; ?>
31
+</div>
32
+
33
+<?php $this->endblock(); ?>
0 34
new file mode 100644
... ...
@@ -0,0 +1,36 @@
1
+<?php $this->block('content'); ?>
2
+<?php $this->dumpTemplateVars(); ?>
3
+<div class="<?= $this->class ?> block"<?= $this->cssID ?><?php if ($this->style): ?> style="<?= $this->style ?>"<?php endif; ?>>
4
+
5
+  <?php if ($this->headline): ?>
6
+  <<?= $this->hl ?>><?= $this->headline ?></<?= $this->hl ?>>
7
+  <?php endif; ?>
8
+
9
+  <div class="swiper-container slide-container_<?= $this->id ?>">
10
+    <?php if ($this->eSM_addImage && ($this->src || count($this->videoFiles))): ?>
11
+      <div class="swiper-background"<?php if ($this->src): ?>style="<?= $this->backgroundStyle ?>"<?php endif; ?>>
12
+        <?php if ($this->videoFiles): ?>
13
+          <video class="no-mejs" autoplay loop muted>
14
+            <?php foreach ($this->videoFiles as $video): ?>
15
+              <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
16
+            <?php endforeach ?>
17
+          </video>
18
+        <?php endif; ?>
19
+      </div>
20
+      <?php if ($this->src && $this->minHeight): ?>
21
+        <style>.slide-container_<?= $this->id ?>:before { content: ""; display: block; padding-top: <?= $this->minHeight ?>; float: left; }</style>
22
+      <?php endif; ?>
23
+    <?php endif; ?>
24
+
25
+    <?php if ($this->eSM_slider_arrows): ?>
26
+      <div class="swiper-button-next"></div>
27
+      <div class="swiper-button-prev"></div>
28
+    <?php endif; ?>
29
+
30
+    <?php if ($this->eSM_slider_pagination): ?>
31
+     <div class="swiper-pagination"></div>
32
+    <?php endif; ?>
33
+
34
+    <div class="swiper-wrapper" data-config="<?= $this->config ?>">
35
+
36
+<?php $this->endblock(); ?>
0 37
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+<?php $this->block('content'); ?>
2
+
3
+    </div>
4
+
5
+  </div>
6
+
7
+</div>
8
+
9
+<?php $this->endblock(); ?>
0 10
\ No newline at end of file
1 11
new file mode 100644
... ...
@@ -0,0 +1,22 @@
1
+<?php $this->block('content'); ?>
2
+
3
+<div class="swiper-slide slide_<?= $this->id ?>">
4
+  <?php if ($this->eSM_addImage && ($this->src || count($this->videoFiles))): ?>
5
+    <div class="swiper-background">
6
+      <?php if ($this->videoFiles): ?>
7
+        <video class="no-mejs" autoplay loop muted>
8
+          <?php foreach ($this->videoFiles as $video): ?>
9
+            <source src="<?php echo TL_FILES_URL . $video->path ?>" type="video/<?php echo $video->extension ?>">
10
+          <?php endforeach ?>
11
+        </video>
12
+      <?php endif; ?>
13
+    </div>
14
+
15
+    <style>
16
+      <?= $this->backgroundStyle ?>
17
+      <?php if ($this->backgroundStyleResponsive): ?><?= $this->backgroundStyleResponsive ?><?php endif; ?>
18
+    </style>
19
+  <?php endif; ?>
20
+  <div class="slide-content">
21
+
22
+<?php $this->endblock(); ?>
0 23
new file mode 100644
... ...
@@ -0,0 +1,6 @@
1
+<?php $this->block('content'); ?>
2
+
3
+        </div>
4
+      </div>
5
+
6
+<?php $this->endblock(); ?>
0 7
new file mode 100644
... ...
@@ -0,0 +1,76 @@
1
+<?php
2
+
3
+$GLOBALS['TL_CSS'][] = '/system/modules/eSM_swiper/assets/lib/swiper/' . $GLOBALS['TL_ASSETS']['SWIPERJS'] . '/css/swiper.min.css';
4
+$GLOBALS['TL_CSS'][] = '/system/modules/eSM_swiper/assets/css/swiper-custom.css';
5
+
6
+?>
7
+
8
+<script src="/system/modules/eSM_swiper/assets/lib/swiper/<?= $GLOBALS['TL_ASSETS']['SWIPERJS'] ?>/js/swiper.min.js"></script>
9
+
10
+<script>
11
+  (function () {
12
+    var cte = document.querySelectorAll(".ce_swiperSliderStart"), e, w, s, i, c,
13
+      defaults = {
14
+        initialSlide: 0,
15
+        speed: 300,
16
+        autoHeight: false,
17
+        effect: 'slide',
18
+        slidesPerView: 1,
19
+        slidesPerGroup: 1,
20
+        preloadImages: true,
21
+        loop: false,
22
+        autoplay: false
23
+      };
24
+
25
+    for (i=0; i<cte.length; i+=2)
26
+    {
27
+      e = cte[i].querySelectorAll('.swiper-container')[0];
28
+      w = e.querySelectorAll('.swiper-wrapper')[0];
29
+      c = defaults;
30
+
31
+      if (w.hasAttribute('data-config'))
32
+      {
33
+        s = w.getAttribute('data-config').split(',');
34
+
35
+        c.speed = parseInt(s[1]);
36
+        c.initialSlide = parseInt(s[2]);
37
+
38
+        if (parseInt(s[0]) > 0)
39
+          c.autoplay = {delay: parseInt(s[0]), disableOnInteraction: (parseInt(s[7]) == 1 ? true : false)}
40
+
41
+        if (parseInt(s[3]) != 1)
42
+          c.preloadImages = false;
43
+
44
+        if (parseInt(s[4]) == 1)
45
+          c.loop = true;
46
+
47
+        if (parseInt(s[5]) == 1)
48
+          c.navigation = {
49
+            nextEl: '.swiper-button-next',
50
+            prevEl: '.swiper-button-prev',
51
+          };
52
+
53
+        if (parseInt(s[6]) == 1)
54
+          c.pagination = {
55
+            el: '.swiper-pagination',
56
+            clickable: true
57
+          };
58
+
59
+        if (parseInt(s[8]) == 1)
60
+          c.effect = 'fade';
61
+
62
+        if (parseInt(s[9]) > 1)
63
+          c.slidesPerView = parseInt(s[9]);
64
+
65
+        if (parseInt(s[10]) > 1)
66
+          c.slidesPerGroup = parseInt(s[10]);
67
+
68
+        if (parseInt(s[11]) == 1)
69
+          c.autoHeight = true;
70
+
71
+      }
72
+console.log(c);
73
+      new Swiper(e,c);
74
+    }
75
+  })();
76
+</script>
0 77
\ No newline at end of file