uikit 3.13.9 → 3.13.11-dev.3b88fea57

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 (99) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/build/build.js +4 -1
  3. package/dist/css/uikit-core-rtl.css +49 -8
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +49 -8
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +49 -6
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +49 -6
  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 +7 -3
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +7 -3
  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 +21 -12
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +21 -12
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +2 -2
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +21 -12
  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 +2 -2
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +62 -30
  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 +386 -301
  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 +433 -309
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/components/slider.js +1 -1
  45. package/src/js/components/sortable.js +2 -3
  46. package/src/js/components/tooltip.js +38 -3
  47. package/src/js/core/drop.js +20 -16
  48. package/src/js/core/navbar.js +18 -6
  49. package/src/js/core/scrollspy-nav.js +6 -11
  50. package/src/js/core/sticky.js +58 -22
  51. package/src/js/core/toggle.js +8 -8
  52. package/src/js/mixin/media.js +12 -9
  53. package/src/js/mixin/modal.js +6 -2
  54. package/src/js/mixin/parallax.js +8 -3
  55. package/src/js/mixin/position.js +24 -24
  56. package/src/js/uikit-core.js +0 -4
  57. package/src/js/util/lang.js +34 -42
  58. package/src/js/util/position.js +177 -125
  59. package/src/js/util/viewport.js +42 -22
  60. package/src/less/components/drop.less +0 -1
  61. package/src/less/components/dropdown.less +11 -1
  62. package/src/less/components/icon.less +3 -0
  63. package/src/less/components/nav.less +23 -0
  64. package/src/less/components/navbar.less +26 -2
  65. package/src/less/components/search.less +2 -0
  66. package/src/less/components/sticky.less +8 -3
  67. package/src/less/components/utility.less +1 -0
  68. package/src/less/theme/dropdown.less +4 -0
  69. package/src/less/theme/nav.less +6 -0
  70. package/src/less/theme/navbar.less +4 -0
  71. package/src/less/theme/search.less +6 -0
  72. package/src/scss/components/drop.scss +0 -1
  73. package/src/scss/components/dropdown.scss +11 -1
  74. package/src/scss/components/icon.scss +3 -0
  75. package/src/scss/components/nav.scss +23 -0
  76. package/src/scss/components/navbar.scss +26 -2
  77. package/src/scss/components/search.scss +2 -0
  78. package/src/scss/components/sticky.scss +8 -3
  79. package/src/scss/components/utility.scss +1 -0
  80. package/src/scss/mixins-theme.scss +5 -0
  81. package/src/scss/mixins.scss +5 -0
  82. package/src/scss/theme/dropdown.scss +4 -0
  83. package/src/scss/theme/nav.scss +6 -0
  84. package/src/scss/theme/navbar.scss +4 -0
  85. package/src/scss/theme/search.scss +6 -0
  86. package/src/scss/variables-theme.scss +5 -1
  87. package/src/scss/variables.scss +5 -1
  88. package/tests/alert.html +1 -1
  89. package/tests/animation.html +216 -214
  90. package/tests/drop.html +129 -80
  91. package/tests/dropdown.html +16 -2
  92. package/tests/nav.html +27 -0
  93. package/tests/navbar.html +56 -5
  94. package/tests/parallax.html +5 -5
  95. package/tests/position.html +38 -39
  96. package/tests/sticky-navbar.html +6 -6
  97. package/tests/sticky-parallax.html +169 -148
  98. package/tests/sticky.html +300 -49
  99. package/src/js/core/core.js +0 -25
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.13.9 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.13.11-dev.3b88fea57 | 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() :
@@ -141,10 +141,6 @@
141
141
  return (document == null ? void 0 : document.defaultView) || window;
142
142
  }
143
143
 
144
- function toMs(time) {
145
- return time ? endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000 : 0;
146
- }
147
-
148
144
  function isEqual(value, other) {
149
145
  return (
150
146
  value === other ||
@@ -212,48 +208,44 @@
212
208
 
213
209
  }
214
210
 
215
- const Dimensions = {
216
- ratio(dimensions, prop, value) {
217
- const aProp = prop === 'width' ? 'height' : 'width';
211
+ function ratio(dimensions, prop, value) {
212
+ const aProp = prop === 'width' ? 'height' : 'width';
218
213
 
219
- return {
220
- [aProp]: dimensions[prop] ?
221
- Math.round(value * dimensions[aProp] / dimensions[prop]) :
222
- dimensions[aProp],
223
- [prop]: value };
214
+ return {
215
+ [aProp]: dimensions[prop] ?
216
+ Math.round(value * dimensions[aProp] / dimensions[prop]) :
217
+ dimensions[aProp],
218
+ [prop]: value };
224
219
 
225
- },
220
+ }
226
221
 
227
- contain(dimensions, maxDimensions) {
228
- dimensions = { ...dimensions };
222
+ function contain(dimensions, maxDimensions) {
223
+ dimensions = { ...dimensions };
229
224
 
230
- each(
231
- dimensions,
232
- (_, prop) =>
225
+ for (const prop in dimensions) {
233
226
  dimensions =
234
227
  dimensions[prop] > maxDimensions[prop] ?
235
- this.ratio(dimensions, prop, maxDimensions[prop]) :
236
- dimensions);
237
-
228
+ ratio(dimensions, prop, maxDimensions[prop]) :
229
+ dimensions;
230
+ }
238
231
 
239
- return dimensions;
240
- },
232
+ return dimensions;
233
+ }
241
234
 
242
- cover(dimensions, maxDimensions) {
243
- dimensions = this.contain(dimensions, maxDimensions);
235
+ function cover$1(dimensions, maxDimensions) {
236
+ dimensions = contain(dimensions, maxDimensions);
244
237
 
245
- each(
246
- dimensions,
247
- (_, prop) =>
238
+ for (const prop in dimensions) {
248
239
  dimensions =
249
240
  dimensions[prop] < maxDimensions[prop] ?
250
- this.ratio(dimensions, prop, maxDimensions[prop]) :
251
- dimensions);
252
-
241
+ ratio(dimensions, prop, maxDimensions[prop]) :
242
+ dimensions;
243
+ }
253
244
 
254
- return dimensions;
255
- } };
245
+ return dimensions;
246
+ }
256
247
 
248
+ const Dimensions = { ratio, contain, cover: cover$1 };
257
249
 
258
250
  function getIndex(i, elements, current, finite) {if (current === void 0) {current = 0;}if (finite === void 0) {finite = false;}
259
251
  elements = toNodes(elements);
@@ -1788,7 +1780,7 @@
1788
1780
  return intersectRect(
1789
1781
  ...scrollParents(element).
1790
1782
  map((parent) => {
1791
- const { top, left, bottom, right } = offset(getViewport$1(parent));
1783
+ const { top, left, bottom, right } = offsetViewport(parent);
1792
1784
 
1793
1785
  return {
1794
1786
  top: top - offsetTop,
@@ -1803,7 +1795,7 @@
1803
1795
 
1804
1796
  function scrollTop(element, top) {
1805
1797
  if (isWindow(element) || isDocument(element)) {
1806
- element = getScrollingElement(element);
1798
+ element = scrollingElement(element);
1807
1799
  } else {
1808
1800
  element = toNode(element);
1809
1801
  }
@@ -1820,12 +1812,13 @@
1820
1812
  return parents.reduce(
1821
1813
  (fn, scrollElement, i) => {
1822
1814
  const { scrollTop, scrollHeight, offsetHeight } = scrollElement;
1823
- const maxScroll = scrollHeight - getViewportClientHeight(scrollElement);
1824
- const { height: elHeight, top: elTop } = offset(parents[i - 1] || element);
1825
-
1826
- let top = Math.ceil(
1827
- elTop - offset(getViewport$1(scrollElement)).top - offsetBy + scrollTop);
1815
+ const viewport = offsetViewport(scrollElement);
1816
+ const maxScroll = scrollHeight - viewport.height;
1817
+ const { height: elHeight, top: elTop } = parents[i - 1] ?
1818
+ offsetViewport(parents[i - 1]) :
1819
+ offset(element);
1828
1820
 
1821
+ let top = Math.ceil(elTop - viewport.top - offsetBy + scrollTop);
1829
1822
 
1830
1823
  if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) {
1831
1824
  top += offsetBy;
@@ -1883,7 +1876,7 @@
1883
1876
 
1884
1877
  const [scrollElement] = scrollParents(element, /auto|scroll/, true);
1885
1878
  const { scrollHeight, scrollTop } = scrollElement;
1886
- const viewportHeight = getViewportClientHeight(scrollElement);
1879
+ const { height: viewportHeight } = offsetViewport(scrollElement);
1887
1880
  const maxScroll = scrollHeight - viewportHeight;
1888
1881
  const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
1889
1882
 
@@ -1894,7 +1887,7 @@
1894
1887
  }
1895
1888
 
1896
1889
  function scrollParents(element, overflowRe, scrollable) {if (overflowRe === void 0) {overflowRe = /auto|scroll|hidden/;}if (scrollable === void 0) {scrollable = false;}
1897
- const scrollEl = getScrollingElement(element);
1890
+ const scrollEl = scrollingElement(element);
1898
1891
 
1899
1892
  let ancestors = parents(element).reverse();
1900
1893
  ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);
@@ -1909,181 +1902,250 @@
1909
1902
  ancestors.filter(
1910
1903
  (parent) =>
1911
1904
  overflowRe.test(css(parent, 'overflow')) && (
1912
- !scrollable || parent.scrollHeight > getViewportClientHeight(parent)))).
1905
+ !scrollable || parent.scrollHeight > offsetViewport(parent).height))).
1913
1906
 
1914
1907
 
1915
1908
  reverse();
1916
1909
  }
1917
1910
 
1918
- function getViewport$1(scrollElement) {
1919
- return scrollElement === getScrollingElement(scrollElement) ? window : scrollElement;
1911
+ function offsetViewport(scrollElement) {
1912
+ let viewportElement = getViewport$1(scrollElement);
1913
+
1914
+ // iOS 12 returns <body> as scrollingElement
1915
+ if (viewportElement === scrollingElement(viewportElement)) {
1916
+ viewportElement = document.documentElement;
1917
+ }
1918
+
1919
+ let rect = offset(viewportElement);
1920
+ for (let [prop, dir, start, end] of [
1921
+ ['width', 'x', 'left', 'right'],
1922
+ ['height', 'y', 'top', 'bottom']])
1923
+ {
1924
+ if (!isWindow(getViewport$1(viewportElement))) {
1925
+ rect[start] += toFloat(css(viewportElement, "border" + ucfirst(start) + "Width"));
1926
+ }
1927
+ rect[prop] = rect[dir] = (
1928
+ isWindow(viewportElement) ? scrollingElement(viewportElement) : viewportElement)["client" +
1929
+ ucfirst(prop)];
1930
+ rect[end] = rect[prop] + rect[start];
1931
+ }
1932
+ return rect;
1920
1933
  }
1921
1934
 
1922
- // iOS 12 returns <body> as scrollingElement
1923
- function getViewportClientHeight(scrollElement) {
1924
- return (
1925
- scrollElement === getScrollingElement(scrollElement) ?
1926
- document.documentElement :
1927
- scrollElement).
1928
- clientHeight;
1935
+ function scrollingElement(element) {
1936
+ const {
1937
+ document: { scrollingElement } } =
1938
+ toWindow(element);
1939
+ return scrollingElement;
1929
1940
  }
1930
1941
 
1931
- function getScrollingElement(element) {
1932
- const { document } = toWindow(element);
1933
- return document.scrollingElement || document.documentElement;
1942
+ function getViewport$1(scrollElement) {
1943
+ return scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
1934
1944
  }
1935
1945
 
1936
- const dirs = {
1937
- width: ['x', 'left', 'right'],
1938
- height: ['y', 'top', 'bottom'] };
1946
+ const dirs = [
1947
+ ['width', 'x', 'left', 'right'],
1948
+ ['height', 'y', 'top', 'bottom']];
1949
+
1950
+
1951
+ function positionAt(element, target, options) {
1952
+ options = {
1953
+ attach: {
1954
+ element: ['left', 'top'],
1955
+ target: ['left', 'top'],
1956
+ ...options.attach },
1939
1957
 
1958
+ offset: [0, 0],
1959
+ ...options };
1960
+
1961
+
1962
+ const dim = options.flip ?
1963
+ attachToWithFlip(element, target, options) :
1964
+ attachTo(element, target, options);
1940
1965
 
1941
- function positionAt(
1942
- element,
1943
- target,
1944
- elAttach,
1945
- targetAttach,
1946
- elOffset,
1947
- targetOffset,
1948
- flip,
1949
- boundary)
1950
- {
1951
- elAttach = getPos(elAttach);
1952
- targetAttach = getPos(targetAttach);
1966
+ offset(element, dim);
1967
+ }
1968
+
1969
+ function attachTo(element, target, options) {
1970
+ let { attach, offset: offsetBy } = {
1971
+ attach: {
1972
+ element: ['left', 'top'],
1973
+ target: ['left', 'top'],
1974
+ ...options.attach },
1953
1975
 
1954
- const flipped = { element: elAttach, target: targetAttach };
1976
+ offset: [0, 0],
1977
+ ...options };
1955
1978
 
1956
- if (!element || !target) {
1957
- return flipped;
1979
+
1980
+ const position = offset(element);
1981
+ const targetOffset = offset(target);
1982
+ for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
1983
+ position[start] = position[dir] =
1984
+ targetOffset[start] +
1985
+ moveBy(attach.target[i], end, targetOffset[prop]) -
1986
+ moveBy(attach.element[i], end, position[prop]) +
1987
+ +offsetBy[i];
1988
+ position[end] = position[start] + position[prop];
1958
1989
  }
1990
+ return position;
1991
+ }
1959
1992
 
1960
- const dim = offset(element);
1993
+ function attachToWithFlip(element, target, options) {
1994
+ const position = attachTo(element, target, options);
1961
1995
  const targetDim = offset(target);
1962
- const position = targetDim;
1996
+ const viewports = scrollParents(element);
1997
+ const [scrollElement] = viewports;
1998
+
1999
+ let {
2000
+ flip,
2001
+ attach: { element: elAttach, target: targetAttach },
2002
+ offset: elOffset,
2003
+ boundary,
2004
+ viewport,
2005
+ viewportPadding } =
2006
+ options;
2007
+
2008
+ viewports.push(viewport);
2009
+
2010
+ const offsetPosition = { ...position };
2011
+ for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
2012
+ if (flip !== true && !includes(flip, dir)) {
2013
+ continue;
2014
+ }
1963
2015
 
1964
- moveTo(position, elAttach, dim, -1);
1965
- moveTo(position, targetAttach, targetDim, 1);
2016
+ const willFlip =
2017
+ !intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i);
1966
2018
 
1967
- elOffset = getOffsets(elOffset, dim.width, dim.height);
1968
- targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);
2019
+ viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
1969
2020
 
1970
- elOffset['x'] += targetOffset['x'];
1971
- elOffset['y'] += targetOffset['y'];
2021
+ if (viewportPadding) {
2022
+ viewport[start] += viewportPadding;
2023
+ viewport[end] -= viewportPadding;
2024
+ }
1972
2025
 
1973
- position.left += elOffset['x'];
1974
- position.top += elOffset['y'];
2026
+ if (boundary && !(willFlip || position[prop] > offset(boundary)[prop])) {
2027
+ viewport = getIntersectionArea(viewport, offset(boundary));
2028
+ }
1975
2029
 
1976
- if (flip) {
1977
- let boundaries = scrollParents(element).map(getViewport$1);
2030
+ const isInStartBoundary = position[start] >= viewport[start];
2031
+ const isInEndBoundary = position[end] <= viewport[end];
1978
2032
 
1979
- if (boundary && !includes(boundaries, boundary)) {
1980
- boundaries.unshift(boundary);
2033
+ if (isInStartBoundary && isInEndBoundary) {
2034
+ continue;
1981
2035
  }
1982
2036
 
1983
- boundaries = boundaries.map((el) => offset(el));
2037
+ let offsetBy;
1984
2038
 
1985
- each(dirs, (_ref, prop) => {let [dir, align, alignFlip] = _ref;
1986
- if (!(flip === true || includes(flip, dir))) {
1987
- return;
2039
+ // Flip
2040
+ if (willFlip) {
2041
+ if (
2042
+ elAttach[i] === end && isInStartBoundary ||
2043
+ elAttach[i] === start && isInEndBoundary)
2044
+ {
2045
+ continue;
1988
2046
  }
1989
2047
 
1990
- boundaries.some((boundary) => {
1991
- const elemOffset =
1992
- elAttach[dir] === align ?
1993
- -dim[prop] :
1994
- elAttach[dir] === alignFlip ?
1995
- dim[prop] :
1996
- 0;
1997
-
1998
- const targetOffset =
1999
- targetAttach[dir] === align ?
2000
- targetDim[prop] :
2001
- targetAttach[dir] === alignFlip ?
2002
- -targetDim[prop] :
2003
- 0;
2048
+ offsetBy =
2049
+ (elAttach[i] === start ?
2050
+ -position[prop] :
2051
+ elAttach[i] === end ?
2052
+ position[prop] :
2053
+ 0) + (
2054
+ targetAttach[i] === start ?
2055
+ targetDim[prop] :
2056
+ targetAttach[i] === end ?
2057
+ -targetDim[prop] :
2058
+ 0) -
2059
+ elOffset[i] * 2;
2004
2060
 
2005
- if (
2006
- position[align] < boundary[align] ||
2007
- position[align] + dim[prop] > boundary[alignFlip])
2008
- {
2009
- const centerOffset = dim[prop] / 2;
2010
- const centerTargetOffset =
2011
- targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
2061
+ if (
2062
+ !isInScrollArea(
2063
+ {
2064
+ ...position,
2065
+ [start]: position[start] + offsetBy,
2066
+ [end]: position[end] + offsetBy },
2012
2067
 
2013
- return (
2014
- elAttach[dir] === 'center' && (
2015
- apply(centerOffset, centerTargetOffset) ||
2016
- apply(-centerOffset, -centerTargetOffset)) ||
2017
- apply(elemOffset, targetOffset));
2068
+ scrollElement,
2069
+ i))
2018
2070
 
2071
+ {
2072
+ if (isInScrollArea(position, scrollElement, i)) {
2073
+ continue;
2019
2074
  }
2020
2075
 
2021
- function apply(elemOffset, targetOffset) {
2022
- const newVal = toFloat(
2023
- (position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4));
2076
+ if (options.recursion) {
2077
+ return false;
2078
+ }
2024
2079
 
2080
+ const newPos = attachToWithFlip(element, target, {
2081
+ ...options,
2082
+ attach: {
2083
+ element: elAttach.map(flipDir).reverse(),
2084
+ target: targetAttach.map(flipDir).reverse() },
2025
2085
 
2026
- if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
2027
- position[align] = newVal;
2086
+ offset: elOffset.reverse(),
2087
+ flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
2088
+ recursion: true });
2028
2089
 
2029
- for (const el of ['element', 'target']) {
2030
- if (elemOffset) {
2031
- flipped[el][dir] =
2032
- flipped[el][dir] === dirs[prop][1] ?
2033
- dirs[prop][2] :
2034
- dirs[prop][1];
2035
- }
2036
- }
2037
2090
 
2038
- return true;
2039
- }
2091
+ if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
2092
+ return newPos;
2040
2093
  }
2041
- });
2042
- });
2043
- }
2094
+ }
2044
2095
 
2045
- offset(element, position);
2096
+ // Move
2097
+ } else {
2098
+ offsetBy =
2099
+ clamp(
2100
+ clamp(position[start], viewport[start], viewport[end] - position[prop]),
2101
+ targetDim[start] - position[prop] + elOffset[i],
2102
+ targetDim[end] - elOffset[i]) -
2103
+ position[start];
2104
+ }
2046
2105
 
2047
- return flipped;
2048
- }
2106
+ offsetPosition[start] = position[dir] = position[start] + offsetBy;
2107
+ offsetPosition[end] += offsetBy;
2108
+ }
2049
2109
 
2050
- function moveTo(position, attach, dim, factor) {
2051
- each(dirs, (_ref2, prop) => {let [dir, align, alignFlip] = _ref2;
2052
- if (attach[dir] === alignFlip) {
2053
- position[align] += dim[prop] * factor;
2054
- } else if (attach[dir] === 'center') {
2055
- position[align] += dim[prop] * factor / 2;
2056
- }
2057
- });
2110
+ return offsetPosition;
2058
2111
  }
2059
2112
 
2060
- function getPos(pos) {
2061
- const x = /left|center|right/;
2062
- const y = /top|center|bottom/;
2063
-
2064
- pos = (pos || '').split(' ');
2113
+ function moveBy(start, end, dim) {
2114
+ return start === 'center' ? dim / 2 : start === end ? dim : 0;
2115
+ }
2065
2116
 
2066
- if (pos.length === 1) {
2067
- pos = x.test(pos[0]) ?
2068
- pos.concat('center') :
2069
- y.test(pos[0]) ?
2070
- ['center'].concat(pos) :
2071
- ['center', 'center'];
2117
+ function getIntersectionArea() {
2118
+ let area = {};for (var _len = arguments.length, rects = new Array(_len), _key = 0; _key < _len; _key++) {rects[_key] = arguments[_key];}
2119
+ for (const rect of rects) {
2120
+ for (const [,, start, end] of dirs) {
2121
+ area[start] = Math.max(area[start] || 0, rect[start]);
2122
+ area[end] = Math.min(...[area[end], rect[end]].filter(Boolean));
2123
+ }
2072
2124
  }
2125
+ return area;
2126
+ }
2073
2127
 
2074
- return {
2075
- x: x.test(pos[0]) ? pos[0] : 'center',
2076
- y: y.test(pos[1]) ? pos[1] : 'center' };
2128
+ function isInScrollArea(position, scrollElement, dir) {
2129
+ const viewport = offsetViewport(scrollElement);
2130
+ const [prop,, start, end] = dirs[dir];
2131
+ viewport[start] -= scrollElement["scroll" + ucfirst(start)];
2132
+ viewport[end] = viewport[start] + scrollElement["scroll" + ucfirst(prop)];
2077
2133
 
2134
+ return position[start] >= viewport[start] && position[end] <= viewport[end];
2078
2135
  }
2079
2136
 
2080
- function getOffsets(offsets, width, height) {
2081
- const [x, y] = (offsets || '').split(' ');
2082
-
2083
- return {
2084
- x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,
2085
- y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0 };
2137
+ function intersectLine(dimA, dimB, dir) {
2138
+ const [,, start, end] = dirs[dir];
2139
+ return dimA[end] > dimB[start] && dimB[end] > dimA[start];
2140
+ }
2086
2141
 
2142
+ function flipDir(prop) {
2143
+ for (let i = 0; i < dirs.length; i++) {
2144
+ const index = dirs[i].indexOf(prop);
2145
+ if (~index) {
2146
+ return dirs[1 - i][index % 2 + 2];
2147
+ }
2148
+ }
2087
2149
  }
2088
2150
 
2089
2151
  var util = /*#__PURE__*/Object.freeze({
@@ -2192,7 +2254,6 @@
2192
2254
  toNode: toNode,
2193
2255
  toNodes: toNodes,
2194
2256
  toWindow: toWindow,
2195
- toMs: toMs,
2196
2257
  isEqual: isEqual,
2197
2258
  swap: swap,
2198
2259
  last: last,
@@ -2231,9 +2292,7 @@
2231
2292
  scrollIntoView: scrollIntoView,
2232
2293
  scrolledOver: scrolledOver,
2233
2294
  scrollParents: scrollParents,
2234
- getViewport: getViewport$1,
2235
- getViewportClientHeight: getViewportClientHeight,
2236
- getScrollingElement: getScrollingElement
2295
+ offsetViewport: offsetViewport
2237
2296
  });
2238
2297
 
2239
2298
  function globalAPI (UIkit) {
@@ -2550,7 +2609,7 @@
2550
2609
  continue;
2551
2610
  }
2552
2611
 
2553
- value = props[key] === Boolean && value === '' ? true : coerce(props[key], value);
2612
+ value = props[key] === Boolean && value === '' ? true : coerce$1(props[key], value);
2554
2613
 
2555
2614
  if (prop === 'target' && (!value || startsWith(value, '_'))) {
2556
2615
  continue;
@@ -2564,7 +2623,7 @@
2564
2623
  for (const key in options) {
2565
2624
  const prop = camelize(key);
2566
2625
  if (props[prop] !== undefined) {
2567
- data$1[prop] = coerce(props[prop], options[key]);
2626
+ data$1[prop] = coerce$1(props[prop], options[key]);
2568
2627
  }
2569
2628
  }
2570
2629
 
@@ -2629,7 +2688,7 @@
2629
2688
  return options.every((arr) => !arr || !hasOwn(arr, key));
2630
2689
  }
2631
2690
 
2632
- function coerce(type, value) {
2691
+ function coerce$1(type, value) {
2633
2692
  if (type === Boolean) {
2634
2693
  return toBoolean(value);
2635
2694
  } else if (type === Number) {
@@ -2667,7 +2726,7 @@
2667
2726
  if (isUndefined(data[key])) {
2668
2727
  delete data[key];
2669
2728
  } else if (props[key]) {
2670
- data[key] = coerce(props[key], data[key]);
2729
+ data[key] = coerce$1(props[key], data[key]);
2671
2730
  }
2672
2731
  }
2673
2732
 
@@ -2892,7 +2951,7 @@
2892
2951
  UIkit.data = '__uikit__';
2893
2952
  UIkit.prefix = 'uk-';
2894
2953
  UIkit.options = {};
2895
- UIkit.version = '3.13.9';
2954
+ UIkit.version = '3.13.11-dev.3b88fea57';
2896
2955
 
2897
2956
  globalAPI(UIkit);
2898
2957
  hooksAPI(UIkit);
@@ -2900,30 +2959,6 @@
2900
2959
  componentAPI(UIkit);
2901
2960
  instanceAPI(UIkit);
2902
2961
 
2903
- function Core () {
2904
- if (!inBrowser) {
2905
- return;
2906
- }
2907
-
2908
- let started = 0;
2909
- on(
2910
- document,
2911
- 'animationstart',
2912
- (_ref) => {let { target } = _ref;
2913
- if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {
2914
- started++;
2915
- css(document.documentElement, 'overflowX', 'hidden');
2916
- setTimeout(() => {
2917
- if (! --started) {
2918
- css(document.documentElement, 'overflowX', '');
2919
- }
2920
- }, toMs(css(target, 'animationDuration')) + 100);
2921
- }
2922
- },
2923
- true);
2924
-
2925
- }
2926
-
2927
2962
  function boot (UIkit) {
2928
2963
  const { connect, disconnect } = UIkit;
2929
2964
 
@@ -3501,50 +3536,49 @@
3501
3536
  data: {
3502
3537
  pos: "bottom-" + (isRtl ? 'right' : 'left'),
3503
3538
  flip: true,
3504
- offset: false },
3539
+ offset: false,
3540
+ viewportPadding: 10 },
3505
3541
 
3506
3542
 
3507
3543
  connected() {
3508
3544
  this.pos = this.$props.pos.split('-').concat('center').slice(0, 2);
3509
- this.dir = this.pos[0];
3510
- this.align = this.pos[1];
3545
+ this.axis = includes(['top', 'bottom'], this.pos[0]) ? 'y' : 'x';
3511
3546
  },
3512
3547
 
3513
3548
  methods: {
3514
3549
  positionAt(element, target, boundary) {
3515
- const axis = this.getAxis();
3516
- const dir = this.pos[0];
3517
- const align = this.pos[1];
3550
+ const [dir, align] = this.pos;
3518
3551
 
3519
3552
  let { offset: offset$1 } = this;
3520
3553
  if (!isNumeric(offset$1)) {
3521
3554
  const node = $(offset$1);
3522
3555
  offset$1 = node ?
3523
- offset(node)[axis === 'x' ? 'left' : 'top'] -
3524
- offset(target)[axis === 'x' ? 'right' : 'bottom'] :
3556
+ offset(node)[this.axis === 'x' ? 'left' : 'top'] -
3557
+ offset(target)[this.axis === 'x' ? 'right' : 'bottom'] :
3525
3558
  0;
3526
3559
  }
3527
3560
  offset$1 = toPx(offset$1) + toPx(getCssVar('position-offset', element));
3561
+ offset$1 = [includes(['left', 'top'], dir) ? -offset$1 : +offset$1, 0];
3562
+
3563
+ const attach = {
3564
+ element: [flipPosition(dir), align],
3565
+ target: [dir, align] };
3566
+
3567
+
3568
+ if (this.axis === 'y') {
3569
+ for (const prop in attach) {
3570
+ attach[prop] = attach[prop].reverse();
3571
+ }
3572
+ offset$1 = offset$1.reverse();
3573
+ }
3574
+
3575
+ positionAt(element, target, {
3576
+ attach,
3577
+ offset: offset$1,
3578
+ boundary,
3579
+ viewportPadding: this.viewportPadding,
3580
+ flip: this.flip });
3528
3581
 
3529
- const { x, y } = positionAt(
3530
- element,
3531
- target,
3532
- axis === 'x' ? flipPosition(dir) + " " + align : align + " " + flipPosition(dir),
3533
- axis === 'x' ? dir + " " + align : align + " " + dir,
3534
- axis === 'x' ? "" + (
3535
- dir === 'left' ? -offset$1 : offset$1) : " " + (
3536
- dir === 'top' ? -offset$1 : offset$1),
3537
- null,
3538
- this.flip,
3539
- boundary).
3540
- target;
3541
-
3542
- this.dir = axis === 'x' ? x : y;
3543
- this.align = axis === 'x' ? y : x;
3544
- },
3545
-
3546
- getAxis() {
3547
- return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';
3548
3582
  } } };
3549
3583
 
3550
3584
  let active$1;
@@ -3761,13 +3795,7 @@
3761
3795
  this.hide(false);
3762
3796
  }
3763
3797
  }),
3764
- on(window, 'resize', () => this.$emit()),
3765
- on(
3766
- document,
3767
- 'scroll',
3768
- (_ref4) => {let { target } = _ref4;return target.contains(this.$el) && this.$emit();},
3769
- true)])
3770
-
3798
+ on(window, 'resize', () => this.$emit())])
3771
3799
  {
3772
3800
  once(this.$el, 'hide', handler, { self: true });
3773
3801
  }
@@ -3787,7 +3815,7 @@
3787
3815
  {
3788
3816
  name: 'hide',
3789
3817
 
3790
- handler(_ref5) {let { target } = _ref5;
3818
+ handler(_ref4) {let { target } = _ref4;
3791
3819
  if (this.$el !== target) {
3792
3820
  active$1 =
3793
3821
  active$1 === null && within(target, this.$el) && this.isToggled() ?
@@ -3878,25 +3906,33 @@
3878
3906
  },
3879
3907
 
3880
3908
  position() {
3881
- const boundary = query(this.boundary, this.$el) || window;
3882
3909
  removeClass(this.$el, this.clsDrop + "-stack");
3883
3910
  toggleClass(this.$el, this.clsDrop + "-boundary", this.boundaryAlign);
3884
3911
 
3885
- const boundaryOffset = offset(boundary);
3886
- const targetOffset = offset(this.target);
3887
- const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
3912
+ const boundary = query(this.boundary, this.$el);
3913
+ const [scrollParent] = scrollParents(this.$el);
3914
+ const scrollParentOffset = offsetViewport(scrollParent);
3915
+ const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
3916
+
3917
+ css(this.$el, 'maxWidth', '');
3918
+ const maxWidth = scrollParentOffset.width - (boundary ? 0 : 2 * this.viewportPadding);
3888
3919
 
3889
3920
  if (this.pos[1] === 'justify') {
3890
- const prop = this.getAxis() === 'y' ? 'width' : 'height';
3921
+ const prop = this.axis === 'y' ? 'width' : 'height';
3922
+ const targetOffset = offset(this.target);
3923
+ const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
3891
3924
  css(this.$el, prop, alignTo[prop]);
3892
- } else if (
3893
- this.$el.offsetWidth >
3894
- Math.max(boundaryOffset.right - alignTo.left, alignTo.right - boundaryOffset.left))
3895
- {
3925
+ } else if (this.$el.offsetWidth > maxWidth) {
3896
3926
  addClass(this.$el, this.clsDrop + "-stack");
3897
3927
  }
3898
3928
 
3899
- this.positionAt(this.$el, this.boundaryAlign ? boundary : this.target, boundary);
3929
+ css(this.$el, 'maxWidth', maxWidth);
3930
+
3931
+ this.positionAt(
3932
+ this.$el,
3933
+ boundary && this.boundaryAlign ? boundary : this.target,
3934
+ boundary);
3935
+
3900
3936
  } } };
3901
3937
 
3902
3938
 
@@ -5000,16 +5036,19 @@
5000
5036
 
5001
5037
  connected() {
5002
5038
  const media = toMedia(this.media);
5003
- this.mediaObj = window.matchMedia(media);
5004
- const handler = () => {
5005
- this.matchMedia = this.mediaObj.matches;
5006
- trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
5007
- };
5008
- this.offMediaObj = on(this.mediaObj, 'change', () => {
5039
+ this.matchMedia = true;
5040
+ if (media) {
5041
+ this.mediaObj = window.matchMedia(media);
5042
+ const handler = () => {
5043
+ this.matchMedia = this.mediaObj.matches;
5044
+ trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
5045
+ };
5046
+ this.offMediaObj = on(this.mediaObj, 'change', () => {
5047
+ handler();
5048
+ this.$emit('resize');
5049
+ });
5009
5050
  handler();
5010
- this.$emit('resize');
5011
- });
5012
- handler();
5051
+ }
5013
5052
  },
5014
5053
 
5015
5054
  disconnected() {var _this$offMediaObj;
@@ -5298,7 +5337,7 @@
5298
5337
  return (el, show) =>
5299
5338
  new Promise((resolve, reject) =>
5300
5339
  once(el, 'show hide', () => {
5301
- el._reject && el._reject();
5340
+ el._reject == null ? void 0 : el._reject();
5302
5341
  el._reject = reject;
5303
5342
 
5304
5343
  _toggle(el, show);
@@ -5323,6 +5362,10 @@
5323
5362
  then(() => delete el._reject);
5324
5363
  }
5325
5364
 
5365
+ function toMs(time) {
5366
+ return time ? endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000 : 0;
5367
+ }
5368
+
5326
5369
  var modal = {
5327
5370
  install: install$2,
5328
5371
 
@@ -5476,8 +5519,6 @@
5476
5519
  toggle: '> a',
5477
5520
  content: '> ul' } };
5478
5521
 
5479
- const navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle';
5480
-
5481
5522
  var navbar = {
5482
5523
  mixins: [Class, Container],
5483
5524
 
@@ -5497,7 +5538,7 @@
5497
5538
 
5498
5539
 
5499
5540
  data: {
5500
- dropdown: navItem,
5541
+ dropdown: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
5501
5542
  align: isRtl ? 'right' : 'left',
5502
5543
  clsDrop: 'uk-navbar-dropdown',
5503
5544
  mode: undefined,
@@ -5583,9 +5624,23 @@
5583
5624
  immediate: true },
5584
5625
 
5585
5626
 
5586
- toggles(_ref6, $el) {let { dropdown } = _ref6;
5587
- return $$(dropdown, $el);
5588
- } },
5627
+ toggles: {
5628
+ get(_ref6, $el) {let { dropdown } = _ref6;
5629
+ return $$(dropdown, $el);
5630
+ },
5631
+
5632
+ watch() {
5633
+ const justify = hasClass(this.$el, 'uk-navbar-justify');
5634
+ for (const container of $$(
5635
+ '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
5636
+ this.$el))
5637
+ {
5638
+ css(container, 'flexGrow', justify ? $$(this.dropdown, container).length : '');
5639
+ }
5640
+ },
5641
+
5642
+ immediate: true } },
5643
+
5589
5644
 
5590
5645
 
5591
5646
  disconnected() {
@@ -5746,7 +5801,7 @@
5746
5801
  return this.dropbar;
5747
5802
  },
5748
5803
 
5749
- handler(_, _ref10) {let { $el, dir } = _ref10;
5804
+ handler(_, _ref10) {let { $el, pos: [dir] = [] } = _ref10;
5750
5805
  if (!hasClass($el, this.clsDrop)) {
5751
5806
  return;
5752
5807
  }
@@ -6480,19 +6535,15 @@
6480
6535
 
6481
6536
  const [scrollElement] = scrollParents(targets, /auto|scroll/, true);
6482
6537
  const { scrollTop, scrollHeight } = scrollElement;
6483
- const max = scrollHeight - getViewportClientHeight(scrollElement);
6538
+ const viewport = offsetViewport(scrollElement);
6539
+ const max = scrollHeight - viewport.height;
6484
6540
  let active = false;
6485
6541
 
6486
6542
  if (scrollTop === max) {
6487
6543
  active = length - 1;
6488
6544
  } else {
6489
- for (const i in targets) {
6490
- if (
6491
- offset(targets[i]).top -
6492
- offset(getViewport$1(scrollElement)).top -
6493
- this.offset >
6494
- 0)
6495
- {
6545
+ for (let i = 0; i < targets.length; i++) {
6546
+ if (offset(targets[i]).top - viewport.top - this.offset > 0) {
6496
6547
  break;
6497
6548
  }
6498
6549
  active = +i;
@@ -6510,7 +6561,7 @@
6510
6561
  const changed = active !== false && !hasClass(this.elements[active], this.cls);
6511
6562
 
6512
6563
  this.links.forEach((el) => el.blur());
6513
- for (const i in this.elements) {
6564
+ for (let i = 0; i < this.elements.length; i++) {
6514
6565
  toggleClass(this.elements[i], this.cls, +i === active);
6515
6566
  }
6516
6567
 
@@ -6527,8 +6578,11 @@
6527
6578
  props: {
6528
6579
  position: String,
6529
6580
  top: null,
6530
- bottom: Boolean,
6581
+ bottom: null,
6582
+ start: null,
6583
+ end: null,
6531
6584
  offset: String,
6585
+ overflowFlip: Boolean,
6532
6586
  animation: String,
6533
6587
  clsActive: String,
6534
6588
  clsInactive: String,
@@ -6541,9 +6595,12 @@
6541
6595
 
6542
6596
  data: {
6543
6597
  position: 'top',
6544
- top: 0,
6598
+ top: false,
6545
6599
  bottom: false,
6600
+ start: false,
6601
+ end: false,
6546
6602
  offset: 0,
6603
+ overflowFlip: false,
6547
6604
  animation: '',
6548
6605
  clsActive: 'uk-active',
6549
6606
  clsInactive: '',
@@ -6565,6 +6622,9 @@
6565
6622
  },
6566
6623
 
6567
6624
  connected() {
6625
+ this.start = coerce(this.start || this.top);
6626
+ this.end = coerce(this.end || this.bottom);
6627
+
6568
6628
  this.placeholder =
6569
6629
  $('+ .uk-sticky-placeholder', this.$el) ||
6570
6630
  $('<div class="uk-sticky-placeholder"></div>');
@@ -6583,6 +6643,17 @@
6583
6643
  },
6584
6644
 
6585
6645
  events: [
6646
+ {
6647
+ name: 'resize',
6648
+
6649
+ el() {
6650
+ return window;
6651
+ },
6652
+
6653
+ handler() {
6654
+ this.$emit('resize');
6655
+ } },
6656
+
6586
6657
  {
6587
6658
  name: 'load hashchange popstate',
6588
6659
 
@@ -6599,7 +6670,7 @@
6599
6670
  return;
6600
6671
  }
6601
6672
 
6602
- fastdom.read(() => {
6673
+ setTimeout(() => {
6603
6674
  const targetOffset = offset($(location.hash));
6604
6675
  const elOffset = offset(this.$el);
6605
6676
 
@@ -6608,8 +6679,8 @@
6608
6679
  window,
6609
6680
  targetOffset.top -
6610
6681
  elOffset.height -
6611
- toPx(this.targetOffset, 'height') -
6612
- toPx(this.offset, 'height'));
6682
+ toPx(this.targetOffset, 'height', this.placeholder) -
6683
+ toPx(this.offset, 'height', this.placeholder));
6613
6684
 
6614
6685
  }
6615
6686
  });
@@ -6639,32 +6710,38 @@
6639
6710
 
6640
6711
  if (hide) {
6641
6712
  this.show();
6642
- fastdom.write(() => css(this.selTarget, 'transition', ''));
6713
+ requestAnimationFrame(() => css(this.selTarget, 'transition', ''));
6643
6714
  }
6644
6715
 
6645
6716
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
6646
6717
  const windowHeight = height(window);
6647
6718
 
6648
6719
  let position = this.position;
6649
- if (position === 'auto' && height$1 > windowHeight) {
6650
- position = 'bottom';
6720
+ if (this.overflowFlip && height$1 > windowHeight) {
6721
+ position = position === 'top' ? 'bottom' : 'top';
6651
6722
  }
6652
6723
 
6653
6724
  let offset$1 = toPx(this.offset, 'height', referenceElement);
6654
- if (position === 'bottom') {
6725
+ if (position === 'bottom' && (height$1 < windowHeight || this.overflowFlip)) {
6655
6726
  offset$1 += windowHeight - height$1;
6656
6727
  }
6657
6728
 
6658
- const overflow = Math.max(0, height$1 + offset$1 - windowHeight);
6729
+ const overflow = this.overflowFlip ?
6730
+ 0 :
6731
+ Math.max(0, height$1 + offset$1 - windowHeight);
6659
6732
  const topOffset = offset(referenceElement).top;
6660
6733
 
6661
- const top = parseProp(this.top, this.$el, topOffset);
6662
- const bottom = parseProp(this.bottom, this.$el, topOffset + height$1, true);
6663
-
6664
- const start = Math.max(top, topOffset) - offset$1;
6665
- const end = bottom ?
6666
- bottom - offset(this.$el).height + overflow - offset$1 :
6667
- getScrollingElement(this.$el).scrollHeight - windowHeight;
6734
+ const start =
6735
+ (this.start === false ?
6736
+ topOffset :
6737
+ parseProp(this.start, this.$el, topOffset)) - offset$1;
6738
+ const end =
6739
+ this.end === false ?
6740
+ document.scrollingElement.scrollHeight - windowHeight :
6741
+ parseProp(this.end, this.$el, topOffset + height$1, true) -
6742
+ offset(this.$el).height +
6743
+ overflow -
6744
+ offset$1;
6668
6745
 
6669
6746
  return {
6670
6747
  start,
@@ -6710,7 +6787,9 @@
6710
6787
  prevDir,
6711
6788
  scroll,
6712
6789
  prevScroll,
6713
- offsetParentTop: offset(this.$el.offsetParent).top,
6790
+ offsetParentTop: offset(
6791
+ (this.isFixed ? this.placeholder : this.$el).offsetParent).
6792
+ top,
6714
6793
  overflowScroll: clamp(
6715
6794
  overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
6716
6795
  0,
@@ -6865,8 +6944,8 @@
6865
6944
  return 0;
6866
6945
  }
6867
6946
 
6868
- if (isString(value) && value.match(/^-?\d/)) {
6869
- return propOffset + toPx(value);
6947
+ if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
6948
+ return propOffset + toPx(value, 'height', el, true);
6870
6949
  } else {
6871
6950
  const refElement = value === true ? parent(el) : query(value, el);
6872
6951
  return (
@@ -6878,6 +6957,15 @@
6878
6957
  }
6879
6958
  }
6880
6959
 
6960
+ function coerce(value) {
6961
+ if (value === 'true') {
6962
+ return true;
6963
+ } else if (value === 'false') {
6964
+ return false;
6965
+ }
6966
+ return value;
6967
+ }
6968
+
6881
6969
  var Switcher = {
6882
6970
  mixins: [Lazyload, Swipe, Togglable],
6883
6971
 
@@ -7186,15 +7274,7 @@
7186
7274
  {
7187
7275
  name: 'click',
7188
7276
 
7189
- filter() {
7190
- return includes(this.mode, 'click');
7191
- },
7192
-
7193
7277
  handler(e) {
7194
- if (this._preventClick) {
7195
- return this._preventClick = null;
7196
- }
7197
-
7198
7278
  let link;
7199
7279
  if (
7200
7280
  closest(e.target, 'a[href="#"], a[href=""]') ||
@@ -7205,6 +7285,14 @@
7205
7285
  e.preventDefault();
7206
7286
  }
7207
7287
 
7288
+ if (this._preventClick) {
7289
+ return this._preventClick = null;
7290
+ }
7291
+
7292
+ if (!includes(this.mode, 'click')) {
7293
+ return;
7294
+ }
7295
+
7208
7296
  this.toggle();
7209
7297
  } },
7210
7298
 
@@ -7330,9 +7418,6 @@
7330
7418
  // register components
7331
7419
  each(components$1, (component, name) => UIkit.component(name, component));
7332
7420
 
7333
- // core functionality
7334
- UIkit.use(Core);
7335
-
7336
7421
  boot(UIkit);
7337
7422
 
7338
7423
  const units = ['days', 'hours', 'minutes', 'seconds'];
@@ -9213,7 +9298,9 @@
9213
9298
 
9214
9299
  methods: {
9215
9300
  reset() {
9216
- each(this.getCss(0), (_, prop) => css(this.$el, prop, ''));
9301
+ for (const prop in this.getCss(0)) {
9302
+ css(this.$el, prop, '');
9303
+ }
9217
9304
  },
9218
9305
 
9219
9306
  getCss(percent) {
@@ -9227,12 +9314,16 @@
9227
9314
 
9228
9315
 
9229
9316
  function transformFn(prop, el, stops) {
9230
- const unit = getUnit(stops) || { x: 'px', y: 'px', rotate: 'deg' }[prop] || '';
9317
+ let unit = getUnit(stops) || { x: 'px', y: 'px', rotate: 'deg' }[prop] || '';
9231
9318
  let transformFn;
9232
9319
 
9233
9320
  if (prop === 'x' || prop === 'y') {
9234
9321
  prop = "translate" + ucfirst(prop);
9235
9322
  transformFn = (stop) => toFloat(toFloat(stop).toFixed(unit === 'px' ? 0 : 6));
9323
+ } else if (prop === 'scale') {
9324
+ unit = '';
9325
+ transformFn = (stop) =>
9326
+ getUnit([stop]) ? toPx(stop, 'width', el, true) / el.offsetWidth : stop;
9236
9327
  }
9237
9328
 
9238
9329
  if (stops.length === 1) {
@@ -9829,7 +9920,7 @@
9829
9920
  let left = 0;
9830
9921
  const sets = [];
9831
9922
  const width = dimensions$1(this.list).width;
9832
- for (let i in this.slides) {
9923
+ for (let i = 0; i < this.slides.length; i++) {
9833
9924
  const slideWidth = dimensions$1(this.slides[i]).width;
9834
9925
 
9835
9926
  if (left + slideWidth > width) {
@@ -10546,7 +10637,7 @@
10546
10637
  some((scrollEl) => {
10547
10638
  let { scrollTop: scroll, scrollHeight } = scrollEl;
10548
10639
 
10549
- const { top, bottom, height } = offset(getViewport$1(scrollEl));
10640
+ const { top, bottom, height } = offsetViewport(scrollEl);
10550
10641
 
10551
10642
  if (top < y && top + 35 > y) {
10552
10643
  scroll -= dist;
@@ -10749,10 +10840,12 @@
10749
10840
 
10750
10841
  this.positionAt(this.tooltip, this.$el);
10751
10842
 
10843
+ const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos);
10844
+
10752
10845
  this.origin =
10753
- this.getAxis() === 'y' ?
10754
- flipPosition(this.dir) + "-" + this.align :
10755
- this.align + "-" + flipPosition(this.dir);
10846
+ this.axis === 'y' ?
10847
+ flipPosition(dir) + "-" + align :
10848
+ align + "-" + flipPosition(dir);
10756
10849
  });
10757
10850
 
10758
10851
  this.toggleElement(this.tooltip, true);
@@ -10789,6 +10882,37 @@
10789
10882
  }
10790
10883
  }
10791
10884
 
10885
+ function getAlignment(el, target, _ref) {let [dir, align] = _ref;
10886
+ const elOffset = offset(el);
10887
+ const targetOffset = offset(target);
10888
+ const properties = [
10889
+ ['left', 'right'],
10890
+ ['top', 'bottom']];
10891
+
10892
+
10893
+ for (const props of properties) {
10894
+ if (elOffset[props[0]] >= targetOffset[props[1]]) {
10895
+ dir = props[1];
10896
+ break;
10897
+ }
10898
+ if (elOffset[props[1]] <= targetOffset[props[0]]) {
10899
+ dir = props[0];
10900
+ break;
10901
+ }
10902
+ }
10903
+
10904
+ const props = includes(properties[0], dir) ? properties[1] : properties[0];
10905
+ if (elOffset[props[0]] === targetOffset[props[0]]) {
10906
+ align = props[0];
10907
+ } else if (elOffset[props[1]] === targetOffset[props[1]]) {
10908
+ align = props[1];
10909
+ } else {
10910
+ align = 'center';
10911
+ }
10912
+
10913
+ return [dir, align];
10914
+ }
10915
+
10792
10916
  var upload = {
10793
10917
  props: {
10794
10918
  allow: String,