uikit 3.11.2-dev.f2970ffaa → 3.11.2-dev.f3ade19c4

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 (225) 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 +54 -18
  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 +133 -201
  19. package/dist/css/uikit-core-rtl.min.css +1 -1
  20. package/dist/css/uikit-core.css +133 -201
  21. package/dist/css/uikit-core.min.css +1 -1
  22. package/dist/css/uikit-rtl.css +135 -207
  23. package/dist/css/uikit-rtl.min.css +1 -1
  24. package/dist/css/uikit.css +135 -207
  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 +408 -439
  29. package/dist/js/components/filter.min.js +1 -1
  30. package/dist/js/components/lightbox-panel.js +1091 -1319
  31. package/dist/js/components/lightbox-panel.min.js +1 -1
  32. package/dist/js/components/lightbox.js +1137 -1396
  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 +347 -372
  37. package/dist/js/components/parallax.min.js +1 -1
  38. package/dist/js/components/slider-parallax.js +345 -360
  39. package/dist/js/components/slider-parallax.min.js +1 -1
  40. package/dist/js/components/slider.js +749 -843
  41. package/dist/js/components/slider.min.js +1 -1
  42. package/dist/js/components/slideshow-parallax.js +345 -360
  43. package/dist/js/components/slideshow-parallax.min.js +1 -1
  44. package/dist/js/components/slideshow.js +628 -798
  45. package/dist/js/components/slideshow.min.js +1 -1
  46. package/dist/js/components/sortable.js +587 -620
  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 +5326 -6526
  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 +8031 -9659
  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 +15 -28
  62. package/src/js/api/global.js +6 -12
  63. package/src/js/api/hooks.js +14 -33
  64. package/src/js/api/instance.js +7 -15
  65. package/src/js/api/state.js +199 -187
  66. package/src/js/components/countdown.js +26 -52
  67. package/src/js/components/filter.js +70 -66
  68. package/src/js/components/index.js +13 -13
  69. package/src/js/components/internal/lightbox-animations.js +14 -25
  70. package/src/js/components/internal/slider-preload.js +9 -0
  71. package/src/js/components/internal/slider-transitioner.js +66 -45
  72. package/src/js/components/internal/slideshow-animations.js +46 -64
  73. package/src/js/components/lightbox-panel.js +107 -105
  74. package/src/js/components/lightbox.js +17 -39
  75. package/src/js/components/notification.js +49 -43
  76. package/src/js/components/parallax.js +21 -46
  77. package/src/js/components/slider-parallax.js +13 -23
  78. package/src/js/components/slider.js +117 -89
  79. package/src/js/components/slideshow-parallax.js +1 -1
  80. package/src/js/components/slideshow.js +15 -13
  81. package/src/js/components/sortable.js +125 -106
  82. package/src/js/components/tooltip.js +41 -31
  83. package/src/js/components/upload.js +52 -63
  84. package/src/js/core/accordion.js +58 -48
  85. package/src/js/core/alert.js +9 -17
  86. package/src/js/core/core.js +17 -69
  87. package/src/js/core/cover.js +15 -15
  88. package/src/js/core/drop.js +110 -94
  89. package/src/js/core/form-custom.js +22 -27
  90. package/src/js/core/gif.js +3 -7
  91. package/src/js/core/grid.js +57 -58
  92. package/src/js/core/height-match.js +16 -29
  93. package/src/js/core/height-viewport.js +30 -34
  94. package/src/js/core/icon.js +47 -52
  95. package/src/js/core/img.js +153 -143
  96. package/src/js/core/index.js +39 -39
  97. package/src/js/core/leader.js +9 -18
  98. package/src/js/core/margin.js +21 -37
  99. package/src/js/core/modal.js +49 -36
  100. package/src/js/core/nav.js +2 -4
  101. package/src/js/core/navbar.js +113 -85
  102. package/src/js/core/offcanvas.js +51 -54
  103. package/src/js/core/overflow-auto.js +13 -17
  104. package/src/js/core/responsive.js +14 -12
  105. package/src/js/core/scroll.js +10 -20
  106. package/src/js/core/scrollspy-nav.js +34 -31
  107. package/src/js/core/scrollspy.js +37 -54
  108. package/src/js/core/sticky.js +175 -123
  109. package/src/js/core/svg.js +68 -83
  110. package/src/js/core/switcher.js +56 -47
  111. package/src/js/core/tab.js +7 -10
  112. package/src/js/core/toggle.js +69 -68
  113. package/src/js/core/video.js +22 -21
  114. package/src/js/mixin/animate.js +19 -20
  115. package/src/js/mixin/class.js +2 -4
  116. package/src/js/mixin/container.js +7 -11
  117. package/src/js/mixin/internal/animate-fade.js +73 -30
  118. package/src/js/mixin/internal/animate-slide.js +58 -41
  119. package/src/js/mixin/internal/slideshow-animations.js +7 -14
  120. package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
  121. package/src/js/mixin/lazyload.js +20 -0
  122. package/src/js/mixin/media.js +5 -10
  123. package/src/js/mixin/modal.js +89 -66
  124. package/src/js/mixin/parallax.js +149 -107
  125. package/src/js/mixin/position.js +26 -20
  126. package/src/js/mixin/slider-autoplay.js +12 -21
  127. package/src/js/mixin/slider-drag.js +64 -65
  128. package/src/js/mixin/slider-nav.js +26 -35
  129. package/src/js/mixin/slider-reactive.js +2 -8
  130. package/src/js/mixin/slider.js +47 -60
  131. package/src/js/mixin/slideshow.js +12 -22
  132. package/src/js/mixin/swipe.js +72 -0
  133. package/src/js/mixin/togglable.js +89 -63
  134. package/src/js/uikit-core.js +2 -4
  135. package/src/js/uikit.js +2 -4
  136. package/src/js/util/ajax.js +25 -40
  137. package/src/js/util/animation.js +77 -75
  138. package/src/js/util/attr.js +17 -21
  139. package/src/js/util/class.js +14 -52
  140. package/src/js/util/dimensions.js +78 -49
  141. package/src/js/util/dom.js +39 -66
  142. package/src/js/util/env.js +7 -12
  143. package/src/js/util/event.js +60 -59
  144. package/src/js/util/fastdom.js +1 -6
  145. package/src/js/util/filter.js +17 -34
  146. package/src/js/util/index.js +1 -1
  147. package/src/js/util/lang.js +82 -121
  148. package/src/js/util/mouse.js +19 -17
  149. package/src/js/util/observer.js +36 -0
  150. package/src/js/util/options.js +35 -49
  151. package/src/js/util/player.js +41 -36
  152. package/src/js/util/position.js +54 -46
  153. package/src/js/util/selector.js +43 -58
  154. package/src/js/util/style.js +39 -49
  155. package/src/js/util/viewport.js +75 -64
  156. package/src/less/components/base.less +10 -33
  157. package/src/less/components/flex.less +0 -9
  158. package/src/less/components/form-range.less +48 -95
  159. package/src/less/components/form.less +0 -1
  160. package/src/less/components/height.less +3 -0
  161. package/src/less/components/leader.less +0 -1
  162. package/src/less/components/lightbox.less +0 -1
  163. package/src/less/components/modal.less +3 -7
  164. package/src/less/components/navbar.less +0 -7
  165. package/src/less/components/progress.less +14 -36
  166. package/src/less/components/slider.less +0 -3
  167. package/src/less/components/slideshow.less +0 -3
  168. package/src/less/components/text.less +16 -32
  169. package/src/less/components/utility.less +25 -0
  170. package/src/scss/components/base.scss +10 -33
  171. package/src/scss/components/flex.scss +0 -9
  172. package/src/scss/components/form-range.scss +48 -95
  173. package/src/scss/components/form.scss +3 -4
  174. package/src/scss/components/height.scss +3 -0
  175. package/src/scss/components/icon.scss +2 -2
  176. package/src/scss/components/leader.scss +0 -1
  177. package/src/scss/components/lightbox.scss +0 -1
  178. package/src/scss/components/modal.scss +3 -7
  179. package/src/scss/components/navbar.scss +0 -7
  180. package/src/scss/components/progress.scss +14 -36
  181. package/src/scss/components/search.scss +1 -1
  182. package/src/scss/components/slider.scss +0 -3
  183. package/src/scss/components/slideshow.scss +0 -3
  184. package/src/scss/components/text.scss +16 -32
  185. package/src/scss/components/utility.scss +25 -0
  186. package/src/scss/mixins-theme.scss +1 -1
  187. package/src/scss/mixins.scss +1 -1
  188. package/src/scss/variables-theme.scss +9 -9
  189. package/src/scss/variables.scss +9 -9
  190. package/tests/align.html +10 -10
  191. package/tests/animation.html +2 -2
  192. package/tests/article.html +2 -2
  193. package/tests/base.html +3 -3
  194. package/tests/card.html +10 -10
  195. package/tests/column.html +3 -3
  196. package/tests/comment.html +9 -9
  197. package/tests/dotnav.html +3 -3
  198. package/tests/image.html +296 -64
  199. package/tests/images/image-type.avif +0 -0
  200. package/tests/images/image-type.jpeg +0 -0
  201. package/tests/images/image-type.webp +0 -0
  202. package/tests/index.html +8 -8
  203. package/tests/js/index.js +114 -85
  204. package/tests/lightbox.html +10 -10
  205. package/tests/marker.html +2 -2
  206. package/tests/modal.html +8 -9
  207. package/tests/navbar.html +2 -2
  208. package/tests/overlay.html +7 -7
  209. package/tests/parallax.html +16 -7
  210. package/tests/position.html +12 -12
  211. package/tests/slidenav.html +12 -12
  212. package/tests/slider.html +20 -20
  213. package/tests/sortable.html +1 -1
  214. package/tests/sticky-parallax.html +87 -99
  215. package/tests/sticky.html +56 -24
  216. package/tests/svg.html +6 -6
  217. package/tests/table.html +11 -11
  218. package/tests/thumbnav.html +12 -12
  219. package/tests/transition.html +30 -30
  220. package/tests/utility.html +50 -33
  221. package/tests/video.html +1 -1
  222. package/tests/width.html +1 -1
  223. package/src/js/mixin/flex-bug.js +0 -56
  224. package/src/js/util/promise.js +0 -191
  225. package/tests/images/animated.gif +0 -0
@@ -1,7 +1,6 @@
1
- import {addClass, ajax, matches, noop, on, removeClass, trigger} from 'uikit-util';
1
+ import { addClass, ajax, matches, noop, on, removeClass, trigger } from 'uikit-util';
2
2
 
3
3
  export default {
4
-
5
4
  props: {
6
5
  allow: String,
7
6
  clsDragover: String,
@@ -16,7 +15,7 @@ export default {
16
15
  name: String,
17
16
  params: Object,
18
17
  type: String,
19
- url: String
18
+ url: String,
20
19
  },
21
20
 
22
21
  data: {
@@ -44,13 +43,11 @@ export default {
44
43
  load: noop,
45
44
  loadEnd: noop,
46
45
  loadStart: noop,
47
- progress: noop
46
+ progress: noop,
48
47
  },
49
48
 
50
49
  events: {
51
-
52
50
  change(e) {
53
-
54
51
  if (!matches(e.target, 'input[type="file"]')) {
55
52
  return;
56
53
  }
@@ -69,7 +66,7 @@ export default {
69
66
 
70
67
  const transfer = e.dataTransfer;
71
68
 
72
- if (!transfer || !transfer.files) {
69
+ if (!transfer?.files) {
73
70
  return;
74
71
  }
75
72
 
@@ -90,108 +87,100 @@ export default {
90
87
  dragleave(e) {
91
88
  stop(e);
92
89
  removeClass(this.$el, this.clsDragover);
93
- }
94
-
90
+ },
95
91
  },
96
92
 
97
93
  methods: {
98
-
99
- upload(files) {
100
-
94
+ async upload(files) {
101
95
  if (!files.length) {
102
96
  return;
103
97
  }
104
98
 
105
99
  trigger(this.$el, 'upload', [files]);
106
100
 
107
- for (let i = 0; i < files.length; i++) {
108
-
109
- if (this.maxSize && this.maxSize * 1000 < files[i].size) {
101
+ for (const file of files) {
102
+ if (this.maxSize && this.maxSize * 1000 < file.size) {
110
103
  this.fail(this.msgInvalidSize.replace('%s', this.maxSize));
111
104
  return;
112
105
  }
113
106
 
114
- if (this.allow && !match(this.allow, files[i].name)) {
107
+ if (this.allow && !match(this.allow, file.name)) {
115
108
  this.fail(this.msgInvalidName.replace('%s', this.allow));
116
109
  return;
117
110
  }
118
111
 
119
- if (this.mime && !match(this.mime, files[i].type)) {
112
+ if (this.mime && !match(this.mime, file.type)) {
120
113
  this.fail(this.msgInvalidMime.replace('%s', this.mime));
121
114
  return;
122
115
  }
123
-
124
116
  }
125
117
 
126
118
  if (!this.multiple) {
127
- files = [files[0]];
119
+ files = files.slice(0, 1);
128
120
  }
129
121
 
130
122
  this.beforeAll(this, files);
131
123
 
132
124
  const chunks = chunk(files, this.concurrent);
133
- const upload = files => {
134
-
125
+ const upload = async (files) => {
135
126
  const data = new FormData();
136
127
 
137
- files.forEach(file => data.append(this.name, file));
128
+ files.forEach((file) => data.append(this.name, file));
138
129
 
139
130
  for (const key in this.params) {
140
131
  data.append(key, this.params[key]);
141
132
  }
142
133
 
143
- ajax(this.url, {
144
- data,
145
- method: this.method,
146
- responseType: this.type,
147
- beforeSend: env => {
148
-
149
- const {xhr} = env;
150
- xhr.upload && on(xhr.upload, 'progress', this.progress);
151
- ['loadStart', 'load', 'loadEnd', 'abort'].forEach(type =>
152
- on(xhr, type.toLowerCase(), this[type])
153
- );
154
-
155
- return this.beforeSend(env);
156
-
134
+ try {
135
+ const xhr = await ajax(this.url, {
136
+ data,
137
+ method: this.method,
138
+ responseType: this.type,
139
+ beforeSend: (env) => {
140
+ const { xhr } = env;
141
+ xhr.upload && on(xhr.upload, 'progress', this.progress);
142
+ for (const type of ['loadStart', 'load', 'loadEnd', 'abort']) {
143
+ on(xhr, type.toLowerCase(), this[type]);
144
+ }
145
+
146
+ return this.beforeSend(env);
147
+ },
148
+ });
149
+
150
+ this.complete(xhr);
151
+
152
+ if (chunks.length) {
153
+ await upload(chunks.shift());
154
+ } else {
155
+ this.completeAll(xhr);
157
156
  }
158
- }).then(
159
- xhr => {
160
-
161
- this.complete(xhr);
162
-
163
- if (chunks.length) {
164
- upload(chunks.shift());
165
- } else {
166
- this.completeAll(xhr);
167
- }
168
-
169
- },
170
- e => this.error(e)
171
- );
172
-
157
+ } catch (e) {
158
+ this.error(e);
159
+ }
173
160
  };
174
161
 
175
- upload(chunks.shift());
176
-
177
- }
178
-
179
- }
180
-
162
+ await upload(chunks.shift());
163
+ },
164
+ },
181
165
  };
182
166
 
183
167
  function match(pattern, path) {
184
- return path.match(new RegExp(`^${pattern.replace(/\//g, '\\/').replace(/\*\*/g, '(\\/[^\\/]+)*').replace(/\*/g, '[^\\/]+').replace(/((?!\\))\?/g, '$1.')}$`, 'i'));
168
+ return path.match(
169
+ new RegExp(
170
+ `^${pattern
171
+ .replace(/\//g, '\\/')
172
+ .replace(/\*\*/g, '(\\/[^\\/]+)*')
173
+ .replace(/\*/g, '[^\\/]+')
174
+ .replace(/((?!\\))\?/g, '$1.')}$`,
175
+ 'i'
176
+ )
177
+ );
185
178
  }
186
179
 
187
180
  function chunk(files, size) {
188
181
  const chunks = [];
189
182
  for (let i = 0; i < files.length; i += size) {
190
- const chunk = [];
191
- for (let j = 0; j < size; j++) {
192
- chunk.push(files[i + j]);
193
- }
194
- chunks.push(chunk);
183
+ chunks.push(files.slice(i, i + size));
195
184
  }
196
185
  return chunks;
197
186
  }
@@ -1,10 +1,24 @@
1
1
  import Class from '../mixin/class';
2
- import {default as Togglable, toggleHeight} from '../mixin/togglable';
3
- import {$, $$, attr, filter, getIndex, hasClass, includes, index, isInView, scrollIntoView, toggleClass, unwrap, wrapAll} from 'uikit-util';
2
+ import Lazyload from '../mixin/lazyload';
3
+ import { default as Togglable, toggleHeight } from '../mixin/togglable';
4
+ import {
5
+ $,
6
+ $$,
7
+ attr,
8
+ filter,
9
+ getIndex,
10
+ hasClass,
11
+ includes,
12
+ index,
13
+ isInView,
14
+ scrollIntoView,
15
+ toggleClass,
16
+ unwrap,
17
+ wrapAll,
18
+ } from 'uikit-util';
4
19
 
5
20
  export default {
6
-
7
- mixins: [Class, Togglable],
21
+ mixins: [Class, Lazyload, Togglable],
8
22
 
9
23
  props: {
10
24
  targets: String,
@@ -14,7 +28,7 @@ export default {
14
28
  toggle: String,
15
29
  content: String,
16
30
  transition: String,
17
- offset: Number
31
+ offset: Number,
18
32
  },
19
33
 
20
34
  data: {
@@ -27,48 +41,45 @@ export default {
27
41
  toggle: '> .uk-accordion-title',
28
42
  content: '> .uk-accordion-content',
29
43
  transition: 'ease',
30
- offset: 0
44
+ offset: 0,
31
45
  },
32
46
 
33
47
  computed: {
34
-
35
48
  items: {
36
-
37
- get({targets}, $el) {
49
+ get({ targets }, $el) {
38
50
  return $$(targets, $el);
39
51
  },
40
52
 
41
53
  watch(items, prev) {
42
-
43
- items.forEach(el => hide($(this.content, el), !hasClass(el, this.clsOpen)));
54
+ items.forEach((el) => hide($(this.content, el), !hasClass(el, this.clsOpen)));
44
55
 
45
56
  if (prev || hasClass(items, this.clsOpen)) {
46
57
  return;
47
58
  }
48
59
 
49
- const active = this.active !== false && items[Number(this.active)]
50
- || !this.collapsible && items[0];
60
+ const active =
61
+ (this.active !== false && items[Number(this.active)]) ||
62
+ (!this.collapsible && items[0]);
51
63
 
52
64
  if (active) {
53
65
  this.toggle(active, false);
54
66
  }
55
-
56
67
  },
57
68
 
58
- immediate: true
59
-
69
+ immediate: true,
60
70
  },
61
71
 
62
- toggles({toggle}) {
63
- return this.items.map(item => $(toggle, item));
64
- }
72
+ toggles({ toggle }) {
73
+ return this.items.map((item) => $(toggle, item));
74
+ },
75
+ },
65
76
 
77
+ connected() {
78
+ this.lazyload();
66
79
  },
67
80
 
68
81
  events: [
69
-
70
82
  {
71
-
72
83
  name: 'click',
73
84
 
74
85
  delegate() {
@@ -78,16 +89,12 @@ export default {
78
89
  handler(e) {
79
90
  e.preventDefault();
80
91
  this.toggle(index(this.toggles, e.current));
81
- }
82
-
83
- }
84
-
92
+ },
93
+ },
85
94
  ],
86
95
 
87
96
  methods: {
88
-
89
97
  toggle(item, animate) {
90
-
91
98
  let items = [this.items[getIndex(item, this.items)]];
92
99
  const activeItems = filter(this.items, `.${this.clsOpen}`);
93
100
 
@@ -95,44 +102,47 @@ export default {
95
102
  items = items.concat(activeItems);
96
103
  }
97
104
 
98
- if (!this.collapsible && activeItems.length < 2 && !filter(items, `:not(.${this.clsOpen})`).length) {
105
+ if (
106
+ !this.collapsible &&
107
+ activeItems.length < 2 &&
108
+ !filter(items, `:not(.${this.clsOpen})`).length
109
+ ) {
99
110
  return;
100
111
  }
101
112
 
102
- items.forEach(el => this.toggleElement(el, !hasClass(el, this.clsOpen), (el, show) => {
113
+ for (const el of items) {
114
+ this.toggleElement(el, !hasClass(el, this.clsOpen), async (el, show) => {
115
+ toggleClass(el, this.clsOpen, show);
116
+ attr($(this.$props.toggle, el), 'aria-expanded', show);
103
117
 
104
- toggleClass(el, this.clsOpen, show);
105
- attr($(this.$props.toggle, el), 'aria-expanded', show);
118
+ const content = $(`${el._wrapper ? '> * ' : ''}${this.content}`, el);
106
119
 
107
- const content = $(`${el._wrapper ? '> * ' : ''}${this.content}`, el);
108
-
109
- if (animate === false || !this.hasTransition) {
110
- hide(content, !show);
111
- return;
112
- }
120
+ if (animate === false || !this.hasTransition) {
121
+ hide(content, !show);
122
+ return;
123
+ }
113
124
 
114
- if (!el._wrapper) {
115
- el._wrapper = wrapAll(content, `<div${show ? ' hidden' : ''}>`);
116
- }
125
+ if (!el._wrapper) {
126
+ el._wrapper = wrapAll(content, `<div${show ? ' hidden' : ''}>`);
127
+ }
117
128
 
118
- hide(content, false);
119
- return toggleHeight(this)(el._wrapper, show).then(() => {
129
+ hide(content, false);
130
+ await toggleHeight(this)(el._wrapper, show);
120
131
  hide(content, !show);
132
+
121
133
  delete el._wrapper;
122
134
  unwrap(content);
123
135
 
124
136
  if (show) {
125
137
  const toggle = $(this.$props.toggle, el);
126
138
  if (!isInView(toggle)) {
127
- scrollIntoView(toggle, {offset: this.offset});
139
+ scrollIntoView(toggle, { offset: this.offset });
128
140
  }
129
141
  }
130
142
  });
131
- }));
132
- }
133
-
134
- }
135
-
143
+ }
144
+ },
145
+ },
136
146
  };
137
147
 
138
148
  function hide(el, hide) {
@@ -1,28 +1,24 @@
1
1
  import Class from '../mixin/class';
2
2
  import Togglable from '../mixin/togglable';
3
- import {assign} from 'uikit-util';
4
3
 
5
4
  export default {
6
-
7
5
  mixins: [Class, Togglable],
8
6
 
9
7
  args: 'animation',
10
8
 
11
9
  props: {
12
- close: String
10
+ close: String,
13
11
  },
14
12
 
15
13
  data: {
16
14
  animation: [true],
17
15
  selClose: '.uk-alert-close',
18
16
  duration: 150,
19
- hideProps: assign({opacity: 0}, Togglable.data.hideProps)
17
+ hideProps: { opacity: 0, ...Togglable.data.hideProps },
20
18
  },
21
19
 
22
20
  events: [
23
-
24
21
  {
25
-
26
22
  name: 'click',
27
23
 
28
24
  delegate() {
@@ -32,18 +28,14 @@ export default {
32
28
  handler(e) {
33
29
  e.preventDefault();
34
30
  this.close();
35
- }
36
-
37
- }
38
-
31
+ },
32
+ },
39
33
  ],
40
34
 
41
35
  methods: {
42
-
43
- close() {
44
- this.toggleElement(this.$el).then(() => this.$destroy(true));
45
- }
46
-
47
- }
48
-
36
+ async close() {
37
+ await this.toggleElement(this.$el);
38
+ this.$destroy(true);
39
+ },
40
+ },
49
41
  };
@@ -1,7 +1,6 @@
1
- import {css, fastdom, getEventPos, inBrowser, isTouch, on, once, parent, pointerCancel, pointerDown, pointerUp, toMs, trigger} from 'uikit-util';
1
+ import { css, fastdom, inBrowser, observeResize, on, toMs } from 'uikit-util';
2
2
 
3
3
  export default function (UIkit) {
4
-
5
4
  if (!inBrowser) {
6
5
  return;
7
6
  }
@@ -13,80 +12,29 @@ export default function (UIkit) {
13
12
  return;
14
13
  }
15
14
  pendingResize = true;
16
- fastdom.read(() => pendingResize = false);
15
+ fastdom.read(() => (pendingResize = false));
17
16
  UIkit.update(null, 'resize');
18
17
  };
19
18
 
20
19
  on(window, 'load resize', handleResize);
21
- on(document, 'loadedmetadata load', handleResize, true);
22
-
23
- if ('ResizeObserver' in window) {
24
- (new ResizeObserver(handleResize)).observe(document.documentElement);
25
- }
26
-
27
- // throttle `scroll` event (Safari triggers multiple `scroll` events per frame)
28
- let pending;
29
- on(window, 'scroll', e => {
30
-
31
- if (pending) {
32
- return;
33
- }
34
- pending = true;
35
- fastdom.read(() => pending = false);
36
-
37
- UIkit.update(null, e.type);
38
20
 
39
- }, {passive: true, capture: true});
21
+ observeResize(document.documentElement, handleResize);
40
22
 
41
23
  let started = 0;
42
- on(document, 'animationstart', ({target}) => {
43
- if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {
44
-
45
- started++;
46
- css(document.documentElement, 'overflowX', 'hidden');
47
- setTimeout(() => {
48
- if (!--started) {
49
- css(document.documentElement, 'overflowX', '');
50
- }
51
- }, toMs(css(target, 'animationDuration')) + 100);
52
- }
53
- }, true);
54
-
55
- on(document, pointerDown, e => {
56
-
57
- if (!isTouch(e)) {
58
- return;
59
- }
60
-
61
- // Handle Swipe Gesture
62
- const pos = getEventPos(e);
63
- const target = 'tagName' in e.target ? e.target : parent(e.target);
64
- once(document, `${pointerUp} ${pointerCancel} scroll`, e => {
65
-
66
- const {x, y} = getEventPos(e);
67
-
68
- // swipe
69
- if (e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
70
-
24
+ on(
25
+ document,
26
+ 'animationstart',
27
+ ({ target }) => {
28
+ if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {
29
+ started++;
30
+ css(document.documentElement, 'overflowX', 'hidden');
71
31
  setTimeout(() => {
72
- trigger(target, 'swipe');
73
- trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`);
74
- });
75
-
32
+ if (!--started) {
33
+ css(document.documentElement, 'overflowX', '');
34
+ }
35
+ }, toMs(css(target, 'animationDuration')) + 100);
76
36
  }
77
-
78
- });
79
-
80
- }, {passive: true});
81
-
82
- }
83
-
84
- function swipeDirection(x1, y1, x2, y2) {
85
- return Math.abs(x1 - x2) >= Math.abs(y1 - y2)
86
- ? x1 - x2 > 0
87
- ? 'Left'
88
- : 'Right'
89
- : y1 - y2 > 0
90
- ? 'Up'
91
- : 'Down';
37
+ },
38
+ true
39
+ );
92
40
  }
@@ -1,33 +1,35 @@
1
1
  import Video from './video';
2
- import {css, Dimensions, parent} from 'uikit-util';
2
+ import { css, Dimensions, observeResize, parent } from 'uikit-util';
3
3
 
4
4
  export default {
5
-
6
5
  mixins: [Video],
7
6
 
8
7
  props: {
9
8
  width: Number,
10
- height: Number
9
+ height: Number,
11
10
  },
12
11
 
13
12
  data: {
14
- automute: true
13
+ automute: true,
15
14
  },
16
15
 
17
- update: {
16
+ connected() {
17
+ this.registerObserver(observeResize(this.$el, () => this.$emit('resize')));
18
+ },
18
19
 
20
+ update: {
19
21
  read() {
20
-
21
22
  const el = this.$el;
22
- const {offsetHeight: height, offsetWidth: width} = getPositionedParent(el) || parent(el);
23
+ const { offsetHeight: height, offsetWidth: width } =
24
+ getPositionedParent(el) || parent(el);
23
25
  const dim = Dimensions.cover(
24
26
  {
25
27
  width: this.width || el.naturalWidth || el.videoWidth || el.clientWidth,
26
- height: this.height || el.naturalHeight || el.videoHeight || el.clientHeight
28
+ height: this.height || el.naturalHeight || el.videoHeight || el.clientHeight,
27
29
  },
28
30
  {
29
31
  width: width + (width % 2 ? 1 : 0),
30
- height: height + (height % 2 ? 1 : 0)
32
+ height: height + (height % 2 ? 1 : 0),
31
33
  }
32
34
  );
33
35
 
@@ -38,14 +40,12 @@ export default {
38
40
  return dim;
39
41
  },
40
42
 
41
- write({height, width}) {
42
- css(this.$el, {height, width});
43
+ write({ height, width }) {
44
+ css(this.$el, { height, width });
43
45
  },
44
46
 
45
- events: ['resize']
46
-
47
- }
48
-
47
+ events: ['resize'],
48
+ },
49
49
  };
50
50
 
51
51
  function getPositionedParent(el) {