uikit 3.11.2-dev.54d67da03 → 3.11.2-dev.7dd548556

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 +724 -846
  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 +586 -617
  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 +150 -162
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5282 -6601
  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 +8121 -9883
  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 +80 -101
  66. package/src/js/components/countdown.js +23 -49
  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 +65 -44
  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 +17 -38
  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 +73 -61
  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 +121 -102
  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 +54 -49
  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 +15 -28
  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 +129 -134
  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 +111 -87
  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 +34 -51
  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 +63 -65
  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 +62 -63
  126. package/src/js/mixin/slider-nav.js +25 -34
  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 +9 -15
  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 +36 -54
  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 +41 -46
  147. package/src/js/util/player.js +40 -36
  148. package/src/js/util/position.js +53 -45
  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 -28
  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,54 +1,100 @@
1
- import {append, attr, children, createEvent, css, data, escape, fragment, hasAttr, includes, isArray, isEmpty, isUndefined, parent, parseOptions, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {
2
+ createEvent,
3
+ css,
4
+ Dimensions,
5
+ escape,
6
+ getImage,
7
+ includes,
8
+ isUndefined,
9
+ queryAll,
10
+ startsWith,
11
+ toFloat,
12
+ toPx,
13
+ trigger,
14
+ } from 'uikit-util';
2
15
 
3
16
  export default {
4
-
5
17
  args: 'dataSrc',
6
18
 
7
19
  props: {
8
20
  dataSrc: String,
9
- dataSources: String,
21
+ dataSrcset: Boolean,
22
+ sizes: String,
23
+ width: Number,
24
+ height: Number,
10
25
  offsetTop: String,
11
26
  offsetLeft: String,
12
- target: String
27
+ target: String,
13
28
  },
14
29
 
15
30
  data: {
16
31
  dataSrc: '',
17
- dataSources: [],
32
+ dataSrcset: false,
33
+ sizes: false,
34
+ width: false,
35
+ height: false,
18
36
  offsetTop: '50vh',
19
37
  offsetLeft: '50vw',
20
- target: false
38
+ target: false,
21
39
  },
22
40
 
23
41
  computed: {
42
+ cacheKey({ dataSrc }) {
43
+ return `${this.$name}.${dataSrc}`;
44
+ },
24
45
 
25
- target: {
46
+ width({ width, dataWidth }) {
47
+ return width || dataWidth;
48
+ },
49
+
50
+ height({ height, dataHeight }) {
51
+ return height || dataHeight;
52
+ },
53
+
54
+ sizes({ sizes, dataSizes }) {
55
+ return sizes || dataSizes;
56
+ },
57
+
58
+ isImg(_, $el) {
59
+ return isImg($el);
60
+ },
26
61
 
27
- get({target}) {
62
+ target: {
63
+ get({ target }) {
28
64
  return [this.$el, ...queryAll(target, this.$el)];
29
65
  },
30
66
 
31
67
  watch() {
32
68
  this.observe();
33
- }
69
+ },
70
+ },
34
71
 
35
- }
72
+ offsetTop({ offsetTop }) {
73
+ return toPx(offsetTop, 'height');
74
+ },
36
75
 
76
+ offsetLeft({ offsetLeft }) {
77
+ return toPx(offsetLeft, 'width');
78
+ },
37
79
  },
38
80
 
39
81
  connected() {
40
-
41
82
  if (!window.IntersectionObserver) {
42
- setSrcAttrs(this.$el, this.dataSrc);
83
+ setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
43
84
  return;
44
85
  }
45
86
 
46
- ensurePlaceholderImage(this.$el);
87
+ if (storage[this.cacheKey]) {
88
+ setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
89
+ } else if (this.isImg && this.width && this.height) {
90
+ setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
91
+ }
47
92
 
48
- const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(this.offsetLeft, 'width')}px`;
49
- this.observer = new IntersectionObserver(this.load, {rootMargin});
50
- this.observe();
93
+ this.observer = new IntersectionObserver(this.load, {
94
+ rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`,
95
+ });
51
96
 
97
+ requestAnimationFrame(this.observe);
52
98
  },
53
99
 
54
100
  disconnected() {
@@ -56,145 +102,92 @@ export default {
56
102
  },
57
103
 
58
104
  update: {
59
-
60
- write(store) {
61
- if (!this.observer || isImg(this.$el)) {
105
+ read({ image }) {
106
+ if (!this.observer) {
62
107
  return false;
63
108
  }
64
- const srcset = data(this.$el, 'data-srcset');
65
- if (srcset && window.devicePixelRatio !== 1) {
66
109
 
67
- const bgSize = css(this.$el, 'backgroundSize');
68
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
69
- store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
70
- css(this.$el, 'backgroundSize', `${store.bgSize}px`);
71
- }
110
+ if (!image && document.readyState === 'complete') {
111
+ this.load(this.observer.takeRecords());
112
+ }
72
113
 
114
+ if (this.isImg) {
115
+ return false;
73
116
  }
74
117
 
118
+ image &&
119
+ image.then(
120
+ (img) => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img))
121
+ );
75
122
  },
76
123
 
77
- events: ['resize']
124
+ write(data) {
125
+ if (this.dataSrcset && window.devicePixelRatio !== 1) {
126
+ const bgSize = css(this.$el, 'backgroundSize');
127
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
128
+ data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
129
+ css(this.$el, 'backgroundSize', `${data.bgSize}px`);
130
+ }
131
+ }
132
+ },
78
133
 
134
+ events: ['resize'],
79
135
  },
80
136
 
81
137
  methods: {
82
-
83
138
  load(entries) {
84
-
85
139
  // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
86
- if (!entries.some(entry => isUndefined(entry.isIntersecting) || entry.isIntersecting)) {
140
+ if (
141
+ !entries.some((entry) => isUndefined(entry.isIntersecting) || entry.isIntersecting)
142
+ ) {
87
143
  return;
88
144
  }
89
145
 
90
- if (this._data.image) {
91
- return this._data.image;
92
- }
93
-
94
- const image = isImg(this.$el)
95
- ? this.$el
96
- : getImageFromElement(
97
- this.$el,
98
- this.dataSrc,
99
- this.dataSources
100
- );
101
-
102
- this._data.image = image;
103
- setSrcAttrs(this.$el, image.currentSrc);
146
+ this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(
147
+ (img) => {
148
+ setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
149
+ storage[this.cacheKey] = currentSrc(img);
150
+ return img;
151
+ },
152
+ (e) => trigger(this.$el, new e.constructor(e.type, e))
153
+ );
104
154
 
105
155
  this.observer.disconnect();
106
156
  },
107
157
 
108
158
  observe() {
109
159
  if (this._connected && !this._data.image) {
110
- this.target.forEach(el => this.observer.observe(el));
160
+ this.target.forEach((el) => this.observer.observe(el));
111
161
  }
112
- }
113
-
114
- }
115
-
162
+ },
163
+ },
116
164
  };
117
165
 
118
- function setSrcAttrs(el, src) {
119
-
166
+ function setSrcAttrs(el, src, srcset, sizes) {
120
167
  if (isImg(el)) {
121
-
122
- const parentNode = parent(el);
123
- const elements = isPicture(parentNode) ? children(parentNode) : [el];
124
- elements.forEach(el => setSourceProps(el, el));
125
-
168
+ const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
169
+ set('sizes', sizes);
170
+ set('srcset', srcset);
171
+ set('src', src);
126
172
  } else if (src) {
127
-
128
173
  const change = !includes(el.style.backgroundImage, src);
129
174
  if (change) {
130
175
  css(el, 'backgroundImage', `url(${escape(src)})`);
131
176
  trigger(el, createEvent('load', false));
132
177
  }
133
-
134
- }
135
-
136
- }
137
-
138
- const srcProps = ['data-src', 'data-srcset', 'sizes'];
139
- function setSourceProps(sourceEl, targetEl) {
140
- srcProps.forEach(prop => {
141
- const value = data(sourceEl, prop);
142
- if (value) {
143
- attr(targetEl, prop.replace(/^(data-)+/, ''), value);
144
- }
145
- });
146
- }
147
-
148
- function getImageFromElement(el, src, sources) {
149
-
150
- if (!src) {
151
- return false;
152
- }
153
-
154
- const img = new Image();
155
-
156
- wrapInPicture(img, sources);
157
- setSourceProps(el, img);
158
- img.onload = () => setSrcAttrs(el, img.currentSrc);
159
- attr(img, 'src', src);
160
- return img;
161
- }
162
-
163
- function wrapInPicture(img, sources) {
164
-
165
- sources = parseSources(sources);
166
-
167
- if (sources.length) {
168
- const picture = fragment('<picture>');
169
- sources.forEach(attrs => {
170
- const source = fragment('<source>');
171
- attr(source, attrs);
172
- append(picture, source);
173
- });
174
- append(picture, img);
175
178
  }
176
179
  }
177
180
 
178
- function parseSources(sources) {
179
- if (!sources) {
180
- return [];
181
+ function getPlaceholderImage(width, height, sizes) {
182
+ if (sizes) {
183
+ ({ width, height } = Dimensions.ratio(
184
+ { width, height },
185
+ 'width',
186
+ toPx(sizesToPixel(sizes))
187
+ ));
181
188
  }
182
189
 
183
- if (startsWith(sources, '[')) {
184
- try {
185
- sources = JSON.parse(sources);
186
- } catch (e) {
187
- sources = [];
188
- }
189
- } else {
190
- sources = parseOptions(sources);
191
- }
192
-
193
- if (!isArray(sources)) {
194
- sources = [sources];
195
- }
196
-
197
- return sources.filter(source => !isEmpty(source));
190
+ return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
198
191
  }
199
192
 
200
193
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -218,11 +211,11 @@ const additionRe = /[+-]?(\d+)/g;
218
211
  function evaluateSize(size) {
219
212
  return startsWith(size, 'calc')
220
213
  ? size
221
- .slice(5, -1)
222
- .replace(sizeRe, size => toPx(size))
223
- .replace(/ /g, '')
224
- .match(additionRe)
225
- .reduce((a, b) => a + +b, 0)
214
+ .slice(5, -1)
215
+ .replace(sizeRe, (size) => toPx(size))
216
+ .replace(/ /g, '')
217
+ .match(additionRe)
218
+ .reduce((a, b) => a + +b, 0)
226
219
  : size;
227
220
  }
228
221
 
@@ -231,23 +224,25 @@ function getSourceSize(srcset, sizes) {
231
224
  const srcSize = toPx(sizesToPixel(sizes));
232
225
  const descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort((a, b) => a - b);
233
226
 
234
- return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
227
+ return descriptors.filter((size) => size >= srcSize)[0] || descriptors.pop() || '';
235
228
  }
236
229
 
237
- function ensurePlaceholderImage(el) {
238
- if (isImg(el) && !hasAttr(el, 'src')) {
239
- attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>');
240
- }
230
+ function isImg(el) {
231
+ return el.tagName === 'IMG';
241
232
  }
242
233
 
243
- function isPicture(el) {
244
- return isA(el, 'PICTURE');
234
+ function currentSrc(el) {
235
+ return el.currentSrc || el.src;
245
236
  }
246
237
 
247
- function isImg(el) {
248
- return isA(el, 'IMG');
249
- }
238
+ const key = '__test__';
239
+ let storage;
250
240
 
251
- function isA(el, tagName) {
252
- return el && el.tagName === tagName;
241
+ // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
242
+ try {
243
+ storage = window.sessionStorage || {};
244
+ storage[key] = 1;
245
+ delete storage[key];
246
+ } catch (e) {
247
+ storage = {};
253
248
  }
@@ -1,41 +1,41 @@
1
- export {default as Accordion} from './accordion';
2
- export {default as Alert} from './alert';
3
- export {default as Cover} from './cover';
4
- export {default as Drop, default as Dropdown} from './drop';
5
- export {default as FormCustom} from './form-custom';
6
- export {default as Gif} from './gif';
7
- export {default as Grid} from './grid';
8
- export {default as HeightMatch} from './height-match';
9
- export {default as HeightViewport} from './height-viewport';
10
- export {default as Icon} from './icon';
11
- export {default as Img} from './img';
12
- export {default as Leader} from './leader';
13
- export {default as Margin} from './margin';
14
- export {default as Modal} from './modal';
15
- export {default as Nav} from './nav';
16
- export {default as Navbar} from './navbar';
17
- export {default as Offcanvas} from './offcanvas';
18
- export {default as OverflowAuto} from './overflow-auto';
19
- export {default as Responsive} from './responsive';
20
- export {default as Scroll} from './scroll';
21
- export {default as Scrollspy} from './scrollspy';
22
- export {default as ScrollspyNav} from './scrollspy-nav';
23
- export {default as Sticky} from './sticky';
24
- export {default as Svg} from './svg';
25
- export {default as Switcher} from './switcher';
26
- export {default as Tab} from './tab';
27
- export {default as Toggle} from './toggle';
28
- export {default as Video} from './video';
1
+ export { default as Accordion } from './accordion';
2
+ export { default as Alert } from './alert';
3
+ export { default as Cover } from './cover';
4
+ export { default as Drop, default as Dropdown } from './drop';
5
+ export { default as FormCustom } from './form-custom';
6
+ export { default as Gif } from './gif';
7
+ export { default as Grid } from './grid';
8
+ export { default as HeightMatch } from './height-match';
9
+ export { default as HeightViewport } from './height-viewport';
10
+ export { default as Icon } from './icon';
11
+ export { default as Img } from './img';
12
+ export { default as Leader } from './leader';
13
+ export { default as Margin } from './margin';
14
+ export { default as Modal } from './modal';
15
+ export { default as Nav } from './nav';
16
+ export { default as Navbar } from './navbar';
17
+ export { default as Offcanvas } from './offcanvas';
18
+ export { default as OverflowAuto } from './overflow-auto';
19
+ export { default as Responsive } from './responsive';
20
+ export { default as Scroll } from './scroll';
21
+ export { default as Scrollspy } from './scrollspy';
22
+ export { default as ScrollspyNav } from './scrollspy-nav';
23
+ export { default as Sticky } from './sticky';
24
+ export { default as Svg } from './svg';
25
+ export { default as Switcher } from './switcher';
26
+ export { default as Tab } from './tab';
27
+ export { default as Toggle } from './toggle';
28
+ export { default as Video } from './video';
29
29
 
30
30
  // Icon components
31
- export {Close} from './icon';
32
- export {Spinner} from './icon';
33
- export {Slidenav as SlidenavNext} from './icon';
34
- export {Slidenav as SlidenavPrevious} from './icon';
35
- export {Search as SearchIcon} from './icon';
36
- export {IconComponent as Marker} from './icon';
37
- export {IconComponent as NavbarToggleIcon} from './icon';
38
- export {IconComponent as OverlayIcon} from './icon';
39
- export {IconComponent as PaginationNext} from './icon';
40
- export {IconComponent as PaginationPrevious} from './icon';
41
- export {IconComponent as Totop} from './icon';
31
+ export { Close } from './icon';
32
+ export { Spinner } from './icon';
33
+ export { Slidenav as SlidenavNext } from './icon';
34
+ export { Slidenav as SlidenavPrevious } from './icon';
35
+ export { Search as SearchIcon } from './icon';
36
+ export { IconComponent as Marker } from './icon';
37
+ export { IconComponent as NavbarToggleIcon } from './icon';
38
+ export { IconComponent as OverlayIcon } from './icon';
39
+ export { IconComponent as PaginationNext } from './icon';
40
+ export { IconComponent as PaginationPrevious } from './icon';
41
+ export { IconComponent as Totop } from './icon';
@@ -1,28 +1,25 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
- import {attr, getCssVar, toggleClass, unwrap, wrapInner} from 'uikit-util';
3
+ import { attr, getCssVar, toggleClass, unwrap, wrapInner } from 'uikit-util';
4
4
 
5
5
  export default {
6
-
7
6
  mixins: [Class, Media],
8
7
 
9
8
  props: {
10
- fill: String
9
+ fill: String,
11
10
  },
12
11
 
13
12
  data: {
14
13
  fill: '',
15
14
  clsWrapper: 'uk-leader-fill',
16
15
  clsHide: 'uk-leader-hide',
17
- attrFill: 'data-fill'
16
+ attrFill: 'data-fill',
18
17
  },
19
18
 
20
19
  computed: {
21
-
22
- fill({fill}) {
20
+ fill({ fill }) {
23
21
  return fill || getCssVar('leader-fill-content');
24
- }
25
-
22
+ },
26
23
  },
27
24
 
28
25
  connected() {
@@ -34,9 +31,7 @@ export default {
34
31
  },
35
32
 
36
33
  update: {
37
-
38
- read({changed, width}) {
39
-
34
+ read({ changed, width }) {
40
35
  const prev = width;
41
36
 
42
37
  width = Math.floor(this.$el.offsetWidth / 2);
@@ -45,23 +40,19 @@ export default {
45
40
  width,
46
41
  fill: this.fill,
47
42
  changed: changed || prev !== width,
48
- hide: !this.matchMedia
43
+ hide: !this.matchMedia,
49
44
  };
50
45
  },
51
46
 
52
47
  write(data) {
53
-
54
48
  toggleClass(this.wrapper, this.clsHide, data.hide);
55
49
 
56
50
  if (data.changed) {
57
51
  data.changed = false;
58
52
  attr(this.wrapper, this.attrFill, new Array(data.width).join(data.fill));
59
53
  }
60
-
61
54
  },
62
55
 
63
- events: ['resize']
64
-
65
- }
66
-
56
+ events: ['resize'],
57
+ },
67
58
  };
@@ -1,42 +1,37 @@
1
- import {isRtl, isVisible, offsetPosition, toggleClass} from 'uikit-util';
1
+ import { isRtl, isVisible, offsetPosition, toggleClass } from 'uikit-util';
2
2
 
3
3
  export default {
4
-
5
4
  props: {
6
5
  margin: String,
7
- firstColumn: Boolean
6
+ firstColumn: Boolean,
8
7
  },
9
8
 
10
9
  data: {
11
10
  margin: 'uk-margin-small-top',
12
- firstColumn: 'uk-first-column'
11
+ firstColumn: 'uk-first-column',
13
12
  },
14
13
 
15
14
  update: {
16
-
17
15
  read() {
18
-
19
16
  const rows = getRows(this.$el.children);
20
17
 
21
18
  return {
22
19
  rows,
23
- columns: getColumns(rows)
20
+ columns: getColumns(rows),
24
21
  };
25
22
  },
26
23
 
27
- write({columns, rows}) {
28
- for (let i = 0; i < rows.length; i++) {
29
- for (let j = 0; j < rows[i].length; j++) {
30
- toggleClass(rows[i][j], this.margin, i !== 0);
31
- toggleClass(rows[i][j], this.firstColumn, !!~columns[0].indexOf(rows[i][j]));
24
+ write({ columns, rows }) {
25
+ for (const row of rows) {
26
+ for (const column of row) {
27
+ toggleClass(column, this.margin, rows[0] !== row);
28
+ toggleClass(column, this.firstColumn, !!~columns[0].indexOf(column));
32
29
  }
33
30
  }
34
31
  },
35
32
 
36
- events: ['resize']
37
-
38
- }
39
-
33
+ events: ['resize'],
34
+ },
40
35
  };
41
36
 
42
37
  export function getRows(items) {
@@ -44,38 +39,30 @@ export function getRows(items) {
44
39
  }
45
40
 
46
41
  function getColumns(rows) {
47
-
48
42
  const columns = [];
49
43
 
50
- for (let i = 0; i < rows.length; i++) {
51
- const sorted = sortBy(rows[i], 'left', 'right');
44
+ for (const row of rows) {
45
+ const sorted = sortBy(row, 'left', 'right');
52
46
  for (let j = 0; j < sorted.length; j++) {
53
- columns[j] = !columns[j] ? sorted[j] : columns[j].concat(sorted[j]);
47
+ columns[j] = columns[j] ? columns[j].concat(sorted[j]) : sorted[j];
54
48
  }
55
49
  }
56
50
 
57
- return isRtl
58
- ? columns.reverse()
59
- : columns;
51
+ return isRtl ? columns.reverse() : columns;
60
52
  }
61
53
 
62
54
  function sortBy(items, startProp, endProp) {
63
-
64
55
  const sorted = [[]];
65
56
 
66
- for (let i = 0; i < items.length; i++) {
67
-
68
- const el = items[i];
69
-
57
+ for (const el of items) {
70
58
  if (!isVisible(el)) {
71
59
  continue;
72
60
  }
73
61
 
74
62
  let dim = getOffset(el);
75
63
 
76
- for (let j = sorted.length - 1; j >= 0; j--) {
77
-
78
- const current = sorted[j];
64
+ for (let i = sorted.length - 1; i >= 0; i--) {
65
+ const current = sorted[i];
79
66
 
80
67
  if (!current[0]) {
81
68
  current.push(el);
@@ -100,21 +87,18 @@ function sortBy(items, startProp, endProp) {
100
87
  break;
101
88
  }
102
89
 
103
- if (j === 0) {
90
+ if (i === 0) {
104
91
  sorted.unshift([el]);
105
92
  break;
106
93
  }
107
-
108
94
  }
109
-
110
95
  }
111
96
 
112
97
  return sorted;
113
98
  }
114
99
 
115
100
  function getOffset(element, offset = false) {
116
-
117
- let {offsetTop, offsetLeft, offsetHeight, offsetWidth} = element;
101
+ let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
118
102
 
119
103
  if (offset) {
120
104
  [offsetTop, offsetLeft] = offsetPosition(element);
@@ -124,6 +108,6 @@ function getOffset(element, offset = false) {
124
108
  top: offsetTop,
125
109
  left: offsetLeft,
126
110
  bottom: offsetTop + offsetHeight,
127
- right: offsetLeft + offsetWidth
111
+ right: offsetLeft + offsetWidth,
128
112
  };
129
113
  }