uikit 3.11.2-dev.31cd2ba38 → 3.11.2-dev.3dfa2c50b

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 (168) hide show
  1. package/.eslintrc.json +4 -49
  2. package/.prettierignore +14 -0
  3. package/.prettierrc.json +13 -0
  4. package/.webstorm.js +3 -3
  5. package/CHANGELOG.md +7 -11
  6. package/build/.eslintrc.json +1 -3
  7. package/build/build.js +26 -28
  8. package/build/icons.js +7 -11
  9. package/build/less.js +48 -36
  10. package/build/package.json +2 -2
  11. package/build/prefix.js +21 -18
  12. package/build/publishDev.js +6 -8
  13. package/build/release.js +20 -17
  14. package/build/scope.js +21 -11
  15. package/build/scss.js +72 -39
  16. package/build/util.js +71 -62
  17. package/build/wrapper/icons.js +0 -2
  18. package/dist/css/uikit-core-rtl.css +42 -17
  19. package/dist/css/uikit-core-rtl.min.css +1 -1
  20. package/dist/css/uikit-core.css +42 -17
  21. package/dist/css/uikit-core.min.css +1 -1
  22. package/dist/css/uikit-rtl.css +42 -17
  23. package/dist/css/uikit-rtl.min.css +1 -1
  24. package/dist/css/uikit.css +42 -17
  25. package/dist/css/uikit.min.css +1 -1
  26. package/dist/js/components/countdown.js +88 -133
  27. package/dist/js/components/countdown.min.js +1 -1
  28. package/dist/js/components/filter.js +409 -438
  29. package/dist/js/components/filter.min.js +1 -1
  30. package/dist/js/components/lightbox-panel.js +1116 -1305
  31. package/dist/js/components/lightbox-panel.min.js +1 -1
  32. package/dist/js/components/lightbox.js +1164 -1383
  33. package/dist/js/components/lightbox.min.js +1 -1
  34. package/dist/js/components/notification.js +94 -114
  35. package/dist/js/components/notification.min.js +1 -1
  36. package/dist/js/components/parallax.js +294 -345
  37. package/dist/js/components/parallax.min.js +1 -1
  38. package/dist/js/components/slider-parallax.js +292 -344
  39. package/dist/js/components/slider-parallax.min.js +1 -1
  40. package/dist/js/components/slider.js +727 -850
  41. package/dist/js/components/slider.min.js +1 -1
  42. package/dist/js/components/slideshow-parallax.js +292 -344
  43. package/dist/js/components/slideshow-parallax.min.js +1 -1
  44. package/dist/js/components/slideshow.js +615 -799
  45. package/dist/js/components/slideshow.min.js +1 -1
  46. package/dist/js/components/sortable.js +588 -619
  47. package/dist/js/components/sortable.min.js +1 -1
  48. package/dist/js/components/tooltip.js +324 -356
  49. package/dist/js/components/tooltip.min.js +1 -1
  50. package/dist/js/components/upload.js +155 -167
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5266 -6572
  53. package/dist/js/uikit-core.min.js +1 -1
  54. package/dist/js/uikit-icons.js +7 -9
  55. package/dist/js/uikit-icons.min.js +1 -1
  56. package/dist/js/uikit.js +8126 -9876
  57. package/dist/js/uikit.min.js +1 -1
  58. package/jsconfig.json +1 -1
  59. package/package.json +64 -60
  60. package/src/js/api/boot.js +25 -32
  61. package/src/js/api/component.js +23 -27
  62. package/src/js/api/global.js +6 -12
  63. package/src/js/api/hooks.js +13 -32
  64. package/src/js/api/instance.js +7 -15
  65. package/src/js/api/state.js +79 -100
  66. package/src/js/components/countdown.js +24 -50
  67. package/src/js/components/filter.js +71 -66
  68. package/src/js/components/index.js +13 -13
  69. package/src/js/components/internal/lightbox-animations.js +11 -23
  70. package/src/js/components/internal/slider-transitioner.js +66 -45
  71. package/src/js/components/internal/slideshow-animations.js +42 -61
  72. package/src/js/components/lightbox-panel.js +135 -109
  73. package/src/js/components/lightbox.js +18 -39
  74. package/src/js/components/notification.js +49 -43
  75. package/src/js/components/parallax.js +16 -30
  76. package/src/js/components/slider-parallax.js +13 -23
  77. package/src/js/components/slider.js +75 -64
  78. package/src/js/components/slideshow-parallax.js +1 -1
  79. package/src/js/components/slideshow.js +8 -13
  80. package/src/js/components/sortable.js +125 -106
  81. package/src/js/components/tooltip.js +41 -31
  82. package/src/js/components/upload.js +52 -63
  83. package/src/js/core/accordion.js +53 -48
  84. package/src/js/core/alert.js +10 -17
  85. package/src/js/core/core.js +74 -53
  86. package/src/js/core/cover.js +11 -15
  87. package/src/js/core/drop.js +106 -92
  88. package/src/js/core/form-custom.js +20 -25
  89. package/src/js/core/gif.js +3 -7
  90. package/src/js/core/grid.js +57 -58
  91. package/src/js/core/height-match.js +16 -29
  92. package/src/js/core/height-viewport.js +28 -35
  93. package/src/js/core/icon.js +38 -50
  94. package/src/js/core/img.js +130 -105
  95. package/src/js/core/index.js +39 -39
  96. package/src/js/core/leader.js +9 -18
  97. package/src/js/core/margin.js +21 -37
  98. package/src/js/core/modal.js +50 -36
  99. package/src/js/core/nav.js +2 -4
  100. package/src/js/core/navbar.js +112 -88
  101. package/src/js/core/offcanvas.js +49 -53
  102. package/src/js/core/overflow-auto.js +13 -17
  103. package/src/js/core/responsive.js +14 -12
  104. package/src/js/core/scroll.js +10 -20
  105. package/src/js/core/scrollspy-nav.js +34 -31
  106. package/src/js/core/scrollspy.js +37 -54
  107. package/src/js/core/sticky.js +130 -91
  108. package/src/js/core/svg.js +60 -79
  109. package/src/js/core/switcher.js +47 -46
  110. package/src/js/core/tab.js +7 -10
  111. package/src/js/core/toggle.js +64 -66
  112. package/src/js/core/video.js +11 -22
  113. package/src/js/mixin/animate.js +19 -20
  114. package/src/js/mixin/class.js +2 -4
  115. package/src/js/mixin/container.js +7 -11
  116. package/src/js/mixin/internal/animate-fade.js +73 -30
  117. package/src/js/mixin/internal/animate-slide.js +61 -41
  118. package/src/js/mixin/internal/slideshow-animations.js +7 -14
  119. package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
  120. package/src/js/mixin/media.js +5 -10
  121. package/src/js/mixin/modal.js +89 -66
  122. package/src/js/mixin/parallax.js +53 -48
  123. package/src/js/mixin/position.js +26 -20
  124. package/src/js/mixin/slider-autoplay.js +12 -21
  125. package/src/js/mixin/slider-drag.js +64 -65
  126. package/src/js/mixin/slider-nav.js +26 -35
  127. package/src/js/mixin/slider-reactive.js +2 -8
  128. package/src/js/mixin/slider.js +51 -50
  129. package/src/js/mixin/slideshow.js +13 -19
  130. package/src/js/mixin/togglable.js +90 -63
  131. package/src/js/uikit-core.js +2 -4
  132. package/src/js/uikit.js +2 -4
  133. package/src/js/util/ajax.js +27 -43
  134. package/src/js/util/animation.js +82 -75
  135. package/src/js/util/attr.js +17 -21
  136. package/src/js/util/class.js +14 -52
  137. package/src/js/util/dimensions.js +56 -43
  138. package/src/js/util/dom.js +40 -73
  139. package/src/js/util/env.js +7 -12
  140. package/src/js/util/event.js +60 -59
  141. package/src/js/util/fastdom.js +1 -6
  142. package/src/js/util/filter.js +17 -34
  143. package/src/js/util/index.js +0 -1
  144. package/src/js/util/lang.js +79 -119
  145. package/src/js/util/mouse.js +19 -17
  146. package/src/js/util/options.js +42 -47
  147. package/src/js/util/player.js +40 -36
  148. package/src/js/util/position.js +54 -46
  149. package/src/js/util/promise.js +0 -191
  150. package/src/js/util/selector.js +39 -48
  151. package/src/js/util/style.js +36 -46
  152. package/src/js/util/viewport.js +75 -64
  153. package/src/less/components/flex.less +0 -9
  154. package/src/less/components/navbar.less +0 -7
  155. package/src/less/components/utility.less +22 -0
  156. package/src/scss/components/flex.scss +0 -9
  157. package/src/scss/components/form.scss +3 -3
  158. package/src/scss/components/icon.scss +2 -2
  159. package/src/scss/components/navbar.scss +0 -7
  160. package/src/scss/components/search.scss +1 -1
  161. package/src/scss/components/utility.scss +22 -0
  162. package/src/scss/variables-theme.scss +6 -6
  163. package/src/scss/variables.scss +6 -6
  164. package/tests/image.html +38 -22
  165. package/tests/js/index.js +114 -85
  166. package/src/js/mixin/flex-bug.js +0 -56
  167. package/tests/images/test.avif +0 -0
  168. package/tests/images/test.webp +0 -0
@@ -1,15 +1,14 @@
1
- import Animations, {scale3d, translate, translated} from '../../mixin/internal/slideshow-animations';
2
- import {assign, css} from 'uikit-util';
1
+ import Animations, {
2
+ scale3d,
3
+ translate,
4
+ translated,
5
+ } from '../../mixin/internal/slideshow-animations';
6
+ import { assign, css } from 'uikit-util';
3
7
 
4
8
  export default assign({}, Animations, {
5
-
6
9
  fade: {
7
-
8
10
  show() {
9
- return [
10
- {opacity: 0, zIndex: 0},
11
- {zIndex: -1}
12
- ];
11
+ return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }];
13
12
  },
14
13
 
15
14
  percent(current) {
@@ -17,21 +16,13 @@ export default assign({}, Animations, {
17
16
  },
18
17
 
19
18
  translate(percent) {
20
- return [
21
- {opacity: 1 - percent, zIndex: 0},
22
- {zIndex: -1}
23
- ];
24
- }
25
-
19
+ return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }];
20
+ },
26
21
  },
27
22
 
28
23
  scale: {
29
-
30
24
  show() {
31
- return [
32
- {opacity: 0, transform: scale3d(1 + .5), zIndex: 0},
33
- {zIndex: -1}
34
- ];
25
+ return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }];
35
26
  },
36
27
 
37
28
  percent(current) {
@@ -40,79 +31,69 @@ export default assign({}, Animations, {
40
31
 
41
32
  translate(percent) {
42
33
  return [
43
- {opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0},
44
- {zIndex: -1}
34
+ { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
35
+ { zIndex: -1 },
45
36
  ];
46
- }
47
-
37
+ },
48
38
  },
49
39
 
50
40
  pull: {
51
-
52
41
  show(dir) {
53
42
  return dir < 0
54
43
  ? [
55
- {transform: translate(30), zIndex: -1},
56
- {transform: translate(), zIndex: 0}
57
- ]
44
+ { transform: translate(30), zIndex: -1 },
45
+ { transform: translate(), zIndex: 0 },
46
+ ]
58
47
  : [
59
- {transform: translate(-100), zIndex: 0},
60
- {transform: translate(), zIndex: -1}
61
- ];
48
+ { transform: translate(-100), zIndex: 0 },
49
+ { transform: translate(), zIndex: -1 },
50
+ ];
62
51
  },
63
52
 
64
53
  percent(current, next, dir) {
65
- return dir < 0
66
- ? 1 - translated(next)
67
- : translated(current);
54
+ return dir < 0 ? 1 - translated(next) : translated(current);
68
55
  },
69
56
 
70
57
  translate(percent, dir) {
71
58
  return dir < 0
72
59
  ? [
73
- {transform: translate(30 * percent), zIndex: -1},
74
- {transform: translate(-100 * (1 - percent)), zIndex: 0}
75
- ]
60
+ { transform: translate(30 * percent), zIndex: -1 },
61
+ { transform: translate(-100 * (1 - percent)), zIndex: 0 },
62
+ ]
76
63
  : [
77
- {transform: translate(-percent * 100), zIndex: 0},
78
- {transform: translate(30 * (1 - percent)), zIndex: -1}
79
- ];
80
- }
81
-
64
+ { transform: translate(-percent * 100), zIndex: 0 },
65
+ { transform: translate(30 * (1 - percent)), zIndex: -1 },
66
+ ];
67
+ },
82
68
  },
83
69
 
84
70
  push: {
85
-
86
71
  show(dir) {
87
72
  return dir < 0
88
73
  ? [
89
- {transform: translate(100), zIndex: 0},
90
- {transform: translate(), zIndex: -1}
91
- ]
74
+ { transform: translate(100), zIndex: 0 },
75
+ { transform: translate(), zIndex: -1 },
76
+ ]
92
77
  : [
93
- {transform: translate(-30), zIndex: -1},
94
- {transform: translate(), zIndex: 0}
95
- ];
78
+ { transform: translate(-30), zIndex: -1 },
79
+ { transform: translate(), zIndex: 0 },
80
+ ];
96
81
  },
97
82
 
98
83
  percent(current, next, dir) {
99
- return dir > 0
100
- ? 1 - translated(next)
101
- : translated(current);
84
+ return dir > 0 ? 1 - translated(next) : translated(current);
102
85
  },
103
86
 
104
87
  translate(percent, dir) {
105
88
  return dir < 0
106
89
  ? [
107
- {transform: translate(percent * 100), zIndex: 0},
108
- {transform: translate(-30 * (1 - percent)), zIndex: -1}
109
- ]
90
+ { transform: translate(percent * 100), zIndex: 0 },
91
+ { transform: translate(-30 * (1 - percent)), zIndex: -1 },
92
+ ]
110
93
  : [
111
- {transform: translate(-30 * percent), zIndex: -1},
112
- {transform: translate(100 * (1 - percent)), zIndex: 0}
113
- ];
114
- }
115
-
116
- }
117
-
94
+ { transform: translate(-30 * percent), zIndex: -1 },
95
+ { transform: translate(100 * (1 - percent)), zIndex: 0 },
96
+ ];
97
+ },
98
+ },
118
99
  });
@@ -3,10 +3,25 @@ import Container from '../mixin/container';
3
3
  import Modal from '../mixin/modal';
4
4
  import Slideshow from '../mixin/slideshow';
5
5
  import Togglable from '../mixin/togglable';
6
- import {$, addClass, ajax, append, assign, attr, fragment, getImage, getIndex, html, on, pointerDown, pointerMove, removeClass, Transition, trigger} from 'uikit-util';
6
+ import {
7
+ $,
8
+ addClass,
9
+ append,
10
+ assign,
11
+ attr,
12
+ fragment,
13
+ getImage,
14
+ getIndex,
15
+ html,
16
+ on,
17
+ pointerDown,
18
+ pointerMove,
19
+ removeClass,
20
+ Transition,
21
+ trigger,
22
+ } from 'uikit-util';
7
23
 
8
24
  export default {
9
-
10
25
  mixins: [Container, Modal, Togglable, Slideshow],
11
26
 
12
27
  functional: true,
@@ -15,7 +30,7 @@ export default {
15
30
  delayControls: Number,
16
31
  preload: Number,
17
32
  videoAutoplay: Boolean,
18
- template: String
33
+ template: String,
19
34
  },
20
35
 
21
36
  data: () => ({
@@ -40,39 +55,31 @@ export default {
40
55
  <a class="uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade" href uk-slidenav-previous uk-lightbox-item="previous"></a>
41
56
  <a class="uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade" href uk-slidenav-next uk-lightbox-item="next"></a>
42
57
  <div class="uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque"></div>
43
- </div>`
58
+ </div>`,
44
59
  }),
45
60
 
46
61
  created() {
47
-
48
62
  const $el = $(this.template);
49
63
  const list = $(this.selList, $el);
50
64
  this.items.forEach(() => append(list, '<li>'));
51
65
 
52
66
  this.$mount(append(this.container, $el));
53
-
54
67
  },
55
68
 
56
69
  computed: {
57
-
58
- caption({selCaption}, $el) {
70
+ caption({ selCaption }, $el) {
59
71
  return $(selCaption, $el);
60
- }
61
-
72
+ },
62
73
  },
63
74
 
64
75
  events: [
65
-
66
76
  {
67
-
68
77
  name: `${pointerMove} ${pointerDown} keydown`,
69
78
 
70
- handler: 'showControls'
71
-
79
+ handler: 'showControls',
72
80
  },
73
81
 
74
82
  {
75
-
76
83
  name: 'click',
77
84
 
78
85
  self: true,
@@ -82,58 +89,48 @@ export default {
82
89
  },
83
90
 
84
91
  handler(e) {
85
-
86
92
  if (e.defaultPrevented) {
87
93
  return;
88
94
  }
89
95
 
90
96
  this.hide();
91
- }
92
-
97
+ },
93
98
  },
94
99
 
95
100
  {
96
-
97
101
  name: 'shown',
98
102
 
99
103
  self: true,
100
104
 
101
105
  handler() {
102
106
  this.showControls();
103
- }
104
-
107
+ },
105
108
  },
106
109
 
107
110
  {
108
-
109
111
  name: 'hide',
110
112
 
111
113
  self: true,
112
114
 
113
115
  handler() {
114
-
115
116
  this.hideControls();
116
117
 
117
118
  removeClass(this.slides, this.clsActive);
118
119
  Transition.stop(this.slides);
119
-
120
- }
120
+ },
121
121
  },
122
122
 
123
123
  {
124
-
125
124
  name: 'hidden',
126
125
 
127
126
  self: true,
128
127
 
129
128
  handler() {
130
129
  this.$destroy(true);
131
- }
132
-
130
+ },
133
131
  },
134
132
 
135
133
  {
136
-
137
134
  name: 'keyup',
138
135
 
139
136
  el() {
@@ -141,7 +138,6 @@ export default {
141
138
  },
142
139
 
143
140
  handler(e) {
144
-
145
141
  if (!this.isToggled(this.$el) || !this.draggable) {
146
142
  return;
147
143
  }
@@ -154,15 +150,13 @@ export default {
154
150
  this.show('next');
155
151
  break;
156
152
  }
157
- }
153
+ },
158
154
  },
159
155
 
160
156
  {
161
-
162
157
  name: 'beforeitemshow',
163
158
 
164
159
  handler(e) {
165
-
166
160
  if (this.isToggled()) {
167
161
  return;
168
162
  }
@@ -176,44 +170,34 @@ export default {
176
170
  this.animation = Animations['scale'];
177
171
  removeClass(e.target, this.clsActive);
178
172
  this.stack.splice(1, 0, this.index);
179
-
180
- }
181
-
173
+ },
182
174
  },
183
175
 
184
176
  {
185
-
186
177
  name: 'itemshow',
187
178
 
188
179
  handler() {
189
-
190
180
  html(this.caption, this.getItem().caption || '');
191
181
 
192
182
  for (let j = -this.preload; j <= this.preload; j++) {
193
183
  this.loadItem(this.index + j);
194
184
  }
195
-
196
- }
197
-
185
+ },
198
186
  },
199
187
 
200
188
  {
201
-
202
189
  name: 'itemshown',
203
190
 
204
191
  handler() {
205
192
  this.draggable = this.$props.draggable;
206
- }
207
-
193
+ },
208
194
  },
209
195
 
210
196
  {
211
-
212
197
  name: 'itemload',
213
198
 
214
- handler(_, item) {
215
-
216
- const {source: src, type, alt = '', poster, attrs = {}} = item;
199
+ async handler(_, item) {
200
+ const { source: src, type, alt = '', poster, attrs = {} } = item;
217
201
 
218
202
  this.setItem(item, '<span uk-spinner></span>');
219
203
 
@@ -228,80 +212,126 @@ export default {
228
212
  allowfullscreen: '',
229
213
  style: 'max-width: 100%; box-sizing: border-box;',
230
214
  'uk-responsive': '',
231
- 'uk-video': `${this.videoAutoplay}`
215
+ 'uk-video': `${this.videoAutoplay}`,
232
216
  };
233
217
 
234
218
  // Image
235
219
  if (type === 'image' || src.match(/\.(avif|jpe?g|a?png|gif|svg|webp)($|\?)/i)) {
236
-
237
- getImage(src, attrs.srcset, attrs.size).then(
238
- ({width, height}) => this.setItem(item, createEl('img', assign({src, width, height, alt}, attrs))),
239
- () => this.setError(item)
240
- );
241
-
242
- // Video
220
+ try {
221
+ const { width, height } = await getImage(src, attrs.srcset, attrs.size);
222
+ this.setItem(
223
+ item,
224
+ createEl('img', assign({ src, width, height, alt }, attrs))
225
+ );
226
+ } catch (e) {
227
+ this.setError(item);
228
+ }
229
+
230
+ // Video
243
231
  } else if (type === 'video' || src.match(/\.(mp4|webm|ogv)($|\?)/i)) {
244
-
245
- const video = createEl('video', assign({
246
- src,
247
- poster,
248
- controls: '',
249
- playsinline: '',
250
- 'uk-video': `${this.videoAutoplay}`
251
- }, attrs));
232
+ const video = createEl(
233
+ 'video',
234
+ assign(
235
+ {
236
+ src,
237
+ poster,
238
+ controls: '',
239
+ playsinline: '',
240
+ 'uk-video': `${this.videoAutoplay}`,
241
+ },
242
+ attrs
243
+ )
244
+ );
252
245
 
253
246
  on(video, 'loadedmetadata', () => {
254
- attr(video, {width: video.videoWidth, height: video.videoHeight});
247
+ attr(video, { width: video.videoWidth, height: video.videoHeight });
255
248
  this.setItem(item, video);
256
249
  });
257
250
  on(video, 'error', () => this.setError(item));
258
251
 
259
- // Iframe
252
+ // Iframe
260
253
  } else if (type === 'iframe' || src.match(/\.(html|php)($|\?)/i)) {
254
+ this.setItem(
255
+ item,
256
+ createEl(
257
+ 'iframe',
258
+ assign(
259
+ {
260
+ src,
261
+ frameborder: '0',
262
+ allowfullscreen: '',
263
+ class: 'uk-lightbox-iframe',
264
+ },
265
+ attrs
266
+ )
267
+ )
268
+ );
261
269
 
262
- this.setItem(item, createEl('iframe', assign({
263
- src,
264
- frameborder: '0',
265
- allowfullscreen: '',
266
- class: 'uk-lightbox-iframe'
267
- }, attrs)));
268
-
269
- // YouTube
270
- } else if ((matches = src.match(/\/\/(?:.*?youtube(-nocookie)?\..*?[?&]v=|youtu\.be\/)([\w-]{11})[&?]?(.*)?/))) {
271
-
272
- this.setItem(item, createEl('iframe', assign({
273
- src: `https://www.youtube${matches[1] || ''}.com/embed/${matches[2]}${matches[3] ? `?${matches[3]}` : ''}`,
274
- width: 1920,
275
- height: 1080
276
- }, iframeAttrs, attrs)));
277
-
278
- // Vimeo
279
- } else if ((matches = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/))) {
280
-
281
- ajax(`https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(src)}`, {
282
- responseType: 'json',
283
- withCredentials: false
284
- }).then(
285
- ({response: {height, width}}) => this.setItem(item, createEl('iframe', assign({
286
- src: `https://player.vimeo.com/video/${matches[1]}${matches[2] ? `?${matches[2]}` : ''}`,
287
- width,
288
- height
289
- }, iframeAttrs, attrs))),
290
- () => this.setError(item)
270
+ // YouTube
271
+ } else if (
272
+ (matches = src.match(
273
+ /\/\/(?:.*?youtube(-nocookie)?\..*?[?&]v=|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
274
+ ))
275
+ ) {
276
+ this.setItem(
277
+ item,
278
+ createEl(
279
+ 'iframe',
280
+ assign(
281
+ {
282
+ src: `https://www.youtube${matches[1] || ''}.com/embed/${
283
+ matches[2]
284
+ }${matches[3] ? `?${matches[3]}` : ''}`,
285
+ width: 1920,
286
+ height: 1080,
287
+ },
288
+ iframeAttrs,
289
+ attrs
290
+ )
291
+ )
291
292
  );
292
293
 
294
+ // Vimeo
295
+ } else if ((matches = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/))) {
296
+ try {
297
+ const { height, width } = await (
298
+ await fetch(
299
+ `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(
300
+ src
301
+ )}`,
302
+ {
303
+ credentials: 'omit',
304
+ }
305
+ )
306
+ ).json();
307
+
308
+ this.setItem(
309
+ item,
310
+ createEl(
311
+ 'iframe',
312
+ assign(
313
+ {
314
+ src: `https://player.vimeo.com/video/${matches[1]}${
315
+ matches[2] ? `?${matches[2]}` : ''
316
+ }`,
317
+ width,
318
+ height,
319
+ },
320
+ iframeAttrs,
321
+ attrs
322
+ )
323
+ )
324
+ );
325
+ } catch (e) {
326
+ this.setError(item);
327
+ }
293
328
  }
294
-
295
- }
296
-
297
- }
298
-
329
+ },
330
+ },
299
331
  ],
300
332
 
301
333
  methods: {
302
-
303
334
  loadItem(index = this.index) {
304
-
305
335
  const item = this.getItem(index);
306
336
 
307
337
  if (!this.getSlide(item).childElementCount) {
@@ -314,7 +344,7 @@ export default {
314
344
  },
315
345
 
316
346
  setItem(item, content) {
317
- trigger(this.$el, 'itemloaded', [this, html(this.getSlide(item), content) ]);
347
+ trigger(this.$el, 'itemloaded', [this, html(this.getSlide(item), content)]);
318
348
  },
319
349
 
320
350
  getSlide(item) {
@@ -326,20 +356,16 @@ export default {
326
356
  },
327
357
 
328
358
  showControls() {
329
-
330
359
  clearTimeout(this.controlsTimer);
331
360
  this.controlsTimer = setTimeout(this.hideControls, this.delayControls);
332
361
 
333
362
  addClass(this.$el, 'uk-active', 'uk-transition-active');
334
-
335
363
  },
336
364
 
337
365
  hideControls() {
338
366
  removeClass(this.$el, 'uk-active', 'uk-transition-active');
339
- }
340
-
341
- }
342
-
367
+ },
368
+ },
343
369
  };
344
370
 
345
371
  function createEl(tag, attrs) {