uikit 3.13.9 → 3.13.11-dev.98491b3f4

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 (90) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/build/build.js +4 -1
  3. package/dist/css/uikit-core-rtl.css +41 -6
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +41 -6
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +41 -4
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +41 -4
  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 +18 -11
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +18 -11
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +1 -1
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +18 -11
  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 +328 -260
  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 +371 -266
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/components/sortable.js +2 -3
  45. package/src/js/components/tooltip.js +38 -3
  46. package/src/js/core/drop.js +20 -16
  47. package/src/js/core/navbar.js +18 -6
  48. package/src/js/core/scrollspy-nav.js +4 -9
  49. package/src/js/core/sticky.js +28 -16
  50. package/src/js/core/toggle.js +8 -8
  51. package/src/js/mixin/media.js +12 -9
  52. package/src/js/mixin/modal.js +6 -2
  53. package/src/js/mixin/parallax.js +5 -1
  54. package/src/js/mixin/position.js +24 -24
  55. package/src/js/uikit-core.js +0 -4
  56. package/src/js/util/lang.js +0 -4
  57. package/src/js/util/position.js +180 -125
  58. package/src/js/util/viewport.js +42 -22
  59. package/src/less/components/drop.less +0 -1
  60. package/src/less/components/dropdown.less +11 -1
  61. package/src/less/components/icon.less +3 -0
  62. package/src/less/components/nav.less +22 -0
  63. package/src/less/components/navbar.less +26 -2
  64. package/src/less/components/search.less +2 -0
  65. package/src/less/theme/dropdown.less +4 -0
  66. package/src/less/theme/nav.less +6 -0
  67. package/src/less/theme/navbar.less +4 -0
  68. package/src/less/theme/search.less +6 -0
  69. package/src/scss/components/drop.scss +0 -1
  70. package/src/scss/components/dropdown.scss +11 -1
  71. package/src/scss/components/icon.scss +3 -0
  72. package/src/scss/components/nav.scss +22 -0
  73. package/src/scss/components/navbar.scss +26 -2
  74. package/src/scss/components/search.scss +2 -0
  75. package/src/scss/mixins-theme.scss +5 -0
  76. package/src/scss/mixins.scss +5 -0
  77. package/src/scss/theme/dropdown.scss +4 -0
  78. package/src/scss/theme/nav.scss +6 -0
  79. package/src/scss/theme/navbar.scss +4 -0
  80. package/src/scss/theme/search.scss +6 -0
  81. package/src/scss/variables-theme.scss +5 -1
  82. package/src/scss/variables.scss +5 -1
  83. package/tests/animation.html +216 -214
  84. package/tests/dropdown.html +16 -2
  85. package/tests/nav.html +27 -0
  86. package/tests/navbar.html +55 -4
  87. package/tests/position.html +38 -39
  88. package/tests/sticky-parallax.html +16 -0
  89. package/tests/sticky.html +212 -36
  90. package/src/js/core/core.js +0 -25
@@ -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.98491b3f4 | 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 ||
@@ -1788,7 +1784,7 @@
1788
1784
  return intersectRect(
1789
1785
  ...scrollParents(element).
1790
1786
  map((parent) => {
1791
- const { top, left, bottom, right } = offset(getViewport$1(parent));
1787
+ const { top, left, bottom, right } = offsetViewport(parent);
1792
1788
 
1793
1789
  return {
1794
1790
  top: top - offsetTop,
@@ -1803,7 +1799,7 @@
1803
1799
 
1804
1800
  function scrollTop(element, top) {
1805
1801
  if (isWindow(element) || isDocument(element)) {
1806
- element = getScrollingElement(element);
1802
+ element = scrollingElement(element);
1807
1803
  } else {
1808
1804
  element = toNode(element);
1809
1805
  }
@@ -1820,12 +1816,13 @@
1820
1816
  return parents.reduce(
1821
1817
  (fn, scrollElement, i) => {
1822
1818
  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);
1819
+ const viewport = offsetViewport(scrollElement);
1820
+ const maxScroll = scrollHeight - viewport.height;
1821
+ const { height: elHeight, top: elTop } = parents[i - 1] ?
1822
+ offsetViewport(parents[i - 1]) :
1823
+ offset(element);
1828
1824
 
1825
+ let top = Math.ceil(elTop - viewport.top - offsetBy + scrollTop);
1829
1826
 
1830
1827
  if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) {
1831
1828
  top += offsetBy;
@@ -1883,7 +1880,7 @@
1883
1880
 
1884
1881
  const [scrollElement] = scrollParents(element, /auto|scroll/, true);
1885
1882
  const { scrollHeight, scrollTop } = scrollElement;
1886
- const viewportHeight = getViewportClientHeight(scrollElement);
1883
+ const { height: viewportHeight } = offsetViewport(scrollElement);
1887
1884
  const maxScroll = scrollHeight - viewportHeight;
1888
1885
  const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
1889
1886
 
@@ -1894,7 +1891,7 @@
1894
1891
  }
1895
1892
 
1896
1893
  function scrollParents(element, overflowRe, scrollable) {if (overflowRe === void 0) {overflowRe = /auto|scroll|hidden/;}if (scrollable === void 0) {scrollable = false;}
1897
- const scrollEl = getScrollingElement(element);
1894
+ const scrollEl = scrollingElement(element);
1898
1895
 
1899
1896
  let ancestors = parents(element).reverse();
1900
1897
  ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);
@@ -1909,181 +1906,253 @@
1909
1906
  ancestors.filter(
1910
1907
  (parent) =>
1911
1908
  overflowRe.test(css(parent, 'overflow')) && (
1912
- !scrollable || parent.scrollHeight > getViewportClientHeight(parent)))).
1909
+ !scrollable || parent.scrollHeight > offsetViewport(parent).height))).
1913
1910
 
1914
1911
 
1915
1912
  reverse();
1916
1913
  }
1917
1914
 
1918
- function getViewport$1(scrollElement) {
1919
- return scrollElement === getScrollingElement(scrollElement) ? window : scrollElement;
1915
+ function offsetViewport(scrollElement) {
1916
+ let viewportElement = getViewport$1(scrollElement);
1917
+
1918
+ // iOS 12 returns <body> as scrollingElement
1919
+ if (viewportElement === scrollingElement(viewportElement)) {
1920
+ viewportElement = document.documentElement;
1921
+ }
1922
+
1923
+ let rect = offset(viewportElement);
1924
+ for (let [prop, dir, start, end] of [
1925
+ ['width', 'x', 'left', 'right'],
1926
+ ['height', 'y', 'top', 'bottom']])
1927
+ {
1928
+ if (!isWindow(getViewport$1(viewportElement))) {
1929
+ rect[start] += toFloat(css(viewportElement, "border" + ucfirst(start) + "Width"));
1930
+ }
1931
+ rect[prop] = rect[dir] = (
1932
+ isWindow(viewportElement) ? scrollingElement(viewportElement) : viewportElement)["client" +
1933
+ ucfirst(prop)];
1934
+ rect[end] = rect[prop] + rect[start];
1935
+ }
1936
+ return rect;
1920
1937
  }
1921
1938
 
1922
- // iOS 12 returns <body> as scrollingElement
1923
- function getViewportClientHeight(scrollElement) {
1924
- return (
1925
- scrollElement === getScrollingElement(scrollElement) ?
1926
- document.documentElement :
1927
- scrollElement).
1928
- clientHeight;
1939
+ function scrollingElement(element) {
1940
+ const {
1941
+ document: { scrollingElement } } =
1942
+ toWindow(element);
1943
+ return scrollingElement;
1929
1944
  }
1930
1945
 
1931
- function getScrollingElement(element) {
1932
- const { document } = toWindow(element);
1933
- return document.scrollingElement || document.documentElement;
1946
+ function getViewport$1(scrollElement) {
1947
+ return scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
1934
1948
  }
1935
1949
 
1936
- const dirs = {
1937
- width: ['x', 'left', 'right'],
1938
- height: ['y', 'top', 'bottom'] };
1950
+ const dirs = [
1951
+ ['width', 'x', 'left', 'right'],
1952
+ ['height', 'y', 'top', 'bottom']];
1953
+
1939
1954
 
1955
+ function positionAt(element, target, options) {
1956
+ options = {
1957
+ attach: {
1958
+ element: ['left', 'top'],
1959
+ target: ['left', 'top'],
1960
+ ...options.attach },
1961
+
1962
+ offset: [0, 0],
1963
+ ...options };
1940
1964
 
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);
1953
1965
 
1954
- const flipped = { element: elAttach, target: targetAttach };
1966
+ const dim = options.flip ?
1967
+ attachToWithFlip(element, target, options) :
1968
+ attachTo(element, target, options);
1955
1969
 
1956
- if (!element || !target) {
1957
- return flipped;
1970
+ offset(element, dim);
1971
+ }
1972
+
1973
+ function attachTo(element, target, options) {
1974
+ let { attach, offset: offsetBy } = {
1975
+ attach: {
1976
+ element: ['left', 'top'],
1977
+ target: ['left', 'top'],
1978
+ ...options.attach },
1979
+
1980
+ offset: [0, 0],
1981
+ ...options };
1982
+
1983
+
1984
+ const position = offset(element);
1985
+ const targetOffset = offset(target);
1986
+ for (const i in dirs) {
1987
+ const [prop, dir, start, end] = dirs[i];
1988
+ position[start] = position[dir] =
1989
+ targetOffset[start] +
1990
+ moveBy(attach.target[i], end, targetOffset[prop]) -
1991
+ moveBy(attach.element[i], end, position[prop]) +
1992
+ +offsetBy[i];
1993
+ position[end] = position[start] + position[prop];
1958
1994
  }
1995
+ return position;
1996
+ }
1959
1997
 
1960
- const dim = offset(element);
1998
+ function attachToWithFlip(element, target, options) {
1999
+ const position = attachTo(element, target, options);
1961
2000
  const targetDim = offset(target);
1962
- const position = targetDim;
2001
+ const viewports = scrollParents(element, /auto|scroll/);
2002
+ const [scrollElement] = viewports;
1963
2003
 
1964
- moveTo(position, elAttach, dim, -1);
1965
- moveTo(position, targetAttach, targetDim, 1);
2004
+ let {
2005
+ flip,
2006
+ attach: { element: elAttach, target: targetAttach },
2007
+ offset: elOffset,
2008
+ boundary,
2009
+ viewport,
2010
+ viewportPadding } =
2011
+ options;
1966
2012
 
1967
- elOffset = getOffsets(elOffset, dim.width, dim.height);
1968
- targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);
2013
+ viewports.push(viewport);
1969
2014
 
1970
- elOffset['x'] += targetOffset['x'];
1971
- elOffset['y'] += targetOffset['y'];
2015
+ const offsetPosition = { ...position };
2016
+ for (const i in dirs) {
2017
+ const [prop, dir, start, end] = dirs[i];
1972
2018
 
1973
- position.left += elOffset['x'];
1974
- position.top += elOffset['y'];
2019
+ if (flip !== true && !includes(flip, dir)) {
2020
+ continue;
2021
+ }
1975
2022
 
1976
- if (flip) {
1977
- let boundaries = scrollParents(element).map(getViewport$1);
2023
+ const willFlip =
2024
+ !intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i);
1978
2025
 
1979
- if (boundary && !includes(boundaries, boundary)) {
1980
- boundaries.unshift(boundary);
2026
+ viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
2027
+
2028
+ if (viewportPadding) {
2029
+ viewport[start] += viewportPadding;
2030
+ viewport[end] -= viewportPadding;
1981
2031
  }
1982
2032
 
1983
- boundaries = boundaries.map((el) => offset(el));
2033
+ if (boundary && !(willFlip || position[prop] > offset(boundary)[prop])) {
2034
+ viewport = getIntersectionArea(viewport, offset(boundary));
2035
+ }
1984
2036
 
1985
- each(dirs, (_ref, prop) => {let [dir, align, alignFlip] = _ref;
1986
- if (!(flip === true || includes(flip, dir))) {
1987
- return;
1988
- }
2037
+ const isInStartBoundary = position[start] >= viewport[start];
2038
+ const isInEndBoundary = position[end] <= viewport[end];
1989
2039
 
1990
- boundaries.some((boundary) => {
1991
- const elemOffset =
1992
- elAttach[dir] === align ?
1993
- -dim[prop] :
1994
- elAttach[dir] === alignFlip ?
1995
- dim[prop] :
1996
- 0;
2040
+ if (isInStartBoundary && isInEndBoundary) {
2041
+ continue;
2042
+ }
1997
2043
 
1998
- const targetOffset =
1999
- targetAttach[dir] === align ?
2000
- targetDim[prop] :
2001
- targetAttach[dir] === alignFlip ?
2002
- -targetDim[prop] :
2003
- 0;
2044
+ let offsetBy;
2004
2045
 
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;
2046
+ // Flip
2047
+ if (willFlip) {
2048
+ if (
2049
+ elAttach[i] === end && isInStartBoundary ||
2050
+ elAttach[i] === start && isInEndBoundary)
2051
+ {
2052
+ continue;
2053
+ }
2054
+
2055
+ offsetBy =
2056
+ (elAttach[i] === start ?
2057
+ -position[prop] :
2058
+ elAttach[i] === end ?
2059
+ position[prop] :
2060
+ 0) + (
2061
+ targetAttach[i] === start ?
2062
+ targetDim[prop] :
2063
+ targetAttach[i] === end ?
2064
+ -targetDim[prop] :
2065
+ 0) -
2066
+ elOffset[i] * 2;
2067
+
2068
+ if (
2069
+ !isInScrollArea(
2070
+ {
2071
+ ...position,
2072
+ [start]: position[start] + offsetBy,
2073
+ [end]: position[end] + offsetBy },
2012
2074
 
2013
- return (
2014
- elAttach[dir] === 'center' && (
2015
- apply(centerOffset, centerTargetOffset) ||
2016
- apply(-centerOffset, -centerTargetOffset)) ||
2017
- apply(elemOffset, targetOffset));
2075
+ scrollElement,
2076
+ i))
2018
2077
 
2078
+ {
2079
+ if (isInScrollArea(position, scrollElement, i)) {
2080
+ continue;
2019
2081
  }
2020
2082
 
2021
- function apply(elemOffset, targetOffset) {
2022
- const newVal = toFloat(
2023
- (position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4));
2083
+ if (options.recursion) {
2084
+ return false;
2085
+ }
2024
2086
 
2087
+ const newPos = attachToWithFlip(element, target, {
2088
+ ...options,
2089
+ attach: {
2090
+ element: elAttach.map(flipDir).reverse(),
2091
+ target: targetAttach.map(flipDir).reverse() },
2025
2092
 
2026
- if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
2027
- position[align] = newVal;
2093
+ offset: elOffset.reverse(),
2094
+ flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
2095
+ recursion: true });
2028
2096
 
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
2097
 
2038
- return true;
2039
- }
2098
+ if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
2099
+ return newPos;
2040
2100
  }
2041
- });
2042
- });
2043
- }
2101
+ }
2044
2102
 
2045
- offset(element, position);
2103
+ // Move
2104
+ } else {
2105
+ offsetBy =
2106
+ clamp(
2107
+ clamp(position[start], viewport[start], viewport[end] - position[prop]),
2108
+ targetDim[start] - position[prop] + elOffset[i],
2109
+ targetDim[end] - elOffset[i]) -
2110
+ position[start];
2111
+ }
2046
2112
 
2047
- return flipped;
2048
- }
2113
+ offsetPosition[start] = position[dir] = position[start] + offsetBy;
2114
+ offsetPosition[end] += offsetBy;
2115
+ }
2049
2116
 
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
- });
2117
+ return offsetPosition;
2058
2118
  }
2059
2119
 
2060
- function getPos(pos) {
2061
- const x = /left|center|right/;
2062
- const y = /top|center|bottom/;
2063
-
2064
- pos = (pos || '').split(' ');
2120
+ function moveBy(start, end, dim) {
2121
+ return start === 'center' ? dim / 2 : start === end ? dim : 0;
2122
+ }
2065
2123
 
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'];
2124
+ function getIntersectionArea() {
2125
+ let area = {};for (var _len = arguments.length, rects = new Array(_len), _key = 0; _key < _len; _key++) {rects[_key] = arguments[_key];}
2126
+ for (const rect of rects) {
2127
+ for (const [,, start, end] of dirs) {
2128
+ area[start] = Math.max(area[start] || 0, rect[start]);
2129
+ area[end] = Math.min(...[area[end], rect[end]].filter(Boolean));
2130
+ }
2072
2131
  }
2132
+ return area;
2133
+ }
2073
2134
 
2074
- return {
2075
- x: x.test(pos[0]) ? pos[0] : 'center',
2076
- y: y.test(pos[1]) ? pos[1] : 'center' };
2135
+ function isInScrollArea(position, scrollElement, dir) {
2136
+ const viewport = offsetViewport(scrollElement);
2137
+ const [prop,, start, end] = dirs[dir];
2138
+ viewport[start] -= scrollElement["scroll" + ucfirst(start)];
2139
+ viewport[end] = viewport[start] + scrollElement["scroll" + ucfirst(prop)];
2077
2140
 
2141
+ return position[start] >= viewport[start] && position[end] <= viewport[end];
2078
2142
  }
2079
2143
 
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 };
2144
+ function intersectLine(dimA, dimB, dir) {
2145
+ const [,, start, end] = dirs[dir];
2146
+ return dimA[end] > dimB[start] && dimB[end] > dimA[start];
2147
+ }
2086
2148
 
2149
+ function flipDir(prop) {
2150
+ for (const i in dirs) {
2151
+ const index = dirs[i].indexOf(prop);
2152
+ if (~index) {
2153
+ return dirs[1 - i][index % 2 + 2];
2154
+ }
2155
+ }
2087
2156
  }
2088
2157
 
2089
2158
  var util = /*#__PURE__*/Object.freeze({
@@ -2192,7 +2261,6 @@
2192
2261
  toNode: toNode,
2193
2262
  toNodes: toNodes,
2194
2263
  toWindow: toWindow,
2195
- toMs: toMs,
2196
2264
  isEqual: isEqual,
2197
2265
  swap: swap,
2198
2266
  last: last,
@@ -2231,9 +2299,7 @@
2231
2299
  scrollIntoView: scrollIntoView,
2232
2300
  scrolledOver: scrolledOver,
2233
2301
  scrollParents: scrollParents,
2234
- getViewport: getViewport$1,
2235
- getViewportClientHeight: getViewportClientHeight,
2236
- getScrollingElement: getScrollingElement
2302
+ offsetViewport: offsetViewport
2237
2303
  });
2238
2304
 
2239
2305
  function globalAPI (UIkit) {
@@ -2892,7 +2958,7 @@
2892
2958
  UIkit.data = '__uikit__';
2893
2959
  UIkit.prefix = 'uk-';
2894
2960
  UIkit.options = {};
2895
- UIkit.version = '3.13.9';
2961
+ UIkit.version = '3.13.11-dev.98491b3f4';
2896
2962
 
2897
2963
  globalAPI(UIkit);
2898
2964
  hooksAPI(UIkit);
@@ -2900,30 +2966,6 @@
2900
2966
  componentAPI(UIkit);
2901
2967
  instanceAPI(UIkit);
2902
2968
 
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
2969
  function boot (UIkit) {
2928
2970
  const { connect, disconnect } = UIkit;
2929
2971
 
@@ -3501,50 +3543,49 @@
3501
3543
  data: {
3502
3544
  pos: "bottom-" + (isRtl ? 'right' : 'left'),
3503
3545
  flip: true,
3504
- offset: false },
3546
+ offset: false,
3547
+ viewportPadding: 10 },
3505
3548
 
3506
3549
 
3507
3550
  connected() {
3508
3551
  this.pos = this.$props.pos.split('-').concat('center').slice(0, 2);
3509
- this.dir = this.pos[0];
3510
- this.align = this.pos[1];
3552
+ this.axis = includes(['top', 'bottom'], this.pos[0]) ? 'y' : 'x';
3511
3553
  },
3512
3554
 
3513
3555
  methods: {
3514
3556
  positionAt(element, target, boundary) {
3515
- const axis = this.getAxis();
3516
- const dir = this.pos[0];
3517
- const align = this.pos[1];
3557
+ const [dir, align] = this.pos;
3518
3558
 
3519
3559
  let { offset: offset$1 } = this;
3520
3560
  if (!isNumeric(offset$1)) {
3521
3561
  const node = $(offset$1);
3522
3562
  offset$1 = node ?
3523
- offset(node)[axis === 'x' ? 'left' : 'top'] -
3524
- offset(target)[axis === 'x' ? 'right' : 'bottom'] :
3563
+ offset(node)[this.axis === 'x' ? 'left' : 'top'] -
3564
+ offset(target)[this.axis === 'x' ? 'right' : 'bottom'] :
3525
3565
  0;
3526
3566
  }
3527
3567
  offset$1 = toPx(offset$1) + toPx(getCssVar('position-offset', element));
3568
+ offset$1 = [includes(['left', 'top'], dir) ? -offset$1 : +offset$1, 0];
3569
+
3570
+ const attach = {
3571
+ element: [flipPosition(dir), align],
3572
+ target: [dir, align] };
3528
3573
 
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
3574
 
3546
- getAxis() {
3547
- return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';
3575
+ if (this.axis === 'y') {
3576
+ for (const prop in attach) {
3577
+ attach[prop] = attach[prop].reverse();
3578
+ }
3579
+ offset$1 = offset$1.reverse();
3580
+ }
3581
+
3582
+ positionAt(element, target, {
3583
+ attach,
3584
+ offset: offset$1,
3585
+ boundary,
3586
+ viewportPadding: this.viewportPadding,
3587
+ flip: this.flip });
3588
+
3548
3589
  } } };
3549
3590
 
3550
3591
  let active$1;
@@ -3761,13 +3802,7 @@
3761
3802
  this.hide(false);
3762
3803
  }
3763
3804
  }),
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
-
3805
+ on(window, 'resize', () => this.$emit())])
3771
3806
  {
3772
3807
  once(this.$el, 'hide', handler, { self: true });
3773
3808
  }
@@ -3787,7 +3822,7 @@
3787
3822
  {
3788
3823
  name: 'hide',
3789
3824
 
3790
- handler(_ref5) {let { target } = _ref5;
3825
+ handler(_ref4) {let { target } = _ref4;
3791
3826
  if (this.$el !== target) {
3792
3827
  active$1 =
3793
3828
  active$1 === null && within(target, this.$el) && this.isToggled() ?
@@ -3878,25 +3913,33 @@
3878
3913
  },
3879
3914
 
3880
3915
  position() {
3881
- const boundary = query(this.boundary, this.$el) || window;
3882
3916
  removeClass(this.$el, this.clsDrop + "-stack");
3883
3917
  toggleClass(this.$el, this.clsDrop + "-boundary", this.boundaryAlign);
3884
3918
 
3885
- const boundaryOffset = offset(boundary);
3886
- const targetOffset = offset(this.target);
3887
- const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
3919
+ const boundary = query(this.boundary, this.$el);
3920
+ const [scrollParent] = scrollParents(this.$el);
3921
+ const scrollParentOffset = offsetViewport(scrollParent);
3922
+ const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
3923
+
3924
+ css(this.$el, 'maxWidth', '');
3925
+ const maxWidth = scrollParentOffset.width - (boundary ? 0 : 2 * this.viewportPadding);
3888
3926
 
3889
3927
  if (this.pos[1] === 'justify') {
3890
- const prop = this.getAxis() === 'y' ? 'width' : 'height';
3928
+ const prop = this.axis === 'y' ? 'width' : 'height';
3929
+ const targetOffset = offset(this.target);
3930
+ const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
3891
3931
  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
- {
3932
+ } else if (this.$el.offsetWidth > maxWidth) {
3896
3933
  addClass(this.$el, this.clsDrop + "-stack");
3897
3934
  }
3898
3935
 
3899
- this.positionAt(this.$el, this.boundaryAlign ? boundary : this.target, boundary);
3936
+ css(this.$el, 'maxWidth', maxWidth);
3937
+
3938
+ this.positionAt(
3939
+ this.$el,
3940
+ boundary && this.boundaryAlign ? boundary : this.target,
3941
+ boundary);
3942
+
3900
3943
  } } };
3901
3944
 
3902
3945
 
@@ -5000,16 +5043,19 @@
5000
5043
 
5001
5044
  connected() {
5002
5045
  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', () => {
5046
+ this.matchMedia = true;
5047
+ if (media) {
5048
+ this.mediaObj = window.matchMedia(media);
5049
+ const handler = () => {
5050
+ this.matchMedia = this.mediaObj.matches;
5051
+ trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
5052
+ };
5053
+ this.offMediaObj = on(this.mediaObj, 'change', () => {
5054
+ handler();
5055
+ this.$emit('resize');
5056
+ });
5009
5057
  handler();
5010
- this.$emit('resize');
5011
- });
5012
- handler();
5058
+ }
5013
5059
  },
5014
5060
 
5015
5061
  disconnected() {var _this$offMediaObj;
@@ -5298,7 +5344,7 @@
5298
5344
  return (el, show) =>
5299
5345
  new Promise((resolve, reject) =>
5300
5346
  once(el, 'show hide', () => {
5301
- el._reject && el._reject();
5347
+ el._reject == null ? void 0 : el._reject();
5302
5348
  el._reject = reject;
5303
5349
 
5304
5350
  _toggle(el, show);
@@ -5323,6 +5369,10 @@
5323
5369
  then(() => delete el._reject);
5324
5370
  }
5325
5371
 
5372
+ function toMs(time) {
5373
+ return time ? endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000 : 0;
5374
+ }
5375
+
5326
5376
  var modal = {
5327
5377
  install,
5328
5378
 
@@ -5476,8 +5526,6 @@
5476
5526
  toggle: '> a',
5477
5527
  content: '> ul' } };
5478
5528
 
5479
- const navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle';
5480
-
5481
5529
  var navbar = {
5482
5530
  mixins: [Class, Container],
5483
5531
 
@@ -5497,7 +5545,7 @@
5497
5545
 
5498
5546
 
5499
5547
  data: {
5500
- dropdown: navItem,
5548
+ dropdown: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
5501
5549
  align: isRtl ? 'right' : 'left',
5502
5550
  clsDrop: 'uk-navbar-dropdown',
5503
5551
  mode: undefined,
@@ -5583,9 +5631,23 @@
5583
5631
  immediate: true },
5584
5632
 
5585
5633
 
5586
- toggles(_ref6, $el) {let { dropdown } = _ref6;
5587
- return $$(dropdown, $el);
5588
- } },
5634
+ toggles: {
5635
+ get(_ref6, $el) {let { dropdown } = _ref6;
5636
+ return $$(dropdown, $el);
5637
+ },
5638
+
5639
+ watch() {
5640
+ const justify = hasClass(this.$el, 'uk-navbar-justify');
5641
+ for (const container of $$(
5642
+ '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
5643
+ this.$el))
5644
+ {
5645
+ css(container, 'flexGrow', justify ? $$(this.dropdown, container).length : '');
5646
+ }
5647
+ },
5648
+
5649
+ immediate: true } },
5650
+
5589
5651
 
5590
5652
 
5591
5653
  disconnected() {
@@ -5746,7 +5808,7 @@
5746
5808
  return this.dropbar;
5747
5809
  },
5748
5810
 
5749
- handler(_, _ref10) {let { $el, dir } = _ref10;
5811
+ handler(_, _ref10) {let { $el, pos: [dir] = [] } = _ref10;
5750
5812
  if (!hasClass($el, this.clsDrop)) {
5751
5813
  return;
5752
5814
  }
@@ -6480,19 +6542,15 @@
6480
6542
 
6481
6543
  const [scrollElement] = scrollParents(targets, /auto|scroll/, true);
6482
6544
  const { scrollTop, scrollHeight } = scrollElement;
6483
- const max = scrollHeight - getViewportClientHeight(scrollElement);
6545
+ const viewport = offsetViewport(scrollElement);
6546
+ const max = scrollHeight - viewport.height;
6484
6547
  let active = false;
6485
6548
 
6486
6549
  if (scrollTop === max) {
6487
6550
  active = length - 1;
6488
6551
  } else {
6489
6552
  for (const i in targets) {
6490
- if (
6491
- offset(targets[i]).top -
6492
- offset(getViewport$1(scrollElement)).top -
6493
- this.offset >
6494
- 0)
6495
- {
6553
+ if (offset(targets[i]).top - viewport.top - this.offset > 0) {
6496
6554
  break;
6497
6555
  }
6498
6556
  active = +i;
@@ -6526,8 +6584,10 @@
6526
6584
 
6527
6585
  props: {
6528
6586
  position: String,
6529
- top: null,
6587
+ top: Boolean,
6530
6588
  bottom: Boolean,
6589
+ start: Boolean,
6590
+ end: Boolean,
6531
6591
  offset: String,
6532
6592
  animation: String,
6533
6593
  clsActive: String,
@@ -6541,8 +6601,10 @@
6541
6601
 
6542
6602
  data: {
6543
6603
  position: 'top',
6544
- top: 0,
6604
+ top: false,
6545
6605
  bottom: false,
6606
+ start: false,
6607
+ end: false,
6546
6608
  offset: 0,
6547
6609
  animation: '',
6548
6610
  clsActive: 'uk-active',
@@ -6565,6 +6627,9 @@
6565
6627
  },
6566
6628
 
6567
6629
  connected() {
6630
+ this.start = this.start || this.top;
6631
+ this.end = this.end || this.bottom;
6632
+
6568
6633
  this.placeholder =
6569
6634
  $('+ .uk-sticky-placeholder', this.$el) ||
6570
6635
  $('<div class="uk-sticky-placeholder"></div>');
@@ -6599,7 +6664,7 @@
6599
6664
  return;
6600
6665
  }
6601
6666
 
6602
- fastdom.read(() => {
6667
+ setTimeout(() => {
6603
6668
  const targetOffset = offset($(location.hash));
6604
6669
  const elOffset = offset(this.$el);
6605
6670
 
@@ -6639,7 +6704,7 @@
6639
6704
 
6640
6705
  if (hide) {
6641
6706
  this.show();
6642
- fastdom.write(() => css(this.selTarget, 'transition', ''));
6707
+ requestAnimationFrame(() => css(this.selTarget, 'transition', ''));
6643
6708
  }
6644
6709
 
6645
6710
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
@@ -6658,13 +6723,17 @@
6658
6723
  const overflow = Math.max(0, height$1 + offset$1 - windowHeight);
6659
6724
  const topOffset = offset(referenceElement).top;
6660
6725
 
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;
6726
+ const start =
6727
+ (this.start === false ?
6728
+ topOffset :
6729
+ parseProp(this.start, this.$el, topOffset)) - offset$1;
6730
+ const end =
6731
+ this.end === false ?
6732
+ document.scrollingElement.scrollHeight - windowHeight :
6733
+ parseProp(this.end, this.$el, topOffset + height$1, true) -
6734
+ offset(this.$el).height +
6735
+ overflow -
6736
+ offset$1;
6668
6737
 
6669
6738
  return {
6670
6739
  start,
@@ -6710,7 +6779,9 @@
6710
6779
  prevDir,
6711
6780
  scroll,
6712
6781
  prevScroll,
6713
- offsetParentTop: offset(this.$el.offsetParent).top,
6782
+ offsetParentTop: offset(
6783
+ (this.isFixed ? this.placeholder : this.$el).offsetParent).
6784
+ top,
6714
6785
  overflowScroll: clamp(
6715
6786
  overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
6716
6787
  0,
@@ -6865,8 +6936,8 @@
6865
6936
  return 0;
6866
6937
  }
6867
6938
 
6868
- if (isString(value) && value.match(/^-?\d/)) {
6869
- return propOffset + toPx(value);
6939
+ if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
6940
+ return propOffset + toPx(value, 'height', el, true);
6870
6941
  } else {
6871
6942
  const refElement = value === true ? parent(el) : query(value, el);
6872
6943
  return (
@@ -7186,15 +7257,7 @@
7186
7257
  {
7187
7258
  name: 'click',
7188
7259
 
7189
- filter() {
7190
- return includes(this.mode, 'click');
7191
- },
7192
-
7193
7260
  handler(e) {
7194
- if (this._preventClick) {
7195
- return this._preventClick = null;
7196
- }
7197
-
7198
7261
  let link;
7199
7262
  if (
7200
7263
  closest(e.target, 'a[href="#"], a[href=""]') ||
@@ -7205,6 +7268,14 @@
7205
7268
  e.preventDefault();
7206
7269
  }
7207
7270
 
7271
+ if (this._preventClick) {
7272
+ return this._preventClick = null;
7273
+ }
7274
+
7275
+ if (!includes(this.mode, 'click')) {
7276
+ return;
7277
+ }
7278
+
7208
7279
  this.toggle();
7209
7280
  } },
7210
7281
 
@@ -7330,9 +7401,6 @@
7330
7401
  // register components
7331
7402
  each(components, (component, name) => UIkit.component(name, component));
7332
7403
 
7333
- // core functionality
7334
- UIkit.use(Core);
7335
-
7336
7404
  boot(UIkit);
7337
7405
 
7338
7406
  return UIkit;