uikit 3.10.2-dev.c8aa7eda2 → 3.11.1

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 (61) hide show
  1. package/CHANGELOG.md +35 -14
  2. package/build/icons.js +4 -4
  3. package/build/scope.js +4 -6
  4. package/dist/css/uikit-core-rtl.css +10 -1
  5. package/dist/css/uikit-core-rtl.min.css +1 -1
  6. package/dist/css/uikit-core.css +10 -1
  7. package/dist/css/uikit-core.min.css +1 -1
  8. package/dist/css/uikit-rtl.css +10 -1
  9. package/dist/css/uikit-rtl.min.css +1 -1
  10. package/dist/css/uikit.css +10 -1
  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 -1
  14. package/dist/js/components/filter.js +1 -1
  15. package/dist/js/components/filter.min.js +1 -1
  16. package/dist/js/components/lightbox-panel.js +1 -1
  17. package/dist/js/components/lightbox-panel.min.js +1 -1
  18. package/dist/js/components/lightbox.js +1 -1
  19. package/dist/js/components/lightbox.min.js +1 -1
  20. package/dist/js/components/notification.js +1 -1
  21. package/dist/js/components/notification.min.js +1 -1
  22. package/dist/js/components/parallax.js +257 -264
  23. package/dist/js/components/parallax.min.js +1 -1
  24. package/dist/js/components/slider-parallax.js +215 -257
  25. package/dist/js/components/slider-parallax.min.js +1 -1
  26. package/dist/js/components/slider.js +1 -1
  27. package/dist/js/components/slider.min.js +1 -1
  28. package/dist/js/components/slideshow-parallax.js +215 -257
  29. package/dist/js/components/slideshow-parallax.min.js +1 -1
  30. package/dist/js/components/slideshow.js +1 -1
  31. package/dist/js/components/slideshow.min.js +1 -1
  32. package/dist/js/components/sortable.js +1 -1
  33. package/dist/js/components/sortable.min.js +1 -1
  34. package/dist/js/components/tooltip.js +1 -1
  35. package/dist/js/components/tooltip.min.js +1 -1
  36. package/dist/js/components/upload.js +1 -1
  37. package/dist/js/components/upload.min.js +1 -1
  38. package/dist/js/uikit-core.js +28 -26
  39. package/dist/js/uikit-core.min.js +1 -1
  40. package/dist/js/uikit-icons.js +1 -1
  41. package/dist/js/uikit-icons.min.js +1 -1
  42. package/dist/js/uikit.js +284 -289
  43. package/dist/js/uikit.min.js +1 -1
  44. package/package.json +5 -5
  45. package/src/js/components/parallax.js +38 -8
  46. package/src/js/core/grid.js +2 -2
  47. package/src/js/core/svg.js +9 -7
  48. package/src/js/mixin/parallax.js +209 -242
  49. package/src/js/util/dimensions.js +4 -2
  50. package/src/js/util/viewport.js +9 -13
  51. package/src/less/components/position.less +2 -0
  52. package/src/less/components/sticky.less +6 -0
  53. package/src/scss/components/position.scss +2 -0
  54. package/src/scss/components/sticky.scss +6 -0
  55. package/tests/index.html +1 -1
  56. package/tests/js/index.js +1 -1
  57. package/tests/notification.html +5 -5
  58. package/tests/parallax.html +66 -50
  59. package/tests/sticky-parallax.html +274 -0
  60. package/tests/sticky.html +2 -2
  61. package/tests/tab.html +1 -1
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.10.2-dev.c8aa7eda2 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.11.1 | 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() :
@@ -1745,9 +1745,10 @@
1745
1745
  return pos;
1746
1746
  }
1747
1747
 
1748
- function toPx(value, property, element) {
1748
+ function toPx(value, property, element, offsetDim) {
1749
1749
  if ( property === void 0 ) property = 'width';
1750
1750
  if ( element === void 0 ) element = window;
1751
+ if ( offsetDim === void 0 ) offsetDim = false;
1751
1752
 
1752
1753
  return isNumeric(value)
1753
1754
  ? +value
@@ -1756,7 +1757,9 @@
1756
1757
  : endsWith(value, 'vw')
1757
1758
  ? percent(width(toWindow(element)), value)
1758
1759
  : endsWith(value, '%')
1759
- ? percent(dimensions(element)[property], value)
1760
+ ? percent(offsetDim
1761
+ ? element[("offset" + (ucfirst(property)))]
1762
+ : dimensions(element)[property], value)
1760
1763
  : toFloat(value);
1761
1764
  }
1762
1765
 
@@ -2316,8 +2319,9 @@
2316
2319
 
2317
2320
  }
2318
2321
 
2319
- function scrolledOver(element, heightOffset) {
2320
- if ( heightOffset === void 0 ) heightOffset = 0;
2322
+ function scrolledOver(element, startOffset, endOffset) {
2323
+ if ( startOffset === void 0 ) startOffset = 0;
2324
+ if ( endOffset === void 0 ) endOffset = 0;
2321
2325
 
2322
2326
 
2323
2327
  if (!isVisible(element)) {
@@ -2328,18 +2332,14 @@
2328
2332
  var scrollElement = ref[0];
2329
2333
  var scrollHeight = scrollElement.scrollHeight;
2330
2334
  var scrollTop = scrollElement.scrollTop;
2331
- var clientHeight = getViewportClientHeight(scrollElement);
2332
- var viewportTop = offsetPosition(element)[0] - scrollTop - offsetPosition(scrollElement)[0];
2333
- var viewportDist = Math.min(clientHeight, viewportTop + scrollTop);
2334
-
2335
- var top = viewportTop - viewportDist;
2336
- var dist = Math.min(
2337
- element.offsetHeight + heightOffset + viewportDist,
2338
- scrollHeight - (viewportTop + scrollTop),
2339
- scrollHeight - clientHeight
2340
- );
2335
+ var viewportHeight = getViewportClientHeight(scrollElement);
2336
+ var maxScroll = scrollHeight - viewportHeight;
2337
+ var elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
2338
+
2339
+ var start = Math.max(0, elementOffsetTop - viewportHeight + startOffset);
2340
+ var end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset);
2341
2341
 
2342
- return clamp(-1 * top / dist);
2342
+ return clamp((scrollTop - start) / (end - start));
2343
2343
  }
2344
2344
 
2345
2345
  function scrollParents(element, overflowRe, scrollable) {
@@ -3462,7 +3462,7 @@
3462
3462
  UIkit.data = '__uikit__';
3463
3463
  UIkit.prefix = 'uk-';
3464
3464
  UIkit.options = {};
3465
- UIkit.version = '3.10.2-dev.c8aa7eda2';
3465
+ UIkit.version = '3.11.1';
3466
3466
 
3467
3467
  globalAPI(UIkit);
3468
3468
  hooksAPI(UIkit);
@@ -5007,7 +5007,7 @@
5007
5007
  {
5008
5008
 
5009
5009
  read: function(ref) {
5010
- var height$1 = ref.height;
5010
+ ref.height;
5011
5011
 
5012
5012
 
5013
5013
  if (positionedAbsolute(this.$el)) {
@@ -5016,7 +5016,7 @@
5016
5016
 
5017
5017
  return {
5018
5018
  scrolled: this.parallax
5019
- ? scrolledOver(this.$el, height$1 ? height$1 - height(this.$el) : 0) * Math.abs(this.parallax)
5019
+ ? scrolledOver(this.$el) * Math.abs(this.parallax)
5020
5020
  : false
5021
5021
  };
5022
5022
  },
@@ -5389,15 +5389,17 @@
5389
5389
 
5390
5390
 
5391
5391
  this.svg.then(function (svg) {
5392
- if (!this$1$1._connected) {
5393
-
5394
- if (isVoidElement(this$1$1.$el)) {
5395
- this$1$1.$el.hidden = false;
5396
- }
5392
+ if (this$1$1._connected) {
5393
+ return;
5394
+ }
5397
5395
 
5398
- remove$1(svg);
5399
- this$1$1.svgEl = null;
5396
+ if (isVoidElement(this$1$1.$el)) {
5397
+ this$1$1.$el.hidden = false;
5400
5398
  }
5399
+
5400
+ remove$1(svg);
5401
+ this$1$1.svgEl = null;
5402
+
5401
5403
  });
5402
5404
 
5403
5405
  this.svg = null;
@@ -10698,357 +10700,315 @@
10698
10700
  };
10699
10701
  }
10700
10702
 
10701
- var props = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity', 'stroke'];
10703
+ var props = {
10704
+ x: transformFn,
10705
+ y: transformFn,
10706
+ rotate: transformFn,
10707
+ scale: transformFn,
10708
+ color: colorFn,
10709
+ backgroundColor: colorFn,
10710
+ borderColor: colorFn,
10711
+ blur: filterFn,
10712
+ hue: filterFn,
10713
+ fopacity: filterFn,
10714
+ grayscale: filterFn,
10715
+ invert: filterFn,
10716
+ saturate: filterFn,
10717
+ sepia: filterFn,
10718
+ opacity: cssPropFn,
10719
+ stroke: strokeFn,
10720
+ bgx: backgroundFn,
10721
+ bgy: backgroundFn
10722
+ };
10723
+
10724
+ var keys = Object.keys;
10702
10725
 
10703
10726
  var Parallax = {
10704
10727
 
10705
10728
  mixins: [Media],
10706
10729
 
10707
- props: props.reduce(function (props, prop) {
10708
- props[prop] = 'list';
10709
- return props;
10710
- }, {}),
10730
+ props: fillObject(keys(props), 'list'),
10711
10731
 
10712
- data: props.reduce(function (data, prop) {
10713
- data[prop] = undefined;
10714
- return data;
10715
- }, {}),
10732
+ data: fillObject(keys(props), undefined),
10716
10733
 
10717
10734
  computed: {
10718
10735
 
10719
10736
  props: function(properties, $el) {
10720
10737
  var this$1$1 = this;
10721
10738
 
10722
-
10723
- return props.reduce(function (props, prop) {
10724
-
10725
- if (isUndefined(properties[prop])) {
10726
- return props;
10739
+ return keys(props).reduce(function (result, prop) {
10740
+ if (!isUndefined(properties[prop])) {
10741
+ result[prop] = props[prop].call(this$1$1, prop, $el, properties[prop].slice());
10727
10742
  }
10743
+ return result;
10744
+ }, {});
10745
+ }
10728
10746
 
10729
- var isColor = prop.match(/color/i);
10730
- var isCssProp = isColor || prop === 'opacity';
10731
-
10732
- var pos, bgPos, diff;
10733
- var steps = properties[prop].slice();
10734
-
10735
- if (isCssProp) {
10736
- css($el, prop, '');
10737
- }
10738
-
10739
- if (steps.length < 2) {
10740
- steps.unshift((prop === 'scale'
10741
- ? 1
10742
- : isCssProp
10743
- ? css($el, prop)
10744
- : 0) || 0);
10745
- }
10746
-
10747
- var unit = getUnit(steps);
10748
-
10749
- if (isColor) {
10750
-
10751
- var ref = $el.style;
10752
- var color = ref.color;
10753
- steps = steps.map(function (step) { return parseColor($el, step); });
10754
- $el.style.color = color;
10755
-
10756
- } else if (startsWith(prop, 'bg')) {
10757
-
10758
- var attr = prop === 'bgy' ? 'height' : 'width';
10759
- steps = steps.map(function (step) { return toPx(step, attr, $el); });
10760
-
10761
- css($el, ("background-position-" + (prop[2])), '');
10762
- bgPos = css($el, 'backgroundPosition').split(' ')[prop[2] === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]
10763
-
10764
- if (this$1$1.covers) {
10747
+ },
10765
10748
 
10766
- var min = Math.min.apply(Math, steps);
10767
- var max = Math.max.apply(Math, steps);
10768
- var down = steps.indexOf(min) < steps.indexOf(max);
10749
+ methods: {
10769
10750
 
10770
- diff = max - min;
10751
+ reset: function() {
10752
+ var this$1$1 = this;
10771
10753
 
10772
- steps = steps.map(function (step) { return step - (down ? min : max); });
10773
- pos = (down ? -diff : 0) + "px";
10754
+ each(this.getCss(0), function (_, prop) { return css(this$1$1.$el, prop, ''); });
10755
+ },
10774
10756
 
10775
- } else {
10757
+ getCss: function(percent) {
10758
+ var this$1$1 = this;
10776
10759
 
10777
- pos = bgPos;
10760
+ return keys(this.props).reduce(function (css, prop) {
10761
+ this$1$1.props[prop](css, percent);
10762
+ return css;
10763
+ }, {transform: '', filter: ''});
10764
+ }
10778
10765
 
10779
- }
10766
+ }
10780
10767
 
10781
- } else {
10768
+ };
10782
10769
 
10783
- steps = steps.map(toFloat);
10770
+ function transformFn(prop, el, steps) {
10784
10771
 
10785
- }
10772
+ var unit = getUnit(steps) || {x: 'px', y: 'px', rotate: 'deg'}[prop] || '';
10786
10773
 
10787
- if (prop === 'stroke') {
10774
+ if (prop === 'x' || prop === 'y') {
10775
+ prop = "translate" + (ucfirst(prop));
10776
+ }
10788
10777
 
10789
- if (!steps.some(function (step) { return step; })) {
10790
- return props;
10791
- }
10778
+ steps = steps.map(toFloat);
10792
10779
 
10793
- var length = getMaxPathLength($el);
10794
- css($el, 'strokeDasharray', length);
10780
+ if (steps.length === 1) {
10781
+ steps.unshift(prop === 'scale' ? 1 : 0);
10782
+ }
10795
10783
 
10796
- if (unit === '%') {
10797
- steps = steps.map(function (step) { return step * length / 100; });
10798
- }
10784
+ return function (css, percent) {
10785
+ var value = getValue(steps, percent);
10799
10786
 
10800
- steps = steps.reverse();
10787
+ if (startsWith(prop, 'translate')) {
10788
+ value = toFloat(value).toFixed(unit === 'px' ? 0 : 6);
10789
+ }
10801
10790
 
10802
- prop = 'strokeDashoffset';
10803
- }
10791
+ css.transform += " " + prop + "(" + value + unit + ")";
10792
+ };
10793
+ }
10804
10794
 
10805
- props[prop] = {steps: steps, unit: unit, pos: pos, bgPos: bgPos, diff: diff};
10795
+ function colorFn(prop, el, steps) {
10806
10796
 
10807
- return props;
10797
+ if (steps.length === 1) {
10798
+ steps.unshift(getCssValue(el, prop, ''));
10799
+ }
10808
10800
 
10809
- }, {});
10801
+ steps = steps.map(function (step) { return parseColor(el, step); });
10810
10802
 
10811
- },
10803
+ return function (css, percent) {
10812
10804
 
10813
- bgProps: function() {
10814
- var this$1$1 = this;
10805
+ var ref = getStep(steps, percent);
10806
+ var start = ref[0];
10807
+ var end = ref[1];
10808
+ var p = ref[2];
10809
+ var value = start.map(function (value, i) {
10810
+ value += p * (end[i] - value);
10811
+ return i === 3 ? toFloat(value) : parseInt(value, 10);
10812
+ }).join(',');
10813
+ css[prop] = "rgba(" + value + ")";
10814
+ };
10815
+ }
10815
10816
 
10816
- return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1$1.props; });
10817
- },
10817
+ function parseColor(el, color) {
10818
+ return getCssValue(el, 'color', color)
10819
+ .split(/[(),]/g)
10820
+ .slice(1, -1)
10821
+ .concat(1)
10822
+ .slice(0, 4)
10823
+ .map(toFloat);
10824
+ }
10818
10825
 
10819
- covers: function(_, $el) {
10820
- return covers($el);
10821
- }
10826
+ function filterFn(prop, el, steps) {
10822
10827
 
10823
- },
10828
+ if (steps.length === 1) {
10829
+ steps.unshift(0);
10830
+ }
10824
10831
 
10825
- disconnected: function() {
10826
- delete this._image;
10827
- },
10832
+ var unit = getUnit(steps) || {blur: 'px', hue: 'deg'}[prop] || '%';
10833
+ prop = {fopacity: 'opacity', hue: 'hue-rotate'}[prop] || prop;
10834
+ steps = steps.map(toFloat);
10828
10835
 
10829
- update: {
10836
+ return function (css, percent) {
10837
+ var value = getValue(steps, percent);
10838
+ css.filter += " " + prop + "(" + (value + unit) + ")";
10839
+ };
10840
+ }
10830
10841
 
10831
- read: function(data) {
10832
- var this$1$1 = this;
10842
+ function cssPropFn(prop, el, steps) {
10833
10843
 
10844
+ if (steps.length === 1) {
10845
+ steps.unshift(getCssValue(el, prop, ''));
10846
+ }
10834
10847
 
10835
- if (!this.matchMedia) {
10836
- return;
10837
- }
10848
+ steps = steps.map(toFloat);
10838
10849
 
10839
- if (!data.image && this.covers && this.bgProps.length) {
10840
- var src = css(this.$el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1');
10850
+ return function (css, percent) {
10851
+ css[prop] = getValue(steps, percent);
10852
+ };
10853
+ }
10841
10854
 
10842
- if (src) {
10843
- var img = new Image();
10844
- img.src = src;
10845
- data.image = img;
10855
+ function strokeFn(prop, el, steps) {
10846
10856
 
10847
- if (!img.naturalWidth) {
10848
- img.onload = function () { return this$1$1.$update(); };
10849
- }
10850
- }
10851
-
10852
- }
10857
+ if (steps.length === 1) {
10858
+ steps.unshift(0);
10859
+ }
10853
10860
 
10854
- var image = data.image;
10861
+ var unit = getUnit(steps);
10862
+ steps = steps.map(toFloat);
10855
10863
 
10856
- if (!image || !image.naturalWidth) {
10857
- return;
10858
- }
10864
+ if (!steps.some(function (step) { return step; })) {
10865
+ return noop;
10866
+ }
10859
10867
 
10860
- var dimEl = {
10861
- width: this.$el.offsetWidth,
10862
- height: this.$el.offsetHeight
10863
- };
10864
- var dimImage = {
10865
- width: image.naturalWidth,
10866
- height: image.naturalHeight
10867
- };
10868
+ var length = getMaxPathLength(el);
10869
+ css(el, 'strokeDasharray', length);
10868
10870
 
10869
- var dim = Dimensions.cover(dimImage, dimEl);
10871
+ if (unit === '%') {
10872
+ steps = steps.map(function (step) { return step * length / 100; });
10873
+ }
10870
10874
 
10871
- this.bgProps.forEach(function (prop) {
10875
+ steps = steps.reverse();
10872
10876
 
10873
- var ref = this$1$1.props[prop];
10874
- var diff = ref.diff;
10875
- var bgPos = ref.bgPos;
10876
- var steps = ref.steps;
10877
- var attr = prop === 'bgy' ? 'height' : 'width';
10878
- var span = dim[attr] - dimEl[attr];
10877
+ return function (css, percent) {
10878
+ css.strokeDashoffset = getValue(steps, percent);
10879
+ };
10880
+ }
10879
10881
 
10880
- if (span < diff) {
10881
- dimEl[attr] = dim[attr] + diff - span;
10882
- } else if (span > diff) {
10882
+ function backgroundFn(prop, el, steps) {
10883
10883
 
10884
- var posPercentage = dimEl[attr] / toPx(bgPos, attr, this$1$1.$el);
10884
+ if (steps.length === 1) {
10885
+ steps.unshift(0);
10886
+ }
10885
10887
 
10886
- if (posPercentage) {
10887
- this$1$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / posPercentage; });
10888
- }
10889
- }
10888
+ prop = prop.substr(-1);
10889
+ var attr = prop === 'y' ? 'height' : 'width';
10890
+ steps = steps.map(function (step) { return toPx(step, attr, el); });
10890
10891
 
10891
- dim = Dimensions.cover(dimImage, dimEl);
10892
- });
10892
+ css(el, ("background-position-" + prop), '');
10893
+ var bgPos = css(el, 'backgroundPosition').split(' ')[prop === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]
10893
10894
 
10894
- data.dim = dim;
10895
- },
10895
+ return getCssValue(el, 'backgroundSize', '') === 'cover'
10896
+ ? backgroundCoverFn.call(this, prop, el, steps, bgPos, attr)
10897
+ : setBackgroundPosFn(prop, steps, bgPos);
10898
+ }
10896
10899
 
10897
- write: function(ref) {
10898
- var dim = ref.dim;
10900
+ function backgroundCoverFn(prop, el, steps, bgPos, attr) {
10899
10901
 
10902
+ var image = getBackgroundImage.call(this, el);
10900
10903
 
10901
- if (!this.matchMedia) {
10902
- css(this.$el, {backgroundSize: '', backgroundRepeat: ''});
10903
- return;
10904
- }
10904
+ if (!image.naturalWidth) {
10905
+ return noop;
10906
+ }
10905
10907
 
10906
- dim && css(this.$el, {
10907
- backgroundSize: ((dim.width) + "px " + (dim.height) + "px"),
10908
- backgroundRepeat: 'no-repeat'
10909
- });
10908
+ var min = Math.min.apply(Math, steps);
10909
+ var max = Math.max.apply(Math, steps);
10910
+ var down = steps.indexOf(min) < steps.indexOf(max);
10910
10911
 
10911
- },
10912
+ var diff = max - min;
10913
+ var pos = (down ? -diff : 0) - (down ? min : max);
10912
10914
 
10913
- events: ['resize']
10915
+ var dimEl = {
10916
+ width: el.offsetWidth,
10917
+ height: el.offsetHeight
10918
+ };
10914
10919
 
10915
- },
10920
+ var dimImage = {
10921
+ width: image.naturalWidth,
10922
+ height: image.naturalHeight
10923
+ };
10916
10924
 
10917
- methods: {
10925
+ var baseDim = Dimensions.cover(dimImage, dimEl);
10926
+ var span = baseDim[attr] - dimEl[attr];
10918
10927
 
10919
- reset: function() {
10920
- var this$1$1 = this;
10928
+ if (span < diff) {
10929
+ dimEl[attr] = baseDim[attr] + diff - span;
10930
+ } else if (span > diff) {
10921
10931
 
10922
- each(this.getCss(0), function (_, prop) { return css(this$1$1.$el, prop, ''); });
10923
- },
10932
+ var posPercentage = dimEl[attr] / toPx(bgPos, attr, el, true);
10924
10933
 
10925
- getCss: function(percent) {
10934
+ if (posPercentage) {
10935
+ pos -= (span - diff) / posPercentage;
10936
+ }
10937
+ }
10926
10938
 
10927
- var ref = this;
10928
- var props = ref.props;
10929
- return Object.keys(props).reduce(function (css, prop) {
10930
-
10931
- var ref = props[prop];
10932
- var steps = ref.steps;
10933
- var unit = ref.unit;
10934
- var pos = ref.pos;
10935
- var value = getValue(steps, percent);
10936
-
10937
- switch (prop) {
10938
-
10939
- // transforms
10940
- case 'x':
10941
- case 'y': {
10942
- unit = unit || 'px';
10943
- css.transform += " translate" + (ucfirst(prop)) + "(" + (toFloat(value).toFixed(unit === 'px' ? 0 : 2)) + unit + ")";
10944
- break;
10945
- }
10946
- case 'rotate':
10947
- unit = unit || 'deg';
10948
- css.transform += " rotate(" + (value + unit) + ")";
10949
- break;
10950
- case 'scale':
10951
- css.transform += " scale(" + value + ")";
10952
- break;
10939
+ var dim = Dimensions.cover(dimImage, dimEl);
10953
10940
 
10954
- // bg image
10955
- case 'bgy':
10956
- case 'bgx':
10957
- css[("background-position-" + (prop[2]))] = "calc(" + pos + " + " + value + "px)";
10958
- break;
10941
+ var fn = setBackgroundPosFn(prop, steps, (pos + "px"));
10942
+ return function (css, percent) {
10943
+ fn(css, percent);
10944
+ css.backgroundSize = (dim.width) + "px " + (dim.height) + "px";
10945
+ css.backgroundRepeat = 'no-repeat';
10946
+ };
10947
+ }
10959
10948
 
10960
- // color
10961
- case 'color':
10962
- case 'backgroundColor':
10963
- case 'borderColor': {
10949
+ function setBackgroundPosFn(prop, steps, pos) {
10950
+ return function (css, percent) {
10951
+ css[("background-position-" + prop)] = "calc(" + pos + " + " + (getValue(steps, percent)) + "px)";
10952
+ };
10953
+ }
10964
10954
 
10965
- var ref$1 = getStep(steps, percent);
10966
- var start = ref$1[0];
10967
- var end = ref$1[1];
10968
- var p = ref$1[2];
10955
+ function getBackgroundImage(el) {
10956
+ var this$1$1 = this;
10969
10957
 
10970
- css[prop] = "rgba(" + (start.map(function (value, i) {
10971
- value += p * (end[i] - value);
10972
- return i === 3 ? toFloat(value) : parseInt(value, 10);
10973
- }).join(',')) + ")";
10974
- break;
10975
- }
10976
- // CSS Filter
10977
- case 'blur':
10978
- unit = unit || 'px';
10979
- css.filter += " blur(" + (value + unit) + ")";
10980
- break;
10981
- case 'hue':
10982
- unit = unit || 'deg';
10983
- css.filter += " hue-rotate(" + (value + unit) + ")";
10984
- break;
10985
- case 'fopacity':
10986
- unit = unit || '%';
10987
- css.filter += " opacity(" + (value + unit) + ")";
10988
- break;
10989
- case 'grayscale':
10990
- case 'invert':
10991
- case 'saturate':
10992
- case 'sepia':
10993
- unit = unit || '%';
10994
- css.filter += " " + prop + "(" + (value + unit) + ")";
10995
- break;
10996
- default:
10997
- css[prop] = value;
10998
- }
10958
+ var src = css(el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1');
10999
10959
 
11000
- return css;
10960
+ var data = this._data;
11001
10961
 
11002
- }, {transform: '', filter: ''});
10962
+ if (data[src]) {
10963
+ return data[src];
10964
+ }
11003
10965
 
10966
+ if (src) {
10967
+ var img = new Image();
10968
+ img.src = src;
10969
+ if (!img.naturalWidth) {
10970
+ img.onload = function () { return this$1$1.$update(); };
11004
10971
  }
11005
10972
 
10973
+ return data[src] = img;
11006
10974
  }
11007
-
11008
- };
11009
-
11010
- function parseColor(el, color) {
11011
- return css(css(el, 'color', color), 'color')
11012
- .split(/[(),]/g)
11013
- .slice(1, -1)
11014
- .concat(1)
11015
- .slice(0, 4)
11016
- .map(toFloat);
11017
10975
  }
11018
10976
 
11019
10977
  function getStep(steps, percent) {
11020
10978
  var count = steps.length - 1;
11021
10979
  var index = Math.min(Math.floor(count * percent), count - 1);
11022
- var step = steps.slice(index, index + 2);
11023
-
11024
- step.push(percent === 1 ? 1 : percent % (1 / count) * count);
11025
10980
 
11026
- return step;
10981
+ return steps
10982
+ .slice(index, index + 2)
10983
+ .concat(percent === 1 ? 1 : percent % (1 / count) * count);
11027
10984
  }
11028
10985
 
11029
- function getValue(steps, percent, digits) {
11030
- if ( digits === void 0 ) digits = 2;
11031
-
10986
+ function getValue(steps, percent) {
11032
10987
  var ref = getStep(steps, percent);
11033
10988
  var start = ref[0];
11034
10989
  var end = ref[1];
11035
10990
  var p = ref[2];
11036
- return (isNumber(start)
10991
+ return isNumber(start)
11037
10992
  ? start + Math.abs(start - end) * p * (start < end ? 1 : -1)
11038
- : +end
11039
- ).toFixed(digits);
10993
+ : +end;
11040
10994
  }
11041
10995
 
11042
- function getUnit(steps) {
11043
- return steps.reduce(function (unit, step) { return isString(step) && step.replace(/-|\d/g, '').trim() || unit; }, '');
10996
+ function getUnit(steps, defaultUnit) {
10997
+ return steps.reduce(function (unit, step) { return unit || isString(step) && step.replace(/[\d-]/g, '').trim(); }, '') || defaultUnit;
11044
10998
  }
11045
10999
 
11046
- function covers(el) {
11047
- var ref = el.style;
11048
- var backgroundSize = ref.backgroundSize;
11049
- var covers = css(css(el, 'backgroundSize', ''), 'backgroundSize') === 'cover';
11050
- el.style.backgroundSize = backgroundSize;
11051
- return covers;
11000
+ function getCssValue(el, prop, value) {
11001
+ var prev = el.style[prop];
11002
+ var val = css(css(el, prop, value), prop);
11003
+ el.style[prop] = prev;
11004
+ return val;
11005
+ }
11006
+
11007
+ function fillObject(keys, value) {
11008
+ return keys.reduce(function (data, prop) {
11009
+ data[prop] = value;
11010
+ return data;
11011
+ }, {});
11052
11012
  }
11053
11013
 
11054
11014
  var parallax = {
@@ -11057,14 +11017,18 @@
11057
11017
 
11058
11018
  props: {
11059
11019
  target: String,
11060
- viewport: Number,
11061
- easing: Number
11020
+ viewport: Number, // Deprecated
11021
+ easing: Number,
11022
+ start: String,
11023
+ end: String
11062
11024
  },
11063
11025
 
11064
11026
  data: {
11065
11027
  target: false,
11066
11028
  viewport: 1,
11067
- easing: 1
11029
+ easing: 1,
11030
+ start: 0,
11031
+ end: 0
11068
11032
  },
11069
11033
 
11070
11034
  computed: {
@@ -11073,6 +11037,22 @@
11073
11037
  var target = ref.target;
11074
11038
 
11075
11039
  return getOffsetElement(target && query(target, $el) || $el);
11040
+ },
11041
+
11042
+ start: function(ref) {
11043
+ var start = ref.start;
11044
+
11045
+ return parseCalc(start, this.target);
11046
+ },
11047
+
11048
+ end: function(ref) {
11049
+ var end = ref.end;
11050
+ var viewport = ref.viewport;
11051
+
11052
+ return parseCalc(
11053
+ end || (viewport = (1 - viewport) * 100) && (viewport + "vh+" + viewport + "%"),
11054
+ this.target
11055
+ );
11076
11056
  }
11077
11057
 
11078
11058
  },
@@ -11092,11 +11072,11 @@
11092
11072
  }
11093
11073
 
11094
11074
  var prev = percent;
11095
- percent = ease(scrolledOver(this.target) / (this.viewport || 1), this.easing);
11075
+ percent = ease(scrolledOver(this.target, this.start, this.end), this.easing);
11096
11076
 
11097
11077
  return {
11098
11078
  percent: percent,
11099
- style: prev !== percent ? this.getCss(percent) : false
11079
+ style: prev === percent ? false : this.getCss(percent)
11100
11080
  };
11101
11081
  },
11102
11082
 
@@ -11118,8 +11098,23 @@
11118
11098
 
11119
11099
  };
11120
11100
 
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
+
11121
11114
  function ease(percent, easing) {
11122
- return clamp(percent * (1 - (easing - easing * percent)));
11115
+ return easing >= 0
11116
+ ? Math.pow(percent, easing + 1)
11117
+ : 1 - Math.pow(1 - percent, -easing + 1);
11123
11118
  }
11124
11119
 
11125
11120
  // SVG elements do not inherit from HTMLElement
@@ -11128,7 +11123,7 @@
11128
11123
  ? 'offsetTop' in el
11129
11124
  ? el
11130
11125
  : getOffsetElement(parent(el))
11131
- : document.body;
11126
+ : document.documentElement;
11132
11127
  }
11133
11128
 
11134
11129
  var SliderReactive = {