uikit 3.9.3-dev.770c92c8a → 3.9.5-dev.605a9ce7d

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 (51) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/build/build.js +4 -1
  3. package/build/util.js +24 -13
  4. package/dist/css/uikit-core-rtl.css +5 -2
  5. package/dist/css/uikit-core-rtl.min.css +1 -1
  6. package/dist/css/uikit-core.css +5 -2
  7. package/dist/css/uikit-core.min.css +1 -1
  8. package/dist/css/uikit-rtl.css +5 -2
  9. package/dist/css/uikit-rtl.min.css +1 -1
  10. package/dist/css/uikit.css +5 -2
  11. package/dist/css/uikit.min.css +1 -1
  12. package/dist/js/components/countdown.js +1 -1
  13. package/dist/js/components/countdown.min.js +1 -2
  14. package/dist/js/components/filter.js +1 -1
  15. package/dist/js/components/filter.min.js +1 -2
  16. package/dist/js/components/lightbox-panel.js +1 -1
  17. package/dist/js/components/lightbox-panel.min.js +1 -2
  18. package/dist/js/components/lightbox.js +1 -1
  19. package/dist/js/components/lightbox.min.js +1 -2
  20. package/dist/js/components/notification.js +1 -1
  21. package/dist/js/components/notification.min.js +1 -2
  22. package/dist/js/components/parallax.js +1 -1
  23. package/dist/js/components/parallax.min.js +1 -2
  24. package/dist/js/components/slider-parallax.js +1 -1
  25. package/dist/js/components/slider-parallax.min.js +1 -2
  26. package/dist/js/components/slider.js +1 -1
  27. package/dist/js/components/slider.min.js +1 -2
  28. package/dist/js/components/slideshow-parallax.js +1 -1
  29. package/dist/js/components/slideshow-parallax.min.js +1 -2
  30. package/dist/js/components/slideshow.js +1 -1
  31. package/dist/js/components/slideshow.min.js +1 -2
  32. package/dist/js/components/sortable.js +1 -1
  33. package/dist/js/components/sortable.min.js +1 -2
  34. package/dist/js/components/tooltip.js +1 -1
  35. package/dist/js/components/tooltip.min.js +1 -2
  36. package/dist/js/components/upload.js +1 -1
  37. package/dist/js/components/upload.min.js +1 -2
  38. package/dist/js/uikit-core.js +52 -45
  39. package/dist/js/uikit-core.min.js +1 -2
  40. package/dist/js/uikit-icons.js +1 -1
  41. package/dist/js/uikit-icons.min.js +1 -2
  42. package/dist/js/uikit.js +52 -45
  43. package/dist/js/uikit.min.js +1 -2
  44. package/package.json +6 -3
  45. package/src/js/core/img.js +49 -37
  46. package/src/js/core/sticky.js +3 -2
  47. package/src/less/components/utility.less +3 -1
  48. package/src/scss/components/utility.scss +2 -0
  49. package/src/scss/mixins-theme.scss +1 -1
  50. package/src/scss/mixins.scss +1 -1
  51. package/tests/comment.html +1 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.9.3-dev.770c92c8a",
5
+ "version": "3.9.5-dev.605a9ce7d",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -20,7 +20,7 @@
20
20
  "prefix": "node build/prefix",
21
21
  "scope": "node build/scope",
22
22
  "release": "node build/release",
23
- "watch-less": "watch-run -i -p 'src/less/**/*.less' yarn compile-less",
23
+ "watch": "watch-run -i -p 'src/less/**/*.less' yarn compile-less",
24
24
  "eslint": "eslint src/js",
25
25
  "eslint-fix": "eslint --fix src/js"
26
26
  },
@@ -41,6 +41,7 @@
41
41
  "camelcase": "^6.2.1",
42
42
  "clean-css": "^5.2.2",
43
43
  "dateformat": "^5.0.2",
44
+ "esbuild": "^0.13.14",
44
45
  "eslint": "^8.2.0",
45
46
  "fs-extra": "^10.0.0",
46
47
  "glob": "^7.2.0",
@@ -48,11 +49,13 @@
48
49
  "less": "^4.1.2",
49
50
  "minimist": "^1.2.5",
50
51
  "number-precision": "^1.5.1",
52
+ "p-limit": "^4.0.0",
51
53
  "postcss": "^8.3.11",
54
+ "prettier": "^2.4.1",
52
55
  "rollup": "^2.60.0",
56
+ "rollup-plugin-esbuild": "^4.7.1",
53
57
  "rollup-plugin-html": "^0.2.1",
54
58
  "rollup-plugin-modify": "^3.0.0",
55
- "rollup-plugin-terser": "^7.0.2",
56
59
  "rtlcss": "^3.5.0",
57
60
  "semver": "^7.3.2",
58
61
  "svgo": "^2.8.0",
@@ -1,13 +1,8 @@
1
- import {createEvent, css, Dimensions, escape, getImage, includes, isUndefined, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {attr, children, createEvent, css, data, Dimensions, escape, getImage, includes, isUndefined, once, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
2
2
 
3
3
  export default {
4
4
 
5
- args: 'dataSrc',
6
-
7
5
  props: {
8
- dataSrc: String,
9
- dataSrcset: Boolean,
10
- sizes: String,
11
6
  width: Number,
12
7
  height: Number,
13
8
  offsetTop: String,
@@ -16,9 +11,6 @@ export default {
16
11
  },
17
12
 
18
13
  data: {
19
- dataSrc: '',
20
- dataSrcset: false,
21
- sizes: false,
22
14
  width: false,
23
15
  height: false,
24
16
  offsetTop: '50vh',
@@ -28,8 +20,8 @@ export default {
28
20
 
29
21
  computed: {
30
22
 
31
- cacheKey({dataSrc}) {
32
- return `${this.$name}.${dataSrc}`;
23
+ cacheKey() {
24
+ return `${this.$name}.${data(this.$el, 'data-src')}`;
33
25
  },
34
26
 
35
27
  width({width, dataWidth}) {
@@ -40,14 +32,6 @@ export default {
40
32
  return height || dataHeight;
41
33
  },
42
34
 
43
- sizes({sizes, dataSizes}) {
44
- return sizes || dataSizes;
45
- },
46
-
47
- isImg(_, $el) {
48
- return isImg($el);
49
- },
50
-
51
35
  target: {
52
36
 
53
37
  get({target}) {
@@ -73,14 +57,14 @@ export default {
73
57
  connected() {
74
58
 
75
59
  if (!window.IntersectionObserver) {
76
- setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
60
+ setSrcAttrs(this.$el);
77
61
  return;
78
62
  }
79
63
 
80
64
  if (storage[this.cacheKey]) {
81
- setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
82
- } else if (this.isImg && this.width && this.height) {
83
- setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
65
+ setSrcAttrs(this.$el, storage[this.cacheKey]);
66
+ } else if (isImg(this.$el) && this.width && this.height) {
67
+ attr(this.$el, 'src', getPlaceholderImage(this.$el));
84
68
  }
85
69
 
86
70
  this.observer = new IntersectionObserver(this.load, {
@@ -107,7 +91,7 @@ export default {
107
91
  this.load(this.observer.takeRecords());
108
92
  }
109
93
 
110
- if (this.isImg) {
94
+ if (isImg(this.$el)) {
111
95
  return false;
112
96
  }
113
97
 
@@ -115,14 +99,15 @@ export default {
115
99
 
116
100
  },
117
101
 
118
- write(data) {
102
+ write(store) {
119
103
 
120
- if (this.dataSrcset && window.devicePixelRatio !== 1) {
104
+ const srcset = data(this.$el, 'data-srcset');
105
+ if (srcset && window.devicePixelRatio !== 1) {
121
106
 
122
107
  const bgSize = css(this.$el, 'backgroundSize');
123
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
124
- data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
125
- css(this.$el, 'backgroundSize', `${data.bgSize}px`);
108
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
109
+ store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
110
+ css(this.$el, 'backgroundSize', `${store.bgSize}px`);
126
111
  }
127
112
 
128
113
  }
@@ -142,9 +127,9 @@ export default {
142
127
  return;
143
128
  }
144
129
 
145
- this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(img => {
130
+ this._data.image = getImageFromElement(this.$el).then(img => {
146
131
 
147
- setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
132
+ setSrcAttrs(this.$el, currentSrc(img));
148
133
  storage[this.cacheKey] = currentSrc(img);
149
134
  return img;
150
135
 
@@ -163,13 +148,19 @@ export default {
163
148
 
164
149
  };
165
150
 
166
- function setSrcAttrs(el, src, srcset, sizes) {
151
+ const srcProps = ['data-src', 'data-srcset', 'sizes'];
152
+ function setSrcAttrs(el, src) {
167
153
 
154
+ const parentNode = parent(el);
168
155
  if (isImg(el)) {
169
- const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
170
- set('sizes', sizes);
171
- set('srcset', srcset);
172
- set('src', src);
156
+ (isPicture(parentNode) ? children(parentNode) : [el]).forEach(el =>
157
+ srcProps.forEach(prop => {
158
+ const value = data(el, prop);
159
+ if (value) {
160
+ attr(el, prop.replace(/^(data-)+/, ''), value);
161
+ }
162
+ })
163
+ );
173
164
  } else if (src) {
174
165
 
175
166
  const change = !includes(el.style.backgroundImage, src);
@@ -207,6 +198,19 @@ function sizesToPixel(sizes) {
207
198
  return matches || '100vw';
208
199
  }
209
200
 
201
+ function getImageFromElement(el) {
202
+ const parentNode = parent(el);
203
+ if (!isPicture(parentNode)) {
204
+ return getImage(...srcProps.map(prop => data(el, prop)));
205
+ }
206
+
207
+ return new Promise((resolve, reject) => {
208
+ const picture = parentNode.cloneNode(true);
209
+ once(picture, 'load error', e => e.type === 'error' ? reject(e) : resolve(e.target), true);
210
+ setSrcAttrs(el);
211
+ });
212
+ }
213
+
210
214
  const sizeRe = /\d+(?:\w+|%)/g;
211
215
  const additionRe = /[+-]?(\d+)/g;
212
216
  function evaluateSize(size) {
@@ -228,8 +232,16 @@ function getSourceSize(srcset, sizes) {
228
232
  return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
229
233
  }
230
234
 
235
+ function isPicture(el) {
236
+ return isA(el, 'PICTURE');
237
+ }
238
+
231
239
  function isImg(el) {
232
- return el.tagName === 'IMG';
240
+ return isA(el, 'IMG');
241
+ }
242
+
243
+ function isA(el, tagName) {
244
+ return el && el.tagName === tagName;
233
245
  }
234
246
 
235
247
  function currentSrc(el) {
@@ -146,9 +146,10 @@ export default {
146
146
 
147
147
  height = !this.isActive ? this.$el.offsetHeight : height;
148
148
 
149
- this.topOffset = offset(this.isFixed ? this.placeholder : this.$el).top;
149
+ const referenceElement = this.isFixed ? this.placeholder : this.$el;
150
+ this.topOffset = offset(referenceElement).top;
150
151
  this.bottomOffset = this.topOffset + height;
151
- this.offsetParentTop = offset(this.$el.offsetParent).top;
152
+ this.offsetParentTop = offset(referenceElement.offsetParent).top;
152
153
 
153
154
  const bottom = parseProp('bottom', this);
154
155
 
@@ -380,6 +380,8 @@
380
380
  .hook-logo-hover();
381
381
  }
382
382
 
383
+ .uk-logo > :where(img, svg, video) { display: block; }
384
+
383
385
  .uk-logo-inverse { display: none; }
384
386
 
385
387
 
@@ -491,7 +493,7 @@
491
493
  }
492
494
 
493
495
  .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
494
- .uk-logo-inverse { display: inline; }
496
+ .uk-logo-inverse { display: block; }
495
497
 
496
498
  }
497
499
 
@@ -380,6 +380,8 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
380
380
  @if(mixin-exists(hook-logo-hover)) {@include hook-logo-hover();}
381
381
  }
382
382
 
383
+ .uk-logo > :where(img, svg, video) { display: block; }
384
+
383
385
  .uk-logo-inverse { display: none; }
384
386
 
385
387
 
@@ -1559,7 +1559,7 @@
1559
1559
  }
1560
1560
 
1561
1561
  .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
1562
- .uk-logo-inverse { display: inline; }
1562
+ .uk-logo-inverse { display: block; }
1563
1563
 
1564
1564
  }
1565
1565
  @mixin hook-inverse(){
@@ -1313,7 +1313,7 @@
1313
1313
  }
1314
1314
 
1315
1315
  .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
1316
- .uk-logo-inverse { display: inline; }
1316
+ .uk-logo-inverse { display: block; }
1317
1317
 
1318
1318
  }
1319
1319
  @mixin hook-inverse(){
@@ -19,7 +19,7 @@
19
19
  <ul class="uk-comment-list">
20
20
  <li>
21
21
  <article class="uk-comment">
22
- <header class="uk-comment-header"">
22
+ <header class="uk-comment-header">
23
23
  <div class="uk-grid-medium uk-flex-middle" uk-grid>
24
24
  <div class="uk-width-auto">
25
25
  <img class="uk-comment-avatar" src="images/avatar.jpg" width="50" alt="">