uikit 3.11.1 → 3.11.2-dev.28b7953b9

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 (64) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/css/uikit-core-rtl.css +1 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +1 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +1 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +1 -1
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -1
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +37 -41
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +32 -25
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +2 -2
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +32 -25
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +36 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +2 -3
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +285 -224
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +383 -292
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/component.js +1 -1
  44. package/src/js/api/state.js +20 -24
  45. package/src/js/components/parallax.js +5 -16
  46. package/src/js/components/slider.js +1 -1
  47. package/src/js/components/slideshow.js +32 -1
  48. package/src/js/components/sortable.js +1 -2
  49. package/src/js/core/core.js +2 -2
  50. package/src/js/core/drop.js +1 -1
  51. package/src/js/core/height-viewport.js +2 -2
  52. package/src/js/core/img.js +114 -98
  53. package/src/js/core/navbar.js +6 -2
  54. package/src/js/core/sticky.js +82 -50
  55. package/src/js/mixin/parallax.js +32 -21
  56. package/src/js/util/dimensions.js +28 -12
  57. package/src/js/util/fastdom.js +2 -2
  58. package/src/js/util/options.js +4 -4
  59. package/src/js/util/viewport.js +7 -3
  60. package/tests/image.html +31 -41
  61. package/tests/images/test.avif +0 -0
  62. package/tests/images/test.webp +0 -0
  63. package/tests/sticky-parallax.html +44 -41
  64. package/tests/sticky.html +56 -24
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.11.1 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.11.2-dev.28b7953b9 | 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() :
@@ -1587,7 +1587,7 @@
1587
1587
  height: ['top', 'bottom']
1588
1588
  };
1589
1589
 
1590
- function dimensions(element) {
1590
+ function dimensions$1(element) {
1591
1591
 
1592
1592
  var rect = isElement(element)
1593
1593
  ? toNode(element).getBoundingClientRect()
@@ -1605,7 +1605,7 @@
1605
1605
 
1606
1606
  function offset(element, coordinates) {
1607
1607
 
1608
- var currentOffset = dimensions(element);
1608
+ var currentOffset = dimensions$1(element);
1609
1609
 
1610
1610
  if (element) {
1611
1611
  var ref = toWindow(element);
@@ -1750,19 +1750,35 @@
1750
1750
  if ( element === void 0 ) element = window;
1751
1751
  if ( offsetDim === void 0 ) offsetDim = false;
1752
1752
 
1753
- return isNumeric(value)
1754
- ? +value
1755
- : endsWith(value, 'vh')
1756
- ? percent(height(toWindow(element)), value)
1757
- : endsWith(value, 'vw')
1758
- ? percent(width(toWindow(element)), value)
1759
- : endsWith(value, '%')
1760
- ? percent(offsetDim
1761
- ? element[("offset" + (ucfirst(property)))]
1762
- : dimensions(element)[property], value)
1763
- : toFloat(value);
1753
+
1754
+ if (!isString(value)) {
1755
+ return toFloat(value);
1756
+ }
1757
+
1758
+ return parseCalc(value).reduce(function (result, value) {
1759
+ var unit = parseUnit(value);
1760
+ if (unit) {
1761
+ value = percent(
1762
+ unit === 'vh'
1763
+ ? height(toWindow(element))
1764
+ : unit === 'vw'
1765
+ ? width(toWindow(element))
1766
+ : offsetDim
1767
+ ? element[("offset" + (ucfirst(property)))]
1768
+ : dimensions$1(element)[property],
1769
+ value
1770
+ );
1771
+ }
1772
+
1773
+ return result + toFloat(value);
1774
+ }, 0);
1764
1775
  }
1765
1776
 
1777
+ var calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g;
1778
+ var parseCalc = memoize(function (calc) { return calc.toString().replace(/\s/g, '').match(calcRe) || []; });
1779
+ var unitRe = /(?:v[hw]|%)$/;
1780
+ var parseUnit = memoize(function (str) { return (str.match(unitRe) || [])[0]; });
1781
+
1766
1782
  function percent(base, value) {
1767
1783
  return base * toFloat(value) / 100;
1768
1784
  }
@@ -1800,8 +1816,6 @@
1800
1816
  };
1801
1817
 
1802
1818
  function flush(recursion) {
1803
- if ( recursion === void 0 ) recursion = 1;
1804
-
1805
1819
  runTasks(fastdom.reads);
1806
1820
  runTasks(fastdom.writes.splice(0));
1807
1821
 
@@ -1823,7 +1837,7 @@
1823
1837
  if (recursion && recursion < RECURSION_LIMIT) {
1824
1838
  Promise$1.resolve().then(function () { return flush(recursion); });
1825
1839
  } else {
1826
- requestAnimationFrame(function () { return flush(); });
1840
+ requestAnimationFrame(function () { return flush(1); });
1827
1841
  }
1828
1842
 
1829
1843
  }
@@ -2079,9 +2093,8 @@
2079
2093
 
2080
2094
  try {
2081
2095
 
2082
- return !options
2083
- ? {}
2084
- : startsWith(options, '{')
2096
+ return options
2097
+ ? startsWith(options, '{')
2085
2098
  ? JSON.parse(options)
2086
2099
  : args.length && !includes(options, ':')
2087
2100
  ? (( obj = {}, obj[args[0]] = options, obj ))
@@ -2093,7 +2106,8 @@
2093
2106
  options[key.trim()] = value.trim();
2094
2107
  }
2095
2108
  return options;
2096
- }, {});
2109
+ }, {})
2110
+ : {};
2097
2111
 
2098
2112
  } catch (e) {
2099
2113
  return {};
@@ -2241,7 +2255,11 @@
2241
2255
  element = toNode(element);
2242
2256
  }
2243
2257
 
2244
- element.scrollTop = top;
2258
+ if (isUndefined(top)) {
2259
+ return element.scrollTop;
2260
+ } else {
2261
+ element.scrollTop = top;
2262
+ }
2245
2263
  }
2246
2264
 
2247
2265
  function scrollIntoView(element, ref) {
@@ -2548,7 +2566,7 @@
2548
2566
  replaceClass: replaceClass,
2549
2567
  hasClass: hasClass,
2550
2568
  toggleClass: toggleClass,
2551
- dimensions: dimensions,
2569
+ dimensions: dimensions$1,
2552
2570
  offset: offset,
2553
2571
  position: position,
2554
2572
  offsetPosition: offsetPosition,
@@ -2673,7 +2691,8 @@
2673
2691
  scrolledOver: scrolledOver,
2674
2692
  scrollParents: scrollParents,
2675
2693
  getViewport: getViewport$1,
2676
- getViewportClientHeight: getViewportClientHeight
2694
+ getViewportClientHeight: getViewportClientHeight,
2695
+ getScrollingElement: getScrollingElement
2677
2696
  });
2678
2697
 
2679
2698
  function globalAPI (UIkit) {
@@ -3137,11 +3156,11 @@
3137
3156
  on(
3138
3157
  el,
3139
3158
  name,
3140
- !delegate
3141
- ? null
3142
- : isString(delegate)
3159
+ delegate
3160
+ ? isString(delegate)
3143
3161
  ? delegate
3144
- : delegate.call(component),
3162
+ : delegate.call(component)
3163
+ : null,
3145
3164
  isString(handler) ? component[handler] : handler.bind(component),
3146
3165
  {passive: passive, capture: capture, self: self}
3147
3166
  )
@@ -3177,30 +3196,26 @@
3177
3196
  }
3178
3197
 
3179
3198
  function normalizeData(ref, ref$1) {
3180
- var data = ref.data;
3181
- 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 = [];
3182
3201
  var props = ref$1.props; if ( props === void 0 ) props = {};
3183
3202
 
3184
- data = isArray(data)
3185
- ? !isEmpty(args)
3186
- ? data.slice(0, args.length).reduce(function (data, value, index) {
3187
- if (isPlainObject(value)) {
3188
- assign(data, value);
3189
- } else {
3190
- data[args[index]] = value;
3191
- }
3192
- return data;
3193
- }, {})
3194
- : undefined
3195
- : data;
3196
-
3197
- if (data) {
3198
- for (var key in data) {
3199
- if (isUndefined(data[key])) {
3200
- 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);
3201
3207
  } else {
3202
- data[key] = props[key] ? coerce(props[key], data[key]) : data[key];
3208
+ data[args[index]] = value;
3203
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]);
3204
3219
  }
3205
3220
  }
3206
3221
 
@@ -3382,7 +3397,7 @@
3382
3397
 
3383
3398
  return component.options.functional
3384
3399
  ? new component({data: isPlainObject(element) ? element : [].concat( argsArray )})
3385
- : !element ? init(element) : $$(element).map(init)[0];
3400
+ : element ? $$(element).map(init)[0] : init();
3386
3401
 
3387
3402
  function init(element) {
3388
3403
 
@@ -3462,7 +3477,7 @@
3462
3477
  UIkit.data = '__uikit__';
3463
3478
  UIkit.prefix = 'uk-';
3464
3479
  UIkit.options = {};
3465
- UIkit.version = '3.11.1';
3480
+ UIkit.version = '3.11.2-dev.28b7953b9';
3466
3481
 
3467
3482
  globalAPI(UIkit);
3468
3483
  hooksAPI(UIkit);
@@ -3483,7 +3498,7 @@
3483
3498
  return;
3484
3499
  }
3485
3500
  pendingResize = true;
3486
- fastdom.write(function () { return pendingResize = false; });
3501
+ fastdom.read(function () { return pendingResize = false; });
3487
3502
  UIkit.update(null, 'resize');
3488
3503
  };
3489
3504
 
@@ -3502,7 +3517,7 @@
3502
3517
  return;
3503
3518
  }
3504
3519
  pending = true;
3505
- fastdom.write(function () { return pending = false; });
3520
+ fastdom.read(function () { return pending = false; });
3506
3521
 
3507
3522
  UIkit.update(null, e.type);
3508
3523
 
@@ -4588,7 +4603,7 @@
4588
4603
  if (active$1) {
4589
4604
 
4590
4605
  if (delay && active$1.isDelaying) {
4591
- this.showTimer = setTimeout(this.show, 10);
4606
+ this.showTimer = setTimeout(function () { return matches(target, ':hover') && this$1$1.show(); }, 10);
4592
4607
  return;
4593
4608
  }
4594
4609
 
@@ -5222,7 +5237,7 @@
5222
5237
  css(element, 'display', 'block', 'important');
5223
5238
  }
5224
5239
 
5225
- var height = dimensions(element).height - boxModelAdjust(element, 'height', 'content-box');
5240
+ var height = dimensions$1(element).height - boxModelAdjust(element, 'height', 'content-box');
5226
5241
 
5227
5242
  if (style !== false) {
5228
5243
  css(element, 'display', style);
@@ -5264,7 +5279,7 @@
5264
5279
 
5265
5280
  if (this.expand) {
5266
5281
 
5267
- minHeight = height(window) - (dimensions(document.documentElement).height - dimensions(this.$el).height) - box || '';
5282
+ minHeight = height(window) - (dimensions$1(document.documentElement).height - dimensions$1(this.$el).height) - box || '';
5268
5283
 
5269
5284
  } else {
5270
5285
 
@@ -5281,7 +5296,7 @@
5281
5296
 
5282
5297
  if (this.offsetBottom === true) {
5283
5298
 
5284
- minHeight += " - " + (dimensions(this.$el.nextElementSibling).height) + "px";
5299
+ minHeight += " - " + (dimensions$1(this.$el.nextElementSibling).height) + "px";
5285
5300
 
5286
5301
  } else if (isNumeric(this.offsetBottom)) {
5287
5302
 
@@ -5293,7 +5308,7 @@
5293
5308
 
5294
5309
  } else if (isString(this.offsetBottom)) {
5295
5310
 
5296
- minHeight += " - " + (dimensions(query(this.offsetBottom, this.$el)).height) + "px";
5311
+ minHeight += " - " + (dimensions$1(query(this.offsetBottom, this.$el)).height) + "px";
5297
5312
 
5298
5313
  }
5299
5314
 
@@ -5312,7 +5327,7 @@
5312
5327
  css(this.$el, {minHeight: minHeight});
5313
5328
 
5314
5329
  if (minHeight !== prev) {
5315
- this.$update(this.$el, 'resize');
5330
+ trigger(this.$el, 'resize');
5316
5331
  }
5317
5332
 
5318
5333
  if (this.minHeight && toFloat(css(this.$el, 'minHeight')) < this.minHeight) {
@@ -5783,16 +5798,16 @@
5783
5798
  return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon;
5784
5799
  }
5785
5800
 
5801
+ var nativeLazyLoad = 'loading' in HTMLImageElement.prototype;
5802
+ var nativeIsIntersecting = 'isIntersecting' in IntersectionObserverEntry.prototype; // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
5803
+
5786
5804
  var img = {
5787
5805
 
5788
5806
  args: 'dataSrc',
5789
5807
 
5790
5808
  props: {
5791
5809
  dataSrc: String,
5792
- dataSrcset: Boolean,
5793
- sizes: String,
5794
- width: Number,
5795
- height: Number,
5810
+ dataSources: String,
5796
5811
  offsetTop: String,
5797
5812
  offsetLeft: String,
5798
5813
  target: String
@@ -5800,10 +5815,7 @@
5800
5815
 
5801
5816
  data: {
5802
5817
  dataSrc: '',
5803
- dataSrcset: false,
5804
- sizes: false,
5805
- width: false,
5806
- height: false,
5818
+ dataSources: [],
5807
5819
  offsetTop: '50vh',
5808
5820
  offsetLeft: '50vw',
5809
5821
  target: false
@@ -5811,37 +5823,6 @@
5811
5823
 
5812
5824
  computed: {
5813
5825
 
5814
- cacheKey: function(ref) {
5815
- var dataSrc = ref.dataSrc;
5816
-
5817
- return ((this.$name) + "." + dataSrc);
5818
- },
5819
-
5820
- width: function(ref) {
5821
- var width = ref.width;
5822
- var dataWidth = ref.dataWidth;
5823
-
5824
- return width || dataWidth;
5825
- },
5826
-
5827
- height: function(ref) {
5828
- var height = ref.height;
5829
- var dataHeight = ref.dataHeight;
5830
-
5831
- return height || dataHeight;
5832
- },
5833
-
5834
- sizes: function(ref) {
5835
- var sizes = ref.sizes;
5836
- var dataSizes = ref.dataSizes;
5837
-
5838
- return sizes || dataSizes;
5839
- },
5840
-
5841
- isImg: function(_, $el) {
5842
- return isImg($el);
5843
- },
5844
-
5845
5826
  target: {
5846
5827
 
5847
5828
  get: function(ref) {
@@ -5854,40 +5835,31 @@
5854
5835
  this.observe();
5855
5836
  }
5856
5837
 
5857
- },
5858
-
5859
- offsetTop: function(ref) {
5860
- var offsetTop = ref.offsetTop;
5861
-
5862
- return toPx(offsetTop, 'height');
5863
- },
5864
-
5865
- offsetLeft: function(ref) {
5866
- var offsetLeft = ref.offsetLeft;
5867
-
5868
- return toPx(offsetLeft, 'width');
5869
5838
  }
5870
5839
 
5871
5840
  },
5872
5841
 
5873
5842
  connected: function() {
5874
5843
 
5875
- if (!window.IntersectionObserver) {
5876
- setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
5844
+ if (!window.IntersectionObserver || !nativeIsIntersecting) {
5845
+ setSrcAttrs(this.$el, this.dataSrc);
5877
5846
  return;
5878
5847
  }
5879
5848
 
5880
- if (storage[this.cacheKey]) {
5881
- setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
5882
- } else if (this.isImg && this.width && this.height) {
5883
- setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
5849
+ if (nativeLazyLoad && isImg(this.$el)) {
5850
+ this.$el.loading = 'lazy';
5851
+ setSrcAttrs(this.$el);
5852
+
5853
+ if (this.target.length === 1) {
5854
+ return;
5855
+ }
5884
5856
  }
5885
5857
 
5886
- this.observer = new IntersectionObserver(this.load, {
5887
- rootMargin: ((this.offsetTop) + "px " + (this.offsetLeft) + "px")
5888
- });
5858
+ ensureSrcAttribute(this.$el);
5889
5859
 
5890
- requestAnimationFrame(this.observe);
5860
+ var rootMargin = (toPx(this.offsetTop, 'height')) + "px " + (toPx(this.offsetLeft, 'width')) + "px";
5861
+ this.observer = new IntersectionObserver(this.load, {rootMargin: rootMargin});
5862
+ this.observe();
5891
5863
 
5892
5864
  },
5893
5865
 
@@ -5897,35 +5869,17 @@
5897
5869
 
5898
5870
  update: {
5899
5871
 
5900
- read: function(ref) {
5901
- var this$1$1 = this;
5902
- var image = ref.image;
5903
-
5904
-
5905
- if (!this.observer) {
5872
+ write: function(store) {
5873
+ if (!this.observer || isImg(this.$el)) {
5906
5874
  return false;
5907
5875
  }
5908
-
5909
- if (!image && document.readyState === 'complete') {
5910
- this.load(this.observer.takeRecords());
5911
- }
5912
-
5913
- if (this.isImg) {
5914
- return false;
5915
- }
5916
-
5917
- image && image.then(function (img) { return img && img.currentSrc !== '' && setSrcAttrs(this$1$1.$el, currentSrc(img)); });
5918
-
5919
- },
5920
-
5921
- write: function(data) {
5922
-
5923
- if (this.dataSrcset && window.devicePixelRatio !== 1) {
5876
+ var srcset = data(this.$el, 'data-srcset');
5877
+ if (srcset && window.devicePixelRatio !== 1) {
5924
5878
 
5925
5879
  var bgSize = css(this.$el, 'backgroundSize');
5926
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
5927
- data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
5928
- css(this.$el, 'backgroundSize', ((data.bgSize) + "px"));
5880
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
5881
+ store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
5882
+ css(this.$el, 'backgroundSize', ((store.bgSize) + "px"));
5929
5883
  }
5930
5884
 
5931
5885
  }
@@ -5939,21 +5893,26 @@
5939
5893
  methods: {
5940
5894
 
5941
5895
  load: function(entries) {
5942
- var this$1$1 = this;
5943
5896
 
5944
-
5945
- // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
5946
- if (!entries.some(function (entry) { return isUndefined(entry.isIntersecting) || entry.isIntersecting; })) {
5897
+ if (!entries.some(function (entry) { return entry.isIntersecting; })) {
5947
5898
  return;
5948
5899
  }
5949
5900
 
5950
- this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {
5901
+ if (this._data.image) {
5902
+ return this._data.image;
5903
+ }
5951
5904
 
5952
- setSrcAttrs(this$1$1.$el, currentSrc(img), img.srcset, img.sizes);
5953
- storage[this$1$1.cacheKey] = currentSrc(img);
5954
- return img;
5905
+ var image = isImg(this.$el)
5906
+ ? this.$el
5907
+ : getImageFromElement(
5908
+ this.$el,
5909
+ this.dataSrc,
5910
+ this.dataSources
5911
+ );
5955
5912
 
5956
- }, function (e) { return trigger(this$1$1.$el, new e.constructor(e.type, e)); });
5913
+ this._data.image = image;
5914
+ image.loading = 'eager';
5915
+ setSrcAttrs(this.$el, image.currentSrc);
5957
5916
 
5958
5917
  this.observer.disconnect();
5959
5918
  },
@@ -5970,13 +5929,14 @@
5970
5929
 
5971
5930
  };
5972
5931
 
5973
- function setSrcAttrs(el, src, srcset, sizes) {
5932
+ function setSrcAttrs(el, src) {
5974
5933
 
5975
5934
  if (isImg(el)) {
5976
- var set = function (prop, val) { return val && val !== el[prop] && (el[prop] = val); };
5977
- set('sizes', sizes);
5978
- set('srcset', srcset);
5979
- set('src', src);
5935
+
5936
+ var parentNode = parent(el);
5937
+ var elements = isPicture(parentNode) ? children(parentNode) : [el];
5938
+ elements.forEach(function (el) { return setSourceProps(el, el); });
5939
+
5980
5940
  } else if (src) {
5981
5941
 
5982
5942
  var change = !includes(el.style.backgroundImage, src);
@@ -5989,15 +5949,66 @@
5989
5949
 
5990
5950
  }
5991
5951
 
5992
- function getPlaceholderImage(width, height, sizes) {
5993
- var assign;
5952
+ var srcProps = ['data-src', 'data-srcset', 'sizes'];
5953
+ function setSourceProps(sourceEl, targetEl) {
5954
+ srcProps.forEach(function (prop) {
5955
+ var value = data(sourceEl, prop);
5956
+ if (value) {
5957
+ attr(targetEl, prop.replace(/^(data-)+/, ''), value);
5958
+ }
5959
+ });
5960
+ }
5994
5961
 
5962
+ function getImageFromElement(el, src, sources) {
5995
5963
 
5996
- if (sizes) {
5997
- ((assign = Dimensions.ratio({width: width, height: height}, 'width', toPx(sizesToPixel(sizes))), width = assign.width, height = assign.height));
5964
+ if (!src) {
5965
+ return false;
5998
5966
  }
5999
5967
 
6000
- return ("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"" + width + "\" height=\"" + height + "\"></svg>");
5968
+ var img = new Image();
5969
+
5970
+ wrapInPicture(img, sources);
5971
+ setSourceProps(el, img);
5972
+ img.onload = function () { return setSrcAttrs(el, img.currentSrc); };
5973
+ attr(img, 'src', src);
5974
+ return img;
5975
+ }
5976
+
5977
+ function wrapInPicture(img, sources) {
5978
+
5979
+ sources = parseSources(sources);
5980
+
5981
+ if (sources.length) {
5982
+ var picture = fragment('<picture>');
5983
+ sources.forEach(function (attrs) {
5984
+ var source = fragment('<source>');
5985
+ attr(source, attrs);
5986
+ append(picture, source);
5987
+ });
5988
+ append(picture, img);
5989
+ }
5990
+ }
5991
+
5992
+ function parseSources(sources) {
5993
+ if (!sources) {
5994
+ return [];
5995
+ }
5996
+
5997
+ if (startsWith(sources, '[')) {
5998
+ try {
5999
+ sources = JSON.parse(sources);
6000
+ } catch (e) {
6001
+ sources = [];
6002
+ }
6003
+ } else {
6004
+ sources = parseOptions(sources);
6005
+ }
6006
+
6007
+ if (!isArray(sources)) {
6008
+ sources = [sources];
6009
+ }
6010
+
6011
+ return sources.filter(function (source) { return !isEmpty(source); });
6001
6012
  }
6002
6013
 
6003
6014
  var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -6037,24 +6048,22 @@
6037
6048
  return descriptors.filter(function (size) { return size >= srcSize; })[0] || descriptors.pop() || '';
6038
6049
  }
6039
6050
 
6040
- function isImg(el) {
6041
- return el.tagName === 'IMG';
6051
+ function ensureSrcAttribute(el) {
6052
+ if (isImg(el) && !hasAttr(el, 'src')) {
6053
+ attr(el, 'src', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"></svg>');
6054
+ }
6042
6055
  }
6043
6056
 
6044
- function currentSrc(el) {
6045
- return el.currentSrc || el.src;
6057
+ function isPicture(el) {
6058
+ return isA(el, 'PICTURE');
6046
6059
  }
6047
6060
 
6048
- var key = '__test__';
6049
- var storage;
6061
+ function isImg(el) {
6062
+ return isA(el, 'IMG');
6063
+ }
6050
6064
 
6051
- // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
6052
- try {
6053
- storage = window.sessionStorage || {};
6054
- storage[key] = 1;
6055
- delete storage[key];
6056
- } catch (e) {
6057
- storage = {};
6065
+ function isA(el, tagName) {
6066
+ return el && el.tagName === tagName;
6058
6067
  }
6059
6068
 
6060
6069
  var Media = {
@@ -6720,7 +6729,7 @@
6720
6729
  var current = ref.current;
6721
6730
 
6722
6731
  var active = this.getActive();
6723
- if (active && includes(active.mode, 'hover') && active.target && !within(active.target, current) && !active.tracker.movesTo(active.$el)) {
6732
+ if (active && includes(active.mode, 'hover') && active.target && !within(active.target, current) && !active.isDelaying) {
6724
6733
  active.hide(false);
6725
6734
  }
6726
6735
  }
@@ -6895,7 +6904,11 @@
6895
6904
 
6896
6905
  var active = this.getActive();
6897
6906
 
6898
- if (matches(this.dropbar, ':hover') && active && active.$el === $el) {
6907
+ if (matches(this.dropbar, ':hover')
6908
+ && active
6909
+ && active.$el === $el
6910
+ && !this.toggles.some(function (el) { return active.target !== el && matches(el, ':focus'); })
6911
+ ) {
6899
6912
  e.preventDefault();
6900
6913
  }
6901
6914
  }
@@ -7325,7 +7338,7 @@
7325
7338
 
7326
7339
  return {
7327
7340
  current: toFloat(css(this.$el, 'maxHeight')),
7328
- max: Math.max(this.minHeight, height(this.container) - (dimensions(this.content).height - height(this.$el)))
7341
+ max: Math.max(this.minHeight, height(this.container) - (dimensions$1(this.content).height - height(this.$el)))
7329
7342
  };
7330
7343
  },
7331
7344
 
@@ -7687,6 +7700,7 @@
7687
7700
  mixins: [Class, Media],
7688
7701
 
7689
7702
  props: {
7703
+ position: String,
7690
7704
  top: null,
7691
7705
  bottom: Boolean,
7692
7706
  offset: String,
@@ -7702,6 +7716,7 @@
7702
7716
  },
7703
7717
 
7704
7718
  data: {
7719
+ position: 'top',
7705
7720
  top: 0,
7706
7721
  bottom: false,
7707
7722
  offset: 0,
@@ -7718,10 +7733,23 @@
7718
7733
 
7719
7734
  computed: {
7720
7735
 
7721
- offset: function(ref) {
7736
+ position: function(ref, $el) {
7737
+ var position = ref.position;
7738
+
7739
+ return position === 'auto'
7740
+ ? (this.isFixed ? this.placeholder : $el).offsetHeight > height(window)
7741
+ ? 'bottom'
7742
+ : 'top'
7743
+ : position;
7744
+ },
7745
+
7746
+ offset: function(ref, $el) {
7722
7747
  var offset = ref.offset;
7723
7748
 
7724
- return toPx(offset);
7749
+ if (this.position === 'bottom') {
7750
+ offset += '+100vh-100%';
7751
+ }
7752
+ return toPx(offset, 'height', $el);
7725
7753
  },
7726
7754
 
7727
7755
  selTarget: function(ref, $el) {
@@ -7788,7 +7816,7 @@
7788
7816
  var this$1$1 = this;
7789
7817
 
7790
7818
 
7791
- if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {
7819
+ if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
7792
7820
  return;
7793
7821
  }
7794
7822
 
@@ -7821,6 +7849,7 @@
7821
7849
 
7822
7850
  read: function(ref, types) {
7823
7851
  var height$1 = ref.height;
7852
+ var margin = ref.margin;
7824
7853
 
7825
7854
 
7826
7855
  this.inactive = !this.matchMedia || !isVisible(this.$el);
@@ -7829,46 +7858,56 @@
7829
7858
  return false;
7830
7859
  }
7831
7860
 
7832
- if (this.isActive && types.has('resize')) {
7861
+ var hide = this.isActive && types.has('resize');
7862
+ if (hide) {
7833
7863
  this.hide();
7834
- height$1 = this.$el.offsetHeight;
7835
- this.show();
7836
7864
  }
7837
7865
 
7838
- height$1 = this.isActive ? height$1 : this.$el.offsetHeight;
7866
+ if (!this.isActive) {
7867
+ height$1 = this.$el.offsetHeight;
7868
+ margin = css(this.$el, 'margin');
7869
+ }
7839
7870
 
7840
- if (height$1 + this.offset > height(window)) {
7841
- this.inactive = true;
7842
- return false;
7871
+ if (hide) {
7872
+ this.show();
7843
7873
  }
7844
7874
 
7875
+ var overflow = Math.max(0, height$1 + this.offset - height(window));
7876
+
7845
7877
  var referenceElement = this.isFixed ? this.placeholder : this.$el;
7846
- this.topOffset = offset(referenceElement).top;
7847
- this.bottomOffset = this.topOffset + height$1;
7848
- this.offsetParentTop = offset(referenceElement.offsetParent).top;
7878
+ var topOffset = offset(referenceElement).top;
7879
+ var offsetParentTop = offset(referenceElement.offsetParent).top;
7849
7880
 
7850
- var bottom = parseProp('bottom', this);
7881
+ var top = parseProp(this.top, this.$el, topOffset);
7882
+ var bottom = parseProp(this.bottom, this.$el, topOffset + height$1);
7851
7883
 
7852
- this.top = Math.max(toFloat(parseProp('top', this)), this.topOffset) - this.offset;
7853
- this.bottom = bottom && bottom - this.$el.offsetHeight;
7854
- this.width = dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el).width;
7884
+ var start = Math.max(top, topOffset) - this.offset;
7885
+ var end = bottom
7886
+ ? bottom - this.$el.offsetHeight + overflow - this.offset
7887
+ : getScrollingElement(this.$el).scrollHeight - height(window);
7855
7888
 
7856
7889
  return {
7890
+ start: start,
7891
+ end: end,
7892
+ overflow: overflow,
7893
+ topOffset: topOffset,
7894
+ offsetParentTop: offsetParentTop,
7857
7895
  height: height$1,
7858
- top: offsetPosition(this.placeholder)[0],
7859
- margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
7896
+ margin: margin,
7897
+ width: dimensions$1(isVisible(this.widthElement) ? this.widthElement : this.$el).width,
7898
+ top: offsetPosition(this.placeholder)[0]
7860
7899
  };
7861
7900
  },
7862
7901
 
7863
7902
  write: function(ref) {
7864
7903
  var height = ref.height;
7865
- var margins = ref.margins;
7904
+ var margin = ref.margin;
7866
7905
 
7867
7906
 
7868
7907
  var ref$1 = this;
7869
7908
  var placeholder = ref$1.placeholder;
7870
7909
 
7871
- css(placeholder, assign({height: height}, margins));
7910
+ css(placeholder, {height: height, margin: margin});
7872
7911
 
7873
7912
  if (!within(placeholder, document)) {
7874
7913
  after(this.$el, placeholder);
@@ -7886,14 +7925,29 @@
7886
7925
  {
7887
7926
 
7888
7927
  read: function(ref) {
7889
- var scroll = ref.scroll; if ( scroll === void 0 ) scroll = 0;
7928
+ var prevScroll = ref.scroll; if ( prevScroll === void 0 ) prevScroll = 0;
7929
+ var prevDir = ref.dir; if ( prevDir === void 0 ) prevDir = 'down';
7930
+ var overflow = ref.overflow;
7931
+ var overflowScroll = ref.overflowScroll; if ( overflowScroll === void 0 ) overflowScroll = 0;
7932
+ var start = ref.start;
7933
+ var end = ref.end;
7890
7934
 
7891
7935
 
7892
- this.scroll = window.pageYOffset;
7936
+ var scroll = scrollTop(window);
7937
+ var dir = prevScroll <= scroll ? 'down' : 'up';
7893
7938
 
7894
7939
  return {
7895
- dir: scroll <= this.scroll ? 'down' : 'up',
7896
- scroll: this.scroll
7940
+ dir: dir,
7941
+ prevDir: prevDir,
7942
+ scroll: scroll,
7943
+ prevScroll: prevScroll,
7944
+ overflowScroll: clamp(
7945
+ overflowScroll
7946
+ + clamp(scroll, start, end)
7947
+ - clamp(prevScroll, start, end),
7948
+ 0,
7949
+ overflow
7950
+ )
7897
7951
  };
7898
7952
  },
7899
7953
 
@@ -7901,35 +7955,34 @@
7901
7955
  var this$1$1 = this;
7902
7956
 
7903
7957
 
7904
- var now = Date.now();
7905
7958
  var isScrollUpdate = types.has('scroll');
7906
7959
  var initTimestamp = data.initTimestamp; if ( initTimestamp === void 0 ) initTimestamp = 0;
7907
7960
  var dir = data.dir;
7908
- var lastDir = data.lastDir;
7909
- var lastScroll = data.lastScroll;
7961
+ var prevDir = data.prevDir;
7910
7962
  var scroll = data.scroll;
7963
+ var prevScroll = data.prevScroll; if ( prevScroll === void 0 ) prevScroll = 0;
7911
7964
  var top = data.top;
7965
+ var start = data.start;
7966
+ var topOffset = data.topOffset;
7967
+ var height = data.height;
7912
7968
 
7913
- data.lastScroll = scroll;
7914
-
7915
- if (scroll < 0 || scroll === lastScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
7969
+ if (scroll < 0 || scroll === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
7916
7970
  return;
7917
7971
  }
7918
7972
 
7919
- if (now - initTimestamp > 300 || dir !== lastDir) {
7973
+ var now = Date.now();
7974
+ if (now - initTimestamp > 300 || dir !== prevDir) {
7920
7975
  data.initScroll = scroll;
7921
7976
  data.initTimestamp = now;
7922
7977
  }
7923
7978
 
7924
- data.lastDir = dir;
7925
-
7926
- if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(lastScroll - scroll) <= 10) {
7979
+ if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(prevScroll - scroll) <= 10) {
7927
7980
  return;
7928
7981
  }
7929
7982
 
7930
7983
  if (this.inactive
7931
- || scroll < this.top
7932
- || this.showOnUp && (scroll <= this.top || dir === 'down' && isScrollUpdate || dir === 'up' && !this.isFixed && scroll <= this.bottomOffset)
7984
+ || scroll < start
7985
+ || this.showOnUp && (scroll <= start || dir === 'down' && isScrollUpdate || dir === 'up' && !this.isFixed && scroll <= topOffset + height)
7933
7986
  ) {
7934
7987
 
7935
7988
  if (!this.isFixed) {
@@ -7944,7 +7997,7 @@
7944
7997
 
7945
7998
  this.isFixed = false;
7946
7999
 
7947
- if (this.animation && scroll > this.topOffset) {
8000
+ if (this.animation && scroll > topOffset) {
7948
8001
  Animation.cancel(this.$el);
7949
8002
  Animation.out(this.$el, this.animation).then(function () { return this$1$1.hide(); }, noop);
7950
8003
  } else {
@@ -7994,23 +8047,37 @@
7994
8047
 
7995
8048
  update: function() {
7996
8049
 
7997
- var active = this.top !== 0 || this.scroll > this.top;
7998
- var top = Math.max(0, this.offset);
8050
+ var ref = this._data;
8051
+ var width = ref.width;
8052
+ var scroll = ref.scroll; if ( scroll === void 0 ) scroll = 0;
8053
+ var overflow = ref.overflow;
8054
+ var overflowScroll = ref.overflowScroll; if ( overflowScroll === void 0 ) overflowScroll = 0;
8055
+ var start = ref.start;
8056
+ var end = ref.end;
8057
+ var topOffset = ref.topOffset;
8058
+ var height = ref.height;
8059
+ var offsetParentTop = ref.offsetParentTop;
8060
+ var active = start !== 0 || scroll > start;
8061
+ var top = this.offset;
7999
8062
  var position = 'fixed';
8000
8063
 
8001
- if (isNumeric(this.bottom) && this.scroll > this.bottom - this.offset) {
8002
- top = this.bottom - this.offsetParentTop;
8064
+ if (scroll > end) {
8065
+ top = end + this.offset - offsetParentTop;
8003
8066
  position = 'absolute';
8004
8067
  }
8005
8068
 
8069
+ if (overflow) {
8070
+ top -= overflowScroll;
8071
+ }
8072
+
8006
8073
  css(this.$el, {
8007
8074
  position: position,
8008
8075
  top: (top + "px"),
8009
- width: this.width
8076
+ width: width
8010
8077
  });
8011
8078
 
8012
8079
  this.isActive = active;
8013
- toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);
8080
+ toggleClass(this.$el, this.clsBelow, scroll > topOffset + height);
8014
8081
  addClass(this.$el, this.clsFixed);
8015
8082
 
8016
8083
  }
@@ -8019,16 +8086,10 @@
8019
8086
 
8020
8087
  };
8021
8088
 
8022
- function parseProp(prop, ref) {
8023
- var $props = ref.$props;
8024
- var $el = ref.$el;
8025
- var propOffset = ref[(prop + "Offset")];
8026
-
8027
-
8028
- var value = $props[prop];
8089
+ function parseProp(value, el, propOffset) {
8029
8090
 
8030
8091
  if (!value) {
8031
- return;
8092
+ return 0;
8032
8093
  }
8033
8094
 
8034
8095
  if (isString(value) && value.match(/^-?\d/)) {
@@ -8037,7 +8098,7 @@
8037
8098
 
8038
8099
  } else {
8039
8100
 
8040
- return offset(value === true ? parent($el) : query(value, $el)).bottom;
8101
+ return offset(value === true ? parent(el) : query(value, el)).bottom;
8041
8102
 
8042
8103
  }
8043
8104
  }
@@ -10734,11 +10795,9 @@
10734
10795
  computed: {
10735
10796
 
10736
10797
  props: function(properties, $el) {
10737
- var this$1$1 = this;
10738
-
10739
10798
  return keys(props).reduce(function (result, prop) {
10740
10799
  if (!isUndefined(properties[prop])) {
10741
- result[prop] = props[prop].call(this$1$1, prop, $el, properties[prop].slice());
10800
+ result[prop] = props[prop](prop, $el, properties[prop].slice());
10742
10801
  }
10743
10802
  return result;
10744
10803
  }, {});
@@ -10746,6 +10805,12 @@
10746
10805
 
10747
10806
  },
10748
10807
 
10808
+ events: {
10809
+ bgimageload: function() {
10810
+ this.$emit();
10811
+ }
10812
+ },
10813
+
10749
10814
  methods: {
10750
10815
 
10751
10816
  reset: function() {
@@ -10893,15 +10958,15 @@
10893
10958
  var bgPos = css(el, 'backgroundPosition').split(' ')[prop === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]
10894
10959
 
10895
10960
  return getCssValue(el, 'backgroundSize', '') === 'cover'
10896
- ? backgroundCoverFn.call(this, prop, el, steps, bgPos, attr)
10961
+ ? backgroundCoverFn(prop, el, steps, bgPos, attr)
10897
10962
  : setBackgroundPosFn(prop, steps, bgPos);
10898
10963
  }
10899
10964
 
10900
10965
  function backgroundCoverFn(prop, el, steps, bgPos, attr) {
10901
10966
 
10902
- var image = getBackgroundImage.call(this, el);
10967
+ var dimImage = getBackgroundImageDimensions(el);
10903
10968
 
10904
- if (!image.naturalWidth) {
10969
+ if (!dimImage.width) {
10905
10970
  return noop;
10906
10971
  }
10907
10972
 
@@ -10917,11 +10982,6 @@
10917
10982
  height: el.offsetHeight
10918
10983
  };
10919
10984
 
10920
- var dimImage = {
10921
- width: image.naturalWidth,
10922
- height: image.naturalHeight
10923
- };
10924
-
10925
10985
  var baseDim = Dimensions.cover(dimImage, dimEl);
10926
10986
  var span = baseDim[attr] - dimEl[attr];
10927
10987
 
@@ -10952,26 +11012,34 @@
10952
11012
  };
10953
11013
  }
10954
11014
 
10955
- function getBackgroundImage(el) {
10956
- var this$1$1 = this;
10957
-
11015
+ var dimensions = {};
11016
+ function getBackgroundImageDimensions(el) {
10958
11017
  var src = css(el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1');
10959
11018
 
10960
- var data = this._data;
10961
-
10962
- if (data[src]) {
10963
- return data[src];
11019
+ if (dimensions[src]) {
11020
+ return dimensions[src];
10964
11021
  }
10965
11022
 
11023
+ var image = new Image();
10966
11024
  if (src) {
10967
- var img = new Image();
10968
- img.src = src;
10969
- if (!img.naturalWidth) {
10970
- img.onload = function () { return this$1$1.$update(); };
10971
- }
11025
+ image.src = src;
10972
11026
 
10973
- return data[src] = img;
11027
+ if (!image.naturalWidth) {
11028
+ image.onload = function () {
11029
+ dimensions[src] = toDimensions(image);
11030
+ trigger(el, 'bgimageload');
11031
+ };
11032
+ }
10974
11033
  }
11034
+
11035
+ return dimensions[src] = toDimensions(image);
11036
+ }
11037
+
11038
+ function toDimensions(image) {
11039
+ return {
11040
+ width: image.naturalWidth,
11041
+ height: image.naturalHeight
11042
+ };
10975
11043
  }
10976
11044
 
10977
11045
  function getStep(steps, percent) {
@@ -11042,16 +11110,18 @@
11042
11110
  start: function(ref) {
11043
11111
  var start = ref.start;
11044
11112
 
11045
- return parseCalc(start, this.target);
11113
+ return toPx(start, 'height', this.target, true);
11046
11114
  },
11047
11115
 
11048
11116
  end: function(ref) {
11049
11117
  var end = ref.end;
11050
11118
  var viewport = ref.viewport;
11051
11119
 
11052
- return parseCalc(
11120
+ return toPx(
11053
11121
  end || (viewport = (1 - viewport) * 100) && (viewport + "vh+" + viewport + "%"),
11054
- this.target
11122
+ 'height',
11123
+ this.target,
11124
+ true
11055
11125
  );
11056
11126
  }
11057
11127
 
@@ -11098,19 +11168,6 @@
11098
11168
 
11099
11169
  };
11100
11170
 
11101
- var calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g;
11102
- function parseCalc(calc, el) {
11103
- var match;
11104
- var result = 0;
11105
- calc = calc.toString().replace(/\s/g, '');
11106
- calcRe.lastIndex = 0;
11107
- while ((match = calcRe.exec(calc)) !== null) {
11108
- result += toPx(match[0], 'height', el, true);
11109
- }
11110
-
11111
- return result;
11112
- }
11113
-
11114
11171
  function ease(percent, easing) {
11115
11172
  return easing >= 0
11116
11173
  ? Math.pow(percent, easing + 1)
@@ -11160,10 +11217,10 @@
11160
11217
 
11161
11218
  var from = prev
11162
11219
  ? getLeft(prev, list, center)
11163
- : getLeft(next, list, center) + dimensions(next).width * dir;
11220
+ : getLeft(next, list, center) + dimensions$1(next).width * dir;
11164
11221
  var to = next
11165
11222
  ? getLeft(next, list, center)
11166
- : from + dimensions(prev).width * dir * (isRtl ? -1 : 1);
11223
+ : from + dimensions$1(prev).width * dir * (isRtl ? -1 : 1);
11167
11224
 
11168
11225
  return {
11169
11226
 
@@ -11212,7 +11269,7 @@
11212
11269
  css(list, 'transform', translate(clamp(
11213
11270
  -to + (distance - distance * percent),
11214
11271
  -getWidth(list),
11215
- dimensions(list).width
11272
+ dimensions$1(list).width
11216
11273
  ) * (isRtl ? -1 : 1), 'px'));
11217
11274
 
11218
11275
  var actives = this.getActives();
@@ -11285,30 +11342,30 @@
11285
11342
  }
11286
11343
 
11287
11344
  function getMax(list) {
11288
- return Math.max(0, getWidth(list) - dimensions(list).width);
11345
+ return Math.max(0, getWidth(list) - dimensions$1(list).width);
11289
11346
  }
11290
11347
 
11291
11348
  function getWidth(list) {
11292
- return children(list).reduce(function (right, el) { return dimensions(el).width + right; }, 0);
11349
+ return children(list).reduce(function (right, el) { return dimensions$1(el).width + right; }, 0);
11293
11350
  }
11294
11351
 
11295
11352
  function centerEl(el, list) {
11296
- return dimensions(list).width / 2 - dimensions(el).width / 2;
11353
+ return dimensions$1(list).width / 2 - dimensions$1(el).width / 2;
11297
11354
  }
11298
11355
 
11299
11356
  function getElLeft(el, list) {
11300
- return el && (position(el).left + (isRtl ? dimensions(el).width - dimensions(list).width : 0)) * (isRtl ? -1 : 1) || 0;
11357
+ return el && (position(el).left + (isRtl ? dimensions$1(el).width - dimensions$1(list).width : 0)) * (isRtl ? -1 : 1) || 0;
11301
11358
  }
11302
11359
 
11303
11360
  function inView(list, listLeft) {
11304
11361
 
11305
11362
  listLeft -= 1;
11306
- var listWidth = dimensions(list).width;
11363
+ var listWidth = dimensions$1(list).width;
11307
11364
  var listRight = listLeft + listWidth + 2;
11308
11365
 
11309
11366
  return children(list).filter(function (slide) {
11310
11367
  var slideLeft = getElLeft(slide, list);
11311
- var slideRight = slideLeft + Math.min(dimensions(slide).width, listWidth);
11368
+ var slideRight = slideLeft + Math.min(dimensions$1(slide).width, listWidth);
11312
11369
 
11313
11370
  return slideLeft >= listLeft && slideRight <= listRight;
11314
11371
  });
@@ -11346,7 +11403,7 @@
11346
11403
  finite: function(ref) {
11347
11404
  var finite = ref.finite;
11348
11405
 
11349
- return finite || Math.ceil(getWidth(this.list)) < dimensions(this.list).width + getMaxElWidth(this.list) + this.center;
11406
+ return finite || Math.ceil(getWidth(this.list)) < Math.floor(dimensions$1(this.list).width + getMaxElWidth(this.list) + this.center);
11350
11407
  },
11351
11408
 
11352
11409
  maxIndex: function() {
@@ -11367,7 +11424,7 @@
11367
11424
  return true;
11368
11425
  }
11369
11426
 
11370
- lft += dimensions(el).width;
11427
+ lft += dimensions$1(el).width;
11371
11428
 
11372
11429
  });
11373
11430
 
@@ -11383,7 +11440,7 @@
11383
11440
  return;
11384
11441
  }
11385
11442
 
11386
- var width = dimensions(this.list).width / (this.center ? 2 : 1);
11443
+ var width = dimensions$1(this.list).width / (this.center ? 2 : 1);
11387
11444
 
11388
11445
  var left = 0;
11389
11446
  var leftCenter = width;
@@ -11391,7 +11448,7 @@
11391
11448
 
11392
11449
  sets = sortBy$1(this.slides, 'offsetLeft').reduce(function (sets, slide, i) {
11393
11450
 
11394
- var slideWidth = dimensions(slide).width;
11451
+ var slideWidth = dimensions$1(slide).width;
11395
11452
  var slideRight = slideLeft + slideWidth;
11396
11453
 
11397
11454
  if (slideRight > left) {
@@ -11403,7 +11460,7 @@
11403
11460
  if (!includes(sets, i)) {
11404
11461
 
11405
11462
  var cmp = this$1$1.slides[i + 1];
11406
- if (this$1$1.center && cmp && slideWidth < leftCenter - dimensions(cmp).width / 2) {
11463
+ if (this$1$1.center && cmp && slideWidth < leftCenter - dimensions$1(cmp).width / 2) {
11407
11464
  leftCenter -= slideWidth;
11408
11465
  } else {
11409
11466
  leftCenter = width;
@@ -11491,7 +11548,7 @@
11491
11548
  }
11492
11549
 
11493
11550
  var index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex;
11494
- this.duration = speedUp(this.avgWidth / this.velocity) * (dimensions(this.slides[index]).width / this.avgWidth);
11551
+ this.duration = speedUp(this.avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / this.avgWidth);
11495
11552
 
11496
11553
  this.reorder();
11497
11554
 
@@ -11531,7 +11588,7 @@
11531
11588
  }
11532
11589
 
11533
11590
  var next = this.slides[index];
11534
- var width = dimensions(this.list).width / 2 - dimensions(next).width / 2;
11591
+ var width = dimensions$1(this.list).width / 2 - dimensions$1(next).width / 2;
11535
11592
  var j = 0;
11536
11593
 
11537
11594
  while (width > 0) {
@@ -11539,7 +11596,7 @@
11539
11596
  var slide = this.slides[slideIndex];
11540
11597
 
11541
11598
  css(slide, 'order', slideIndex > index ? -2 : -1);
11542
- width -= dimensions(slide).width;
11599
+ width -= dimensions$1(slide).width;
11543
11600
  }
11544
11601
 
11545
11602
  },
@@ -11576,7 +11633,7 @@
11576
11633
  };
11577
11634
 
11578
11635
  function getMaxElWidth(list) {
11579
- return Math.max.apply(Math, [ 0 ].concat( children(list).map(function (el) { return dimensions(el).width; }) ));
11636
+ return Math.max.apply(Math, [ 0 ].concat( children(list).map(function (el) { return dimensions$1(el).width; }) ));
11580
11637
  }
11581
11638
 
11582
11639
  var sliderParallax = {
@@ -11819,6 +11876,33 @@
11819
11876
  Animations: Animations
11820
11877
  },
11821
11878
 
11879
+ connected: function() {
11880
+ var this$1$1 = this;
11881
+
11882
+ if (window.IntersectionObserver) {
11883
+ this.observer = new IntersectionObserver(function (entries) {
11884
+ if (entries.some(function (entry) { return entry.isIntersecting; })) {
11885
+ this$1$1.preloadSlides();
11886
+ }
11887
+ });
11888
+ this.observer.observe(this.$el);
11889
+ }
11890
+ },
11891
+
11892
+ disconnected: function() {
11893
+ this.observer && this.observer.disconnect();
11894
+ },
11895
+
11896
+ methods: {
11897
+
11898
+ preloadSlides: function() {
11899
+ var this$1$1 = this;
11900
+
11901
+ [1, -1].forEach(function (i) { return removeLazyLoad(this$1$1.slides[this$1$1.getIndex(this$1$1.index + i)]); });
11902
+ }
11903
+
11904
+ },
11905
+
11822
11906
  update: {
11823
11907
 
11824
11908
  read: function() {
@@ -11841,6 +11925,10 @@
11841
11925
  height = Math.min(this.maxHeight, height);
11842
11926
  }
11843
11927
 
11928
+ if (isVisible(this.$el)) {
11929
+ this.preloadSlides();
11930
+ }
11931
+
11844
11932
  return {height: height - boxModelAdjust(this.list, 'height', 'content-box')};
11845
11933
  },
11846
11934
 
@@ -11856,6 +11944,10 @@
11856
11944
 
11857
11945
  };
11858
11946
 
11947
+ function removeLazyLoad(el) {
11948
+ el && $$('img[loading="lazy"]', el).forEach(function (el) { return el.loading = 'eager'; });
11949
+ }
11950
+
11859
11951
  var sortable = {
11860
11952
 
11861
11953
  mixins: [Class, Animate],
@@ -12090,7 +12182,6 @@
12090
12182
 
12091
12183
  off(document, pointerMove, this.move);
12092
12184
  off(document, pointerUp, this.end);
12093
- off(window, 'scroll', this.scroll);
12094
12185
 
12095
12186
  if (!this.drag) {
12096
12187
  return;
@@ -12173,7 +12264,7 @@
12173
12264
 
12174
12265
  var x = pos.x;
12175
12266
  var y = pos.y;
12176
- y += window.pageYOffset;
12267
+ y += scrollTop(window);
12177
12268
 
12178
12269
  var dist = (Date.now() - last) * .3;
12179
12270
  last = Date.now();