uikit 3.11.2-dev.9433cd5fd → 3.11.2-dev.ae39176f2

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 (63) hide show
  1. package/CHANGELOG.md +3 -11
  2. package/build/scss.js +1 -1
  3. package/dist/css/uikit-core-rtl.css +42 -17
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +42 -17
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +42 -17
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +42 -17
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +1 -1
  12. package/dist/js/components/countdown.min.js +1 -1
  13. package/dist/js/components/filter.js +1 -1
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +1 -1
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +1 -1
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +1 -1
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +1 -1
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +1 -1
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +1 -1
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +1 -1
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +1 -1
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +5 -4
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +1 -1
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +1 -1
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +147 -124
  38. package/dist/js/uikit-core.min.js +1 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +151 -127
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/api/component.js +1 -1
  45. package/src/js/api/state.js +16 -20
  46. package/src/js/components/sortable.js +4 -3
  47. package/src/js/core/img.js +99 -96
  48. package/src/js/core/sticky.js +6 -4
  49. package/src/js/util/options.js +4 -4
  50. package/src/less/components/flex.less +0 -9
  51. package/src/less/components/navbar.less +0 -7
  52. package/src/less/components/utility.less +22 -0
  53. package/src/scss/components/flex.scss +0 -9
  54. package/src/scss/components/form.scss +3 -3
  55. package/src/scss/components/icon.scss +2 -2
  56. package/src/scss/components/navbar.scss +0 -7
  57. package/src/scss/components/search.scss +1 -1
  58. package/src/scss/components/utility.scss +22 -0
  59. package/src/scss/variables-theme.scss +6 -6
  60. package/src/scss/variables.scss +6 -6
  61. package/tests/image.html +38 -22
  62. package/tests/images/test.avif +0 -0
  63. package/tests/images/test.webp +0 -0
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.11.2-dev.9433cd5fd | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.11.2-dev.ae39176f2 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -2093,8 +2093,9 @@
2093
2093
 
2094
2094
  try {
2095
2095
 
2096
- return options
2097
- ? startsWith(options, '{')
2096
+ return !options
2097
+ ? {}
2098
+ : startsWith(options, '{')
2098
2099
  ? JSON.parse(options)
2099
2100
  : args.length && !includes(options, ':')
2100
2101
  ? (( obj = {}, obj[args[0]] = options, obj ))
@@ -2106,8 +2107,7 @@
2106
2107
  options[key.trim()] = value.trim();
2107
2108
  }
2108
2109
  return options;
2109
- }, {})
2110
- : {};
2110
+ }, {});
2111
2111
 
2112
2112
  } catch (e) {
2113
2113
  return {};
@@ -3196,30 +3196,26 @@
3196
3196
  }
3197
3197
 
3198
3198
  function normalizeData(ref, ref$1) {
3199
- var data = ref.data;
3200
- var args = ref$1.args;
3199
+ var data = ref.data; if ( data === void 0 ) data = {};
3200
+ var args = ref$1.args; if ( args === void 0 ) args = [];
3201
3201
  var props = ref$1.props; if ( props === void 0 ) props = {};
3202
3202
 
3203
- data = isArray(data)
3204
- ? !isEmpty(args)
3205
- ? data.slice(0, args.length).reduce(function (data, value, index) {
3206
- if (isPlainObject(value)) {
3207
- assign(data, value);
3208
- } else {
3209
- data[args[index]] = value;
3210
- }
3211
- return data;
3212
- }, {})
3213
- : undefined
3214
- : data;
3215
-
3216
- if (data) {
3217
- for (var key in data) {
3218
- if (isUndefined(data[key])) {
3219
- delete data[key];
3203
+ if (isArray(data)) {
3204
+ data = data.slice(0, args.length).reduce(function (data, value, index) {
3205
+ if (isPlainObject(value)) {
3206
+ assign(data, value);
3220
3207
  } else {
3221
- data[key] = props[key] ? coerce(props[key], data[key]) : data[key];
3208
+ data[args[index]] = value;
3222
3209
  }
3210
+ return data;
3211
+ }, {});
3212
+ }
3213
+
3214
+ for (var key in data) {
3215
+ if (isUndefined(data[key])) {
3216
+ delete data[key];
3217
+ } else if (props[key]) {
3218
+ data[key] = coerce(props[key], data[key]);
3223
3219
  }
3224
3220
  }
3225
3221
 
@@ -3401,7 +3397,7 @@
3401
3397
 
3402
3398
  return component.options.functional
3403
3399
  ? new component({data: isPlainObject(element) ? element : [].concat( argsArray )})
3404
- : !element ? init(element) : $$(element).map(init)[0];
3400
+ : element ? $$(element).map(init)[0] : init();
3405
3401
 
3406
3402
  function init(element) {
3407
3403
 
@@ -3481,7 +3477,7 @@
3481
3477
  UIkit.data = '__uikit__';
3482
3478
  UIkit.prefix = 'uk-';
3483
3479
  UIkit.options = {};
3484
- UIkit.version = '3.11.2-dev.9433cd5fd';
3480
+ UIkit.version = '3.11.2-dev.ae39176f2';
3485
3481
 
3486
3482
  globalAPI(UIkit);
3487
3483
  hooksAPI(UIkit);
@@ -5808,7 +5804,10 @@
5808
5804
 
5809
5805
  props: {
5810
5806
  dataSrc: String,
5811
- dataSources: String,
5807
+ dataSrcset: Boolean,
5808
+ sizes: String,
5809
+ width: Number,
5810
+ height: Number,
5812
5811
  offsetTop: String,
5813
5812
  offsetLeft: String,
5814
5813
  target: String
@@ -5816,7 +5815,10 @@
5816
5815
 
5817
5816
  data: {
5818
5817
  dataSrc: '',
5819
- dataSources: [],
5818
+ dataSrcset: false,
5819
+ sizes: false,
5820
+ width: false,
5821
+ height: false,
5820
5822
  offsetTop: '50vh',
5821
5823
  offsetLeft: '50vw',
5822
5824
  target: false
@@ -5824,6 +5826,37 @@
5824
5826
 
5825
5827
  computed: {
5826
5828
 
5829
+ cacheKey: function(ref) {
5830
+ var dataSrc = ref.dataSrc;
5831
+
5832
+ return ((this.$name) + "." + dataSrc);
5833
+ },
5834
+
5835
+ width: function(ref) {
5836
+ var width = ref.width;
5837
+ var dataWidth = ref.dataWidth;
5838
+
5839
+ return width || dataWidth;
5840
+ },
5841
+
5842
+ height: function(ref) {
5843
+ var height = ref.height;
5844
+ var dataHeight = ref.dataHeight;
5845
+
5846
+ return height || dataHeight;
5847
+ },
5848
+
5849
+ sizes: function(ref) {
5850
+ var sizes = ref.sizes;
5851
+ var dataSizes = ref.dataSizes;
5852
+
5853
+ return sizes || dataSizes;
5854
+ },
5855
+
5856
+ isImg: function(_, $el) {
5857
+ return isImg($el);
5858
+ },
5859
+
5827
5860
  target: {
5828
5861
 
5829
5862
  get: function(ref) {
@@ -5836,6 +5869,18 @@
5836
5869
  this.observe();
5837
5870
  }
5838
5871
 
5872
+ },
5873
+
5874
+ offsetTop: function(ref) {
5875
+ var offsetTop = ref.offsetTop;
5876
+
5877
+ return toPx(offsetTop, 'height');
5878
+ },
5879
+
5880
+ offsetLeft: function(ref) {
5881
+ var offsetLeft = ref.offsetLeft;
5882
+
5883
+ return toPx(offsetLeft, 'width');
5839
5884
  }
5840
5885
 
5841
5886
  },
@@ -5843,13 +5888,21 @@
5843
5888
  connected: function() {
5844
5889
 
5845
5890
  if (!window.IntersectionObserver) {
5846
- setSrcAttrs(this.$el, this.dataSrc);
5891
+ setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
5847
5892
  return;
5848
5893
  }
5849
5894
 
5850
- var rootMargin = (toPx(this.offsetTop, 'height')) + "px " + (toPx(this.offsetLeft, 'width')) + "px";
5851
- this.observer = new IntersectionObserver(this.load, {rootMargin: rootMargin});
5852
- this.observe();
5895
+ if (storage[this.cacheKey]) {
5896
+ setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
5897
+ } else if (this.isImg && this.width && this.height) {
5898
+ setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
5899
+ }
5900
+
5901
+ this.observer = new IntersectionObserver(this.load, {
5902
+ rootMargin: ((this.offsetTop) + "px " + (this.offsetLeft) + "px")
5903
+ });
5904
+
5905
+ requestAnimationFrame(this.observe);
5853
5906
 
5854
5907
  },
5855
5908
 
@@ -5859,17 +5912,35 @@
5859
5912
 
5860
5913
  update: {
5861
5914
 
5862
- write: function(store) {
5863
- if (!this.observer || isImg(this.$el)) {
5915
+ read: function(ref) {
5916
+ var this$1$1 = this;
5917
+ var image = ref.image;
5918
+
5919
+
5920
+ if (!this.observer) {
5921
+ return false;
5922
+ }
5923
+
5924
+ if (!image && document.readyState === 'complete') {
5925
+ this.load(this.observer.takeRecords());
5926
+ }
5927
+
5928
+ if (this.isImg) {
5864
5929
  return false;
5865
5930
  }
5866
- var srcset = data(this.$el, 'data-srcset');
5867
- if (srcset && window.devicePixelRatio !== 1) {
5931
+
5932
+ image && image.then(function (img) { return img && img.currentSrc !== '' && setSrcAttrs(this$1$1.$el, currentSrc(img)); });
5933
+
5934
+ },
5935
+
5936
+ write: function(data) {
5937
+
5938
+ if (this.dataSrcset && window.devicePixelRatio !== 1) {
5868
5939
 
5869
5940
  var bgSize = css(this.$el, 'backgroundSize');
5870
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
5871
- store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
5872
- css(this.$el, 'backgroundSize', ((store.bgSize) + "px"));
5941
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
5942
+ data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
5943
+ css(this.$el, 'backgroundSize', ((data.bgSize) + "px"));
5873
5944
  }
5874
5945
 
5875
5946
  }
@@ -5883,26 +5954,21 @@
5883
5954
  methods: {
5884
5955
 
5885
5956
  load: function(entries) {
5957
+ var this$1$1 = this;
5958
+
5886
5959
 
5887
5960
  // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
5888
5961
  if (!entries.some(function (entry) { return isUndefined(entry.isIntersecting) || entry.isIntersecting; })) {
5889
5962
  return;
5890
5963
  }
5891
5964
 
5892
- if (this._data.image) {
5893
- return this._data.image;
5894
- }
5965
+ this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {
5895
5966
 
5896
- var image = isImg(this.$el)
5897
- ? this.$el
5898
- : getImageFromElement(
5899
- this.$el,
5900
- this.dataSrc,
5901
- this.dataSources
5902
- );
5967
+ setSrcAttrs(this$1$1.$el, currentSrc(img), img.srcset, img.sizes);
5968
+ storage[this$1$1.cacheKey] = currentSrc(img);
5969
+ return img;
5903
5970
 
5904
- this._data.image = image;
5905
- setSrcAttrs(this.$el, image.currentSrc);
5971
+ }, function (e) { return trigger(this$1$1.$el, new e.constructor(e.type, e)); });
5906
5972
 
5907
5973
  this.observer.disconnect();
5908
5974
  },
@@ -5919,15 +5985,13 @@
5919
5985
 
5920
5986
  };
5921
5987
 
5922
- function setSrcAttrs(el, src) {
5988
+ function setSrcAttrs(el, src, srcset, sizes) {
5923
5989
 
5924
5990
  if (isImg(el)) {
5925
-
5926
- var parentNode = parent(el);
5927
- var elements = isPicture(parentNode) ? children(parentNode) : [el];
5928
- elements.forEach(function (el) { return setSourceProps(el, el); });
5929
- src && attr(el, 'src', src);
5930
-
5991
+ var set = function (prop, val) { return val && val !== el[prop] && (el[prop] = val); };
5992
+ set('sizes', sizes);
5993
+ set('srcset', srcset);
5994
+ set('src', src);
5931
5995
  } else if (src) {
5932
5996
 
5933
5997
  var change = !includes(el.style.backgroundImage, src);
@@ -5940,66 +6004,15 @@
5940
6004
 
5941
6005
  }
5942
6006
 
5943
- var srcProps = ['data-src', 'data-srcset', 'sizes'];
5944
- function setSourceProps(sourceEl, targetEl) {
5945
- srcProps.forEach(function (prop) {
5946
- var value = data(sourceEl, prop);
5947
- if (value) {
5948
- attr(targetEl, prop.replace(/^(data-)+/, ''), value);
5949
- }
5950
- });
5951
- }
5952
-
5953
- function getImageFromElement(el, src, sources) {
5954
-
5955
- if (!src) {
5956
- return false;
5957
- }
5958
-
5959
- var img = new Image();
5960
-
5961
- wrapInPicture(img, sources);
5962
- setSourceProps(el, img);
5963
- img.onload = function () { return setSrcAttrs(el, img.currentSrc); };
5964
- attr(img, 'src', src);
5965
- return img;
5966
- }
5967
-
5968
- function wrapInPicture(img, sources) {
5969
-
5970
- sources = parseSources(sources);
5971
-
5972
- if (sources.length) {
5973
- var picture = fragment('<picture>');
5974
- sources.forEach(function (attrs) {
5975
- var source = fragment('<source>');
5976
- attr(source, attrs);
5977
- append(picture, source);
5978
- });
5979
- append(picture, img);
5980
- }
5981
- }
5982
-
5983
- function parseSources(sources) {
5984
- if (!sources) {
5985
- return [];
5986
- }
6007
+ function getPlaceholderImage(width, height, sizes) {
6008
+ var assign;
5987
6009
 
5988
- if (startsWith(sources, '[')) {
5989
- try {
5990
- sources = JSON.parse(sources);
5991
- } catch (e) {
5992
- sources = [];
5993
- }
5994
- } else {
5995
- sources = parseOptions(sources);
5996
- }
5997
6010
 
5998
- if (!isArray(sources)) {
5999
- sources = [sources];
6011
+ if (sizes) {
6012
+ ((assign = Dimensions.ratio({width: width, height: height}, 'width', toPx(sizesToPixel(sizes))), width = assign.width, height = assign.height));
6000
6013
  }
6001
6014
 
6002
- return sources.filter(function (source) { return !isEmpty(source); });
6015
+ return ("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" + width + "\" height=\"" + height + "\"></svg>");
6003
6016
  }
6004
6017
 
6005
6018
  var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -6039,16 +6052,24 @@
6039
6052
  return descriptors.filter(function (size) { return size >= srcSize; })[0] || descriptors.pop() || '';
6040
6053
  }
6041
6054
 
6042
- function isPicture(el) {
6043
- return isA(el, 'PICTURE');
6055
+ function isImg(el) {
6056
+ return el.tagName === 'IMG';
6044
6057
  }
6045
6058
 
6046
- function isImg(el) {
6047
- return isA(el, 'IMG');
6059
+ function currentSrc(el) {
6060
+ return el.currentSrc || el.src;
6048
6061
  }
6049
6062
 
6050
- function isA(el, tagName) {
6051
- return el && el.tagName === tagName;
6063
+ var key = '__test__';
6064
+ var storage;
6065
+
6066
+ // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
6067
+ try {
6068
+ storage = window.sessionStorage || {};
6069
+ storage[key] = 1;
6070
+ delete storage[key];
6071
+ } catch (e) {
6072
+ storage = {};
6052
6073
  }
6053
6074
 
6054
6075
  var Media = {
@@ -7864,7 +7885,7 @@
7864
7885
  var offsetParentTop = offset(referenceElement.offsetParent).top;
7865
7886
 
7866
7887
  var top = parseProp(this.top, this.$el, topOffset);
7867
- var bottom = parseProp(this.bottom, this.$el, topOffset + height$1);
7888
+ var bottom = parseProp(this.bottom, this.$el, topOffset + height$1, true);
7868
7889
 
7869
7890
  var start = Math.max(top, topOffset) - this.offset;
7870
7891
  var end = bottom
@@ -8071,7 +8092,7 @@
8071
8092
 
8072
8093
  };
8073
8094
 
8074
- function parseProp(value, el, propOffset) {
8095
+ function parseProp(value, el, propOffset, padding) {
8075
8096
 
8076
8097
  if (!value) {
8077
8098
  return 0;
@@ -8083,7 +8104,9 @@
8083
8104
 
8084
8105
  } else {
8085
8106
 
8086
- return offset(value === true ? parent(el) : query(value, el)).bottom;
8107
+ var refElement = value === true ? parent(el) : query(value, el);
8108
+ return offset(refElement).bottom
8109
+ - (padding && refElement && within(el, refElement) ? toFloat(css(refElement, 'paddingBottom')) : 0);
8087
8110
 
8088
8111
  }
8089
8112
  }
@@ -12256,11 +12279,12 @@
12256
12279
  var clone = append(container, element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2'));
12257
12280
 
12258
12281
  css(clone, 'margin', '0', 'important');
12259
- css(clone, assign({
12282
+ css(clone, {
12260
12283
  boxSizing: 'border-box',
12261
12284
  width: element.offsetWidth,
12262
- height: element.offsetHeight
12263
- }, css(element, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));
12285
+ height: element.offsetHeight,
12286
+ padding: css(element, 'padding')
12287
+ });
12264
12288
 
12265
12289
  height(clone.firstElementChild, height(element.firstElementChild));
12266
12290