wonder-image 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/DOCS.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1 -0
  4. package/babel.config.json +3 -0
  5. package/demo/backend/body-end.php +10 -0
  6. package/demo/backend/head.php +93 -0
  7. package/demo/frontend/body-end.php +19 -0
  8. package/demo/frontend/head.php +244 -0
  9. package/demo/wonder-image.php +41 -0
  10. package/dist/0d01fa889dc2b0202b98.png +0 -0
  11. package/dist/203d1199e7aef04c0a34.gif +0 -0
  12. package/dist/26d6ed3fa1c815e4c78f.png +0 -0
  13. package/dist/39795c0b4513de014cf8.woff +0 -0
  14. package/dist/40b30ca122107c2852be.png +0 -0
  15. package/dist/4a7b4107b62ef059ba65.png +0 -0
  16. package/dist/4dce7f71b08755f19759.png +0 -0
  17. package/dist/60af14fddca897f348bb.png +0 -0
  18. package/dist/67172a36bcdeaca8592a.png +0 -0
  19. package/dist/a85c6dc53638f894de38.png +0 -0
  20. package/dist/b7bcc075b395c14ce8c2.woff2 +0 -0
  21. package/dist/backend/body-end.js +3 -0
  22. package/dist/backend/body-end.js.LICENSE.txt +44 -0
  23. package/dist/backend/body-end.js.map +1 -0
  24. package/dist/backend/head.css +2 -0
  25. package/dist/backend/head.css.map +1 -0
  26. package/dist/backend/head.js +3 -0
  27. package/dist/backend/head.js.LICENSE.txt +46 -0
  28. package/dist/backend/head.js.map +1 -0
  29. package/dist/backend/lib.js +2 -0
  30. package/dist/backend/lib.js.LICENSE.txt +1 -0
  31. package/dist/frontend/body-end.js +3 -0
  32. package/dist/frontend/body-end.js.LICENSE.txt +46 -0
  33. package/dist/frontend/body-end.js.map +1 -0
  34. package/dist/frontend/head.css +2 -0
  35. package/dist/frontend/head.css.map +1 -0
  36. package/dist/frontend/head.js +3 -0
  37. package/dist/frontend/head.js.LICENSE.txt +46 -0
  38. package/dist/frontend/head.js.map +1 -0
  39. package/dist/frontend/lib.css +2 -0
  40. package/dist/frontend/lib.css.map +1 -0
  41. package/dist/frontend/lib.js +3 -0
  42. package/dist/frontend/lib.js.LICENSE.txt +151 -0
  43. package/dist/frontend/lib.js.map +1 -0
  44. package/dist/lib/autonumeric/autonumeric.js +3 -0
  45. package/dist/lib/autonumeric/autonumeric.js.LICENSE.txt +47 -0
  46. package/dist/lib/autonumeric/autonumeric.js.map +1 -0
  47. package/dist/lib/bootstrap/bootstrap-datepicker.css +2 -0
  48. package/dist/lib/bootstrap/bootstrap-datepicker.css.map +1 -0
  49. package/dist/lib/bootstrap/bootstrap-datepicker.js +3 -0
  50. package/dist/lib/bootstrap/bootstrap-datepicker.js.LICENSE.txt +42 -0
  51. package/dist/lib/bootstrap/bootstrap-datepicker.js.map +1 -0
  52. package/dist/lib/bootstrap/bootstrap-icons.css +2 -0
  53. package/dist/lib/bootstrap/bootstrap-icons.css.map +1 -0
  54. package/dist/lib/bootstrap/bootstrap-icons.js +3 -0
  55. package/dist/lib/bootstrap/bootstrap-icons.js.LICENSE.txt +13 -0
  56. package/dist/lib/bootstrap/bootstrap-icons.js.map +1 -0
  57. package/dist/lib/bootstrap/bootstrap.css +2 -0
  58. package/dist/lib/bootstrap/bootstrap.css.map +1 -0
  59. package/dist/lib/bootstrap/bootstrap.js +3 -0
  60. package/dist/lib/bootstrap/bootstrap.js.LICENSE.txt +44 -0
  61. package/dist/lib/bootstrap/bootstrap.js.map +1 -0
  62. package/dist/lib/chartjs/chart.js +3 -0
  63. package/dist/lib/chartjs/chart.js.LICENSE.txt +1467 -0
  64. package/dist/lib/chartjs/chart.js.map +1 -0
  65. package/dist/lib/datatables/datatables.css +2 -0
  66. package/dist/lib/datatables/datatables.css.map +1 -0
  67. package/dist/lib/datatables/datatables.js +3 -0
  68. package/dist/lib/datatables/datatables.js.LICENSE.txt +8988 -0
  69. package/dist/lib/datatables/datatables.js.map +1 -0
  70. package/dist/lib/editorjs/editor.js +3 -0
  71. package/dist/lib/editorjs/editor.js.LICENSE.txt +5812 -0
  72. package/dist/lib/editorjs/editor.js.map +1 -0
  73. package/dist/lib/fancyapps/fancyapps.css +2 -0
  74. package/dist/lib/fancyapps/fancyapps.css.map +1 -0
  75. package/dist/lib/fancyapps/fancyapps.js +3 -0
  76. package/dist/lib/fancyapps/fancyapps.js.LICENSE.txt +19 -0
  77. package/dist/lib/fancyapps/fancyapps.js.map +1 -0
  78. package/dist/lib/filepond/filepond.css +2 -0
  79. package/dist/lib/filepond/filepond.css.map +1 -0
  80. package/dist/lib/filepond/filepond.js +3 -0
  81. package/dist/lib/filepond/filepond.js.LICENSE.txt +2797 -0
  82. package/dist/lib/filepond/filepond.js.map +1 -0
  83. package/dist/lib/fullcalendar/fullcalendar.js +3 -0
  84. package/dist/lib/fullcalendar/fullcalendar.js.LICENSE.txt +3787 -0
  85. package/dist/lib/fullcalendar/fullcalendar.js.map +1 -0
  86. package/dist/lib/jquery/jquery-plugin.css +2 -0
  87. package/dist/lib/jquery/jquery-plugin.css.map +1 -0
  88. package/dist/lib/jquery/jquery-plugin.js +3 -0
  89. package/dist/lib/jquery/jquery-plugin.js.LICENSE.txt +60 -0
  90. package/dist/lib/jquery/jquery-plugin.js.map +1 -0
  91. package/dist/lib/jquery/jquery.js +3 -0
  92. package/dist/lib/jquery/jquery.js.LICENSE.txt +3240 -0
  93. package/dist/lib/jquery/jquery.js.map +1 -0
  94. package/dist/lib/jstree/jstree.css +2 -0
  95. package/dist/lib/jstree/jstree.css.map +1 -0
  96. package/dist/lib/jstree/jstree.js +3 -0
  97. package/dist/lib/jstree/jstree.js.LICENSE.txt +42 -0
  98. package/dist/lib/jstree/jstree.js.map +1 -0
  99. package/dist/lib/moment/moment.js +3 -0
  100. package/dist/lib/moment/moment.js.LICENSE.txt +772 -0
  101. package/dist/lib/moment/moment.js.map +1 -0
  102. package/dist/lib/quilljs/quill.css +2 -0
  103. package/dist/lib/quilljs/quill.css.map +1 -0
  104. package/dist/lib/quilljs/quill.js +3 -0
  105. package/dist/lib/quilljs/quill.js.LICENSE.txt +3038 -0
  106. package/dist/lib/quilljs/quill.js.map +1 -0
  107. package/dist/lib/swiperjs/swiper-plugin.css +2 -0
  108. package/dist/lib/swiperjs/swiper-plugin.css.map +1 -0
  109. package/dist/lib/swiperjs/swiper-plugin.js +3 -0
  110. package/dist/lib/swiperjs/swiper-plugin.js.LICENSE.txt +1113 -0
  111. package/dist/lib/swiperjs/swiper-plugin.js.map +1 -0
  112. package/dist/lib/swiperjs/swiper.css +2 -0
  113. package/dist/lib/swiperjs/swiper.css.map +1 -0
  114. package/dist/lib/swiperjs/swiper.js +3 -0
  115. package/dist/lib/swiperjs/swiper.js.LICENSE.txt +651 -0
  116. package/dist/lib/swiperjs/swiper.js.map +1 -0
  117. package/dist/lib/videojs/video.css +2 -0
  118. package/dist/lib/videojs/video.css.map +1 -0
  119. package/dist/lib/videojs/video.js +3 -0
  120. package/dist/lib/videojs/video.js.LICENSE.txt +23391 -0
  121. package/dist/lib/videojs/video.js.map +1 -0
  122. package/package.json +95 -0
  123. package/src/build/backend/css/header.css +252 -0
  124. package/src/build/backend/css/input.css +295 -0
  125. package/src/build/backend/css/list.css +57 -0
  126. package/src/build/backend/css/order.css +99 -0
  127. package/src/build/backend/js/ajax.js +96 -0
  128. package/src/build/backend/js/alert.js +78 -0
  129. package/src/build/backend/js/bootstrap.js +52 -0
  130. package/src/build/backend/js/form/editor.js +293 -0
  131. package/src/build/backend/js/form/file.js +142 -0
  132. package/src/build/backend/js/form/filepond.js +11 -0
  133. package/src/build/backend/js/form/input.js +313 -0
  134. package/src/build/backend/js/form/inputRow.js +164 -0
  135. package/src/build/backend/js/form/send.js +14 -0
  136. package/src/build/backend/js/form/set.js +314 -0
  137. package/src/build/backend/js/jquery.js +15 -0
  138. package/src/build/backend/js/list.js +19 -0
  139. package/src/build/backend/js/modal.js +31 -0
  140. package/src/build/backend/js/pageSetUp.js +125 -0
  141. package/src/build/backend/js/utility.js +38 -0
  142. package/src/build/frontend/css/class/dimension.css +3376 -0
  143. package/src/build/frontend/css/class/function.css +316 -0
  144. package/src/build/frontend/css/class/grid.css +240 -0
  145. package/src/build/frontend/css/class/margin.css +823 -0
  146. package/src/build/frontend/css/class/padding.css +760 -0
  147. package/src/build/frontend/css/class/position.css +351 -0
  148. package/src/build/frontend/css/class/resize.css +24 -0
  149. package/src/build/frontend/css/class/section.css +41 -0
  150. package/src/build/frontend/css/class/text.css +244 -0
  151. package/src/build/frontend/css/components/alert.css +42 -0
  152. package/src/build/frontend/css/components/button.css +107 -0
  153. package/src/build/frontend/css/components/dropdown.css +118 -0
  154. package/src/build/frontend/css/components/form/address.css +26 -0
  155. package/src/build/frontend/css/components/form/checkbox.css +65 -0
  156. package/src/build/frontend/css/components/form/date.css +133 -0
  157. package/src/build/frontend/css/components/form/input.css +176 -0
  158. package/src/build/frontend/css/components/form/select.css +69 -0
  159. package/src/build/frontend/css/components/header/hamburger/hamburger-1.css +56 -0
  160. package/src/build/frontend/css/components/header/hamburger/hamburger.css +58 -0
  161. package/src/build/frontend/css/components/header/header.css +57 -0
  162. package/src/build/frontend/css/components/header/mobile-nav.css +79 -0
  163. package/src/build/frontend/css/components/modal.css +76 -0
  164. package/src/build/frontend/css/components/spinner.css +37 -0
  165. package/src/build/frontend/css/generator/dimension.php +93 -0
  166. package/src/build/frontend/css/generator/margin.php +48 -0
  167. package/src/build/frontend/css/generator/padding.php +48 -0
  168. package/src/build/frontend/css/lib.css +3 -0
  169. package/src/build/frontend/css/main.css +37 -0
  170. package/src/build/frontend/js/alert.js +64 -0
  171. package/src/build/frontend/js/aos.js +9 -0
  172. package/src/build/frontend/js/dropdown.js +73 -0
  173. package/src/build/frontend/js/form/input.js +211 -0
  174. package/src/build/frontend/js/form/list.js +155 -0
  175. package/src/build/frontend/js/form/select.js +108 -0
  176. package/src/build/frontend/js/form/send.js +137 -0
  177. package/src/build/frontend/js/header.js +12 -0
  178. package/src/build/frontend/js/modal.js +26 -0
  179. package/src/build/frontend/js/pageSetUp.js +35 -0
  180. package/src/build/frontend/js/scroll.js +70 -0
  181. package/src/build/frontend/js/utility.js +21 -0
  182. package/src/build/global/js/canvas.js +82 -0
  183. package/src/build/global/js/fetch.js +47 -0
  184. package/src/build/global/js/form/autonumeric.js +136 -0
  185. package/src/build/global/js/form/phone.js +19 -0
  186. package/src/build/global/js/utility.js +88 -0
  187. package/src/build/global/js/video.js +7 -0
  188. package/src/build/lib/editorjs/gallery.js +39 -0
  189. package/src/build/lib/editorjs/hyperlink.js +170 -0
  190. package/src/build/lib/editorjs/video.js +61 -0
  191. package/src/build/lib/swiperjs/effect-carousel.css +24 -0
  192. package/src/build/lib/swiperjs/effect-carousel.esm.js +102 -0
  193. package/src/build/lib/swiperjs/effect-shutters.css +33 -0
  194. package/src/build/lib/swiperjs/effect-shutters.esm.js +114 -0
  195. package/src/build/lib/swiperjs/effect-slicer.css +39 -0
  196. package/src/build/lib/swiperjs/effect-slicer.esm.js +198 -0
  197. package/src/build/lib/swiperjs/swiper-gl.css +44 -0
  198. package/src/build/lib/swiperjs/swiper-gl.esm.js +6063 -0
  199. package/src/export/backend/body-end.js +4 -0
  200. package/src/export/backend/head.js +25 -0
  201. package/src/export/backend/lib.js +0 -0
  202. package/src/export/frontend/body-end.js +9 -0
  203. package/src/export/frontend/head.js +42 -0
  204. package/src/export/frontend/lib.js +17 -0
  205. package/src/export/lib/autonumeric/autonumeric.js +3 -0
  206. package/src/export/lib/bootstrap/bootstrap-datepicker.js +4 -0
  207. package/src/export/lib/bootstrap/bootstrap-icons.js +2 -0
  208. package/src/export/lib/bootstrap/bootstrap.js +3 -0
  209. package/src/export/lib/chartjs/chart.js +4 -0
  210. package/src/export/lib/datatables/datatables.js +6 -0
  211. package/src/export/lib/editorjs/editor.js +48 -0
  212. package/src/export/lib/fancyapps/fancyapps.js +7 -0
  213. package/src/export/lib/filepond/filepond.js +51 -0
  214. package/src/export/lib/fullcalendar/fullcalendar.js +29 -0
  215. package/src/export/lib/jquery/jquery-plugin.js +14 -0
  216. package/src/export/lib/jquery/jquery.js +4 -0
  217. package/src/export/lib/jstree/jstree.js +2 -0
  218. package/src/export/lib/moment/moment.js +12 -0
  219. package/src/export/lib/quilljs/quill.js +4 -0
  220. package/src/export/lib/swiperjs/swiper-plugin.js +20 -0
  221. package/src/export/lib/swiperjs/swiper.js +4 -0
  222. package/src/export/lib/videojs/video.js +3 -0
  223. package/webpack.config.js +79 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * UI Initiative Carousel Slider
3
+ *
4
+ * Infinite 3D carousel slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * December 27, 2023
13
+ */
14
+
15
+ .swiper-carousel {
16
+ position: relative;
17
+ margin: 0 auto;
18
+ max-width: 100%;
19
+ overflow: hidden;
20
+ }
21
+ .swiper-carousel .swiper-slide,
22
+ .swiper-carousel swiper-slide {
23
+ position: relative;
24
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * UI Initiative Carousel Slider
3
+ *
4
+ * Infinite 3D carousel slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * December 27, 2023
13
+ */
14
+
15
+ export default function CarouselSlider({ swiper, on, extendParams }) {
16
+ extendParams({
17
+ carouselEffect: {
18
+ opacityStep: 0.33,
19
+ scaleStep: 0.2,
20
+ sideSlides: 2,
21
+ },
22
+ });
23
+ on('beforeInit', () => {
24
+ if (swiper.params.effect !== 'carousel') return;
25
+ swiper.classNames.push(`${swiper.params.containerModifierClass}carousel`);
26
+ const overwriteParams = {
27
+ watchSlidesProgress: true,
28
+ centeredSlides: true,
29
+ };
30
+
31
+ Object.assign(swiper.params, overwriteParams);
32
+ Object.assign(swiper.originalParams, overwriteParams);
33
+ });
34
+ on('progress', () => {
35
+ if (swiper.params.effect !== 'carousel') return;
36
+ const { scaleStep, opacityStep } = swiper.params.carouselEffect;
37
+ const sideSlides = Math.max(
38
+ Math.min(swiper.params.carouselEffect.sideSlides, 3),
39
+ 1,
40
+ );
41
+ const modifyMultiplier = {
42
+ 1: 2,
43
+ 2: 1,
44
+ 3: 0.2,
45
+ }[sideSlides];
46
+ const translateModifier = {
47
+ 1: 50,
48
+ 2: 50,
49
+ 3: 67,
50
+ }[sideSlides];
51
+
52
+ const zIndexMax = swiper.slides.length;
53
+
54
+ for (let i = 0; i < swiper.slides.length; i += 1) {
55
+ const slideEl = swiper.slides[i];
56
+ const slideProgress = swiper.slides[i].progress;
57
+ const absProgress = Math.abs(slideProgress);
58
+ let modify = 1;
59
+
60
+ if (absProgress > 1) {
61
+ modify = (absProgress - 1) * 0.3 * modifyMultiplier + 1;
62
+ }
63
+ const opacityEls = slideEl.querySelectorAll(
64
+ '.swiper-carousel-animate-opacity',
65
+ );
66
+ const translate = `${
67
+ slideProgress *
68
+ modify *
69
+ translateModifier *
70
+ (swiper.rtlTranslate ? -1 : 1)
71
+ }%`;
72
+
73
+ const scale = 1 - absProgress * scaleStep;
74
+ const zIndex = zIndexMax - Math.abs(Math.round(slideProgress));
75
+ slideEl.style.transform = `translateX(${translate}) scale(${scale})`;
76
+ slideEl.style.zIndex = zIndex;
77
+ if (absProgress > sideSlides + 1) {
78
+ slideEl.style.opacity = 0;
79
+ } else {
80
+ slideEl.style.opacity = 1;
81
+ }
82
+
83
+ opacityEls.forEach((opacityEl) => {
84
+ opacityEl.style.opacity = 1 - absProgress * opacityStep;
85
+ });
86
+ }
87
+ });
88
+
89
+ on('setTransition', (s, duration) => {
90
+ if (swiper.params.effect !== 'carousel') return;
91
+ for (let i = 0; i < swiper.slides.length; i += 1) {
92
+ const slideEl = swiper.slides[i];
93
+ const opacityEls = slideEl.querySelectorAll(
94
+ '.swiper-carousel-animate-opacity',
95
+ );
96
+ slideEl.style.transitionDuration = `${duration}ms`;
97
+ opacityEls.forEach((opacityEl) => {
98
+ opacityEl.style.transitionDuration = `${duration}ms`;
99
+ });
100
+ }
101
+ });
102
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * UI Initiative Shutters Slider
3
+ *
4
+ * Infinite 3D carousel slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * October 25, 2023
13
+ */
14
+
15
+ .swiper-shutters .swiper-slide,
16
+ .swiper-shutters swiper-slide {
17
+ overflow: hidden;
18
+ }
19
+ .swiper-shutters-image, .swiper-shutters-image-clones, .swiper-shutters-image-clone {
20
+ position: absolute;
21
+ left: 0;
22
+ top: 0;
23
+ width: 100%;
24
+ height: 100%;
25
+ pointer-events: none;
26
+ }
27
+ .swiper-shutters-image {
28
+ object-fit: cover;
29
+ object-position: center;
30
+ }
31
+ .swiper-shutters-image-clone {
32
+ overflow: hidden;
33
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * UI Initiative Shutters Slider
3
+ *
4
+ * Infinite 3D carousel slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * October 25, 2023
13
+ */
14
+
15
+ if (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {
16
+ window.SwiperElementRegisterParams(['shuttersEffect']);
17
+ }
18
+
19
+ export default function EffectShutters({ swiper, extendParams, on }) {
20
+ extendParams({
21
+ shuttersEffect: {
22
+ split: 5,
23
+ },
24
+ });
25
+
26
+ const createImages = () => {
27
+ swiper.slides.forEach((slideEl) => {
28
+ const imageEl = slideEl.querySelector('.swiper-shutters-image');
29
+ if (!imageEl) return;
30
+ const nextEl = imageEl.nextElementSibling;
31
+ const cloneContainerEl = document.createElement('div');
32
+ cloneContainerEl.classList.add('swiper-shutters-image-clones');
33
+ for (let i = 0; i < swiper.params.shuttersEffect.split; i += 1) {
34
+ const div = document.createElement('div');
35
+ div.classList.add('swiper-shutters-image-clone');
36
+ div.appendChild(imageEl.cloneNode());
37
+ cloneContainerEl.appendChild(div);
38
+ }
39
+ if (nextEl) {
40
+ imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);
41
+ } else {
42
+ imageEl.parentNode.appendChild(cloneContainerEl);
43
+ }
44
+ });
45
+ };
46
+
47
+ const setImages = () => {
48
+ swiper.el.querySelectorAll('.swiper-shutters-image').forEach((imageEl) => {
49
+ imageEl.style.width = `${swiper.width}px`;
50
+ imageEl.style.height = `${swiper.height}px`;
51
+ });
52
+ swiper.el
53
+ .querySelectorAll('.swiper-slide, swiper-slide')
54
+ .forEach((slideEl) => {
55
+ slideEl
56
+ .querySelectorAll('.swiper-shutters-image-clone')
57
+ .forEach((cloneEl, cloneElIndex) => {
58
+ const percentagePerItem = 100 / swiper.params.shuttersEffect.split;
59
+ const cloneImg = cloneEl.querySelector('.swiper-shutters-image');
60
+ if (swiper.params.direction === 'vertical') {
61
+ cloneEl.style.height = `${
62
+ 100 / swiper.params.shuttersEffect.split
63
+ }%`;
64
+ cloneEl.style.top = `${
65
+ (100 / swiper.params.shuttersEffect.split) * cloneElIndex
66
+ }%`;
67
+ cloneImg.style.top = `-${100 * cloneElIndex}%`;
68
+ } else {
69
+ cloneEl.style.width = `${
70
+ 100 / swiper.params.shuttersEffect.split
71
+ }%`;
72
+ cloneEl.style.left = `${
73
+ (100 / swiper.params.shuttersEffect.split) * cloneElIndex
74
+ }%`;
75
+ cloneImg.style.left = `-${100 * cloneElIndex}%`;
76
+ }
77
+
78
+ cloneImg.setAttribute('data-swiper-parallax', '10%');
79
+
80
+ cloneEl.setAttribute(
81
+ 'data-swiper-parallax',
82
+ `${
83
+ percentagePerItem *
84
+ (cloneElIndex + 1) *
85
+ (cloneElIndex % 2 === 0 ? 0.5 : -1)
86
+ }%`,
87
+ );
88
+ });
89
+ });
90
+ };
91
+
92
+ on('beforeInit', () => {
93
+ if (swiper.params.effect !== 'shutters') return;
94
+
95
+ swiper.classNames.push('swiper-shutters');
96
+
97
+ const overwriteParams = {
98
+ watchSlidesProgress: true,
99
+ parallax: { enabled: true },
100
+ };
101
+
102
+ Object.assign(swiper.params, overwriteParams);
103
+ Object.assign(swiper.originalParams, overwriteParams);
104
+ });
105
+ on('init', () => {
106
+ if (swiper.params.effect !== 'shutters') return;
107
+ createImages();
108
+ });
109
+
110
+ on('resize init', () => {
111
+ if (swiper.params.effect !== 'shutters') return;
112
+ setImages();
113
+ });
114
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * UI Initiative Slicer Slider
3
+ *
4
+ * Images slicer slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * October 25, 2023
13
+ *
14
+ */
15
+
16
+ .swiper-slicer .swiper-slide,
17
+ .swiper-slicer swiper-slide {
18
+ overflow: hidden;
19
+ }
20
+ .swiper-slicer-image, .swiper-slicer-image-clones, .swiper-slicer-image-clone {
21
+ position: absolute;
22
+ left: 0;
23
+ top: 0;
24
+ width: 100%;
25
+ height: 100%;
26
+ pointer-events: none;
27
+ }
28
+ .swiper-slicer-image {
29
+ display: none;
30
+ object-fit: cover;
31
+ object-position: center;
32
+ }
33
+ .swiper-slicer-image-clone {
34
+ overflow: hidden;
35
+ transition-timing-function: cubic-bezier(1, 0, 0.5, 1);
36
+ }
37
+ .swiper-slicer-image-clone .swiper-slicer-image {
38
+ display: block;
39
+ }
@@ -0,0 +1,198 @@
1
+ /**
2
+ * UI Initiative Slicer Slider
3
+ *
4
+ * Images slicer slider
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2023 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * October 25, 2023
13
+ *
14
+ */
15
+
16
+ if (typeof window !== 'undefined' && window.SwiperElementRegisterParams) {
17
+ window.SwiperElementRegisterParams(['slicerEffect']);
18
+ }
19
+
20
+ export default function EffectSlicer({ swiper, extendParams, on, emit }) {
21
+ extendParams({
22
+ slicerEffect: {
23
+ split: 5,
24
+ },
25
+ });
26
+
27
+ function effectVirtualTransitionEnd({ duration }) {
28
+ const { slides, activeIndex } = swiper;
29
+ if (duration !== 0) {
30
+ let eventTriggered = false;
31
+ const transitionEndTarget = slides[activeIndex].querySelector(
32
+ '.swiper-slicer-image-clone:nth-child(1)',
33
+ );
34
+ if (!transitionEndTarget) return;
35
+ const onTransitionEnd = (e) => {
36
+ if (e.target !== transitionEndTarget) return;
37
+ transitionEndTarget.removeEventListener(
38
+ 'transitionend',
39
+ onTransitionEnd,
40
+ );
41
+ if (eventTriggered) return;
42
+ if (!swiper || swiper.destroyed) return;
43
+ eventTriggered = true;
44
+ swiper.animating = false;
45
+
46
+ const evt = new window.CustomEvent('transitionend', {
47
+ bubbles: true,
48
+ cancelable: true,
49
+ });
50
+ swiper.wrapperEl.dispatchEvent(evt);
51
+ };
52
+ transitionEndTarget.addEventListener('transitionend', onTransitionEnd);
53
+ }
54
+ }
55
+
56
+ const createImages = () => {
57
+ swiper.slides.forEach((slideEl) => {
58
+ if (slideEl.querySelector('.swiper-slicer-image-clones')) return;
59
+ const imageEl = slideEl.querySelector('.swiper-slicer-image');
60
+ if (!imageEl) return;
61
+ const nextEl = imageEl.nextElementSibling;
62
+ const cloneContainerEl = document.createElement('div');
63
+ cloneContainerEl.classList.add('swiper-slicer-image-clones');
64
+ for (let i = 0; i < swiper.params.slicerEffect.split; i += 1) {
65
+ const div = document.createElement('div');
66
+ div.classList.add('swiper-slicer-image-clone');
67
+ div.appendChild(imageEl.cloneNode());
68
+ cloneContainerEl.appendChild(div);
69
+ }
70
+ if (nextEl) {
71
+ imageEl.parentNode.insertBefore(cloneContainerEl, nextEl);
72
+ } else {
73
+ imageEl.parentNode.appendChild(cloneContainerEl);
74
+ }
75
+ });
76
+ };
77
+
78
+ const setImages = () => {
79
+ swiper.slides.forEach((slideEl) =>
80
+ slideEl.querySelectorAll('.swiper-slicer-image').forEach((imageEl) => {
81
+ imageEl.style.width = `${swiper.width}px`;
82
+ imageEl.style.height = `${swiper.height}px`;
83
+ }),
84
+ );
85
+ swiper.slides.forEach((slideEl) => {
86
+ slideEl
87
+ .querySelectorAll('.swiper-slicer-image-clone')
88
+ .forEach((cloneEl, cloneElIndex) => {
89
+ const cloneImg = cloneEl.querySelector('.swiper-slicer-image');
90
+ if (swiper.params.direction === 'horizontal') {
91
+ cloneEl.style.height = `${100 / swiper.params.slicerEffect.split}%`;
92
+ cloneEl.style.top = `${
93
+ (100 / swiper.params.slicerEffect.split) * cloneElIndex
94
+ }%`;
95
+ cloneImg.style.top = `-${100 * cloneElIndex}%`;
96
+ } else {
97
+ cloneEl.style.width = `${100 / swiper.params.slicerEffect.split}%`;
98
+ cloneEl.style.left = `${
99
+ (100 / swiper.params.slicerEffect.split) * cloneElIndex
100
+ }%`;
101
+ cloneImg.style.left = `-${100 * cloneElIndex}%`;
102
+ }
103
+ });
104
+ });
105
+ };
106
+
107
+ const setTranslate = () => {
108
+ const axis = swiper.params.direction === 'vertical' ? 'Y' : 'X';
109
+ swiper.slides.forEach((slideEl, slideIndex) => {
110
+ slideEl.style.transform = `translate${axis}(-${slideIndex * 100}%)`;
111
+ const slideProgress = slideEl.progress;
112
+ const contentEl = slideEl.querySelector('.swiper-slide-content');
113
+ if (contentEl) {
114
+ contentEl.style.transform = `translate${axis}(${
115
+ swiper.size * -slideProgress * 1.2
116
+ }px)`;
117
+ }
118
+ const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');
119
+ images.forEach((imageEl) => {
120
+ const progress = -slideProgress;
121
+ imageEl.style.transform = `translate${axis}(${progress * 100}%)`;
122
+ });
123
+ });
124
+ };
125
+
126
+ const setTransition = (duration) => {
127
+ swiper.slides.forEach((slideEl) => {
128
+ const images = slideEl.querySelectorAll('.swiper-slicer-image-clone');
129
+ const contentEl = slideEl.querySelector('.swiper-slide-content');
130
+ if (contentEl) {
131
+ contentEl.style.transitionDuration = `${duration}ms`;
132
+ }
133
+ // eslint-disable-next-line
134
+
135
+ images.forEach((imageEl, imageIndex) => {
136
+ if (duration === 0) {
137
+ imageEl.style.transitionTimingFunction = 'ease-out';
138
+ imageEl.style.transitionDuration = `${
139
+ swiper.params.speed +
140
+ (swiper.params.speed / (images.length - 1)) *
141
+ (images.length - imageIndex - 1)
142
+ }ms`;
143
+ } else {
144
+ imageEl.style.transitionTimingFunction = '';
145
+ imageEl.style.transitionDuration = `${
146
+ duration +
147
+ (duration / (images.length - 1)) * (images.length - imageIndex - 1)
148
+ }ms`;
149
+ }
150
+ });
151
+ });
152
+
153
+ effectVirtualTransitionEnd({ duration });
154
+ };
155
+
156
+ on('setTranslate', () => {
157
+ if (swiper.params.effect !== 'slicer') return;
158
+
159
+ setTranslate();
160
+ });
161
+
162
+ on('setTransition', (_s, duration) => {
163
+ if (swiper.params.effect !== 'slicer') return;
164
+ setTransition(duration);
165
+ });
166
+
167
+ on('slidesLengthChange', () => {
168
+ createImages();
169
+ setImages();
170
+ });
171
+
172
+ on('beforeInit', () => {
173
+ if (swiper.params.effect !== 'slicer') return;
174
+
175
+ swiper.classNames.push('swiper-slicer');
176
+
177
+ const overwriteParams = {
178
+ slidesPerView: 1,
179
+ slidesPerGroup: 1,
180
+ watchSlidesProgress: true,
181
+ spaceBetween: 0,
182
+ virtualTranslate: true,
183
+ };
184
+
185
+ Object.assign(swiper.params, overwriteParams);
186
+ Object.assign(swiper.originalParams, overwriteParams);
187
+ });
188
+ on('init', () => {
189
+ if (swiper.params.effect !== 'slicer') return;
190
+ createImages();
191
+ emit('setTranslate', swiper, swiper.translate);
192
+ });
193
+
194
+ on('resize init', () => {
195
+ if (swiper.params.effect !== 'slicer') return;
196
+ setImages();
197
+ });
198
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * UI Initiative Swiper GL
3
+ *
4
+ * Stunning WebGL image transitions
5
+ *
6
+ * https://uiinitiative.com
7
+ *
8
+ * Copyright 2024 UI Initiative
9
+ *
10
+ * Released under the UI Initiative Regular License
11
+ *
12
+ * April 25, 2024
13
+ */
14
+
15
+ .swiper-gl {
16
+ position: relative;
17
+ margin: 0 auto;
18
+ max-width: 100%;
19
+ overflow: hidden;
20
+ }
21
+ .swiper-gl .swiper-slide,
22
+ .swiper-gl swiper-slide {
23
+ position: relative;
24
+ }
25
+ .swiper-gl .swiper-gl-image {
26
+ display: none;
27
+ }
28
+ .swiper-gl > canvas {
29
+ position: absolute;
30
+ left: 0;
31
+ top: 0;
32
+ width: 100%;
33
+ height: 100%;
34
+ }
35
+
36
+ .swiper-gl-image {
37
+ width: 100%;
38
+ height: 100%;
39
+ object-fit: cover;
40
+ object-position: center;
41
+ position: absolute;
42
+ left: 0;
43
+ top: 0;
44
+ }