uikit 3.14.4-dev.838f092aa → 3.14.4-dev.8a6d8c5ed

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 (137) hide show
  1. package/CHANGELOG.md +41 -12
  2. package/build/util.js +1 -0
  3. package/dist/css/uikit-core-rtl.css +380 -101
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +380 -101
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +397 -106
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +397 -106
  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 +7 -5
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +111 -139
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +111 -139
  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 +4 -5
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +4 -5
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +22 -7
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +4 -5
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +22 -7
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +3 -3
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +107 -137
  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 +516 -458
  38. package/dist/js/uikit-core.min.js +14 -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 +569 -494
  42. package/dist/js/uikit.min.js +14 -1
  43. package/package.json +1 -1
  44. package/src/images/{backgrounds/nav-parent-open.svg → components/nav-parent-icon-large.svg} +0 -0
  45. package/src/images/components/nav-parent-icon.svg +3 -0
  46. package/src/images/components/navbar-parent-icon.svg +3 -0
  47. package/src/images/components/navbar-toggle-icon.svg +22 -3
  48. package/src/js/api/state.js +2 -2
  49. package/src/js/components/filter.js +5 -3
  50. package/src/js/components/sortable.js +2 -3
  51. package/src/js/core/accordion.js +9 -17
  52. package/src/js/core/alert.js +35 -14
  53. package/src/js/core/drop.js +89 -62
  54. package/src/js/core/height-viewport.js +14 -6
  55. package/src/js/core/icon.js +16 -0
  56. package/src/js/core/index.js +2 -0
  57. package/src/js/core/leader.js +2 -2
  58. package/src/js/core/navbar.js +44 -30
  59. package/src/js/core/scroll.js +37 -10
  60. package/src/js/core/sticky.js +8 -9
  61. package/src/js/core/toggle.js +3 -5
  62. package/src/js/mixin/media.js +4 -5
  63. package/src/js/mixin/modal.js +10 -7
  64. package/src/js/mixin/position.js +26 -11
  65. package/src/js/mixin/slider-drag.js +20 -8
  66. package/src/js/mixin/style.js +11 -0
  67. package/src/js/mixin/togglable.js +88 -133
  68. package/src/js/util/animation.js +4 -3
  69. package/src/js/util/dimensions.js +6 -6
  70. package/src/js/util/filter.js +3 -7
  71. package/src/js/util/position.js +108 -107
  72. package/src/js/util/style.js +4 -13
  73. package/src/js/util/viewport.js +5 -32
  74. package/src/less/components/_import.less +1 -0
  75. package/src/less/components/drop.less +1 -18
  76. package/src/less/components/dropbar.less +115 -0
  77. package/src/less/components/dropdown.less +16 -16
  78. package/src/less/components/leader.less +1 -1
  79. package/src/less/components/nav.less +240 -63
  80. package/src/less/components/navbar.less +73 -27
  81. package/src/less/components/utility.less +21 -4
  82. package/src/less/theme/_import.less +1 -0
  83. package/src/less/theme/dropbar.less +44 -0
  84. package/src/less/theme/dropdown.less +0 -11
  85. package/src/less/theme/nav.less +43 -9
  86. package/src/less/theme/navbar.less +4 -10
  87. package/src/scss/components/_import.scss +1 -0
  88. package/src/scss/components/drop.scss +1 -18
  89. package/src/scss/components/dropbar.scss +115 -0
  90. package/src/scss/components/dropdown.scss +16 -16
  91. package/src/scss/components/leader.scss +1 -1
  92. package/src/scss/components/nav.scss +189 -51
  93. package/src/scss/components/navbar.scss +61 -27
  94. package/src/scss/components/utility.scss +19 -3
  95. package/src/scss/mixins-theme.scss +93 -25
  96. package/src/scss/mixins.scss +89 -17
  97. package/src/scss/theme/_import.scss +1 -0
  98. package/src/scss/theme/dropbar.scss +44 -0
  99. package/src/scss/theme/dropdown.scss +0 -8
  100. package/src/scss/theme/nav.scss +41 -9
  101. package/src/scss/theme/navbar.scss +4 -7
  102. package/src/scss/variables-theme.scss +69 -17
  103. package/src/scss/variables.scss +58 -13
  104. package/tests/accordion.html +2 -2
  105. package/tests/alert.html +2 -2
  106. package/tests/countdown.html +1 -1
  107. package/tests/drop.html +451 -371
  108. package/tests/dropbar.html +456 -0
  109. package/tests/dropdown.html +26 -401
  110. package/tests/filter.html +9 -12
  111. package/tests/form.html +1 -1
  112. package/tests/index.html +126 -107
  113. package/tests/js/index.js +1 -4
  114. package/tests/lightbox.html +5 -5
  115. package/tests/list.html +8 -8
  116. package/tests/modal.html +13 -13
  117. package/tests/nav.html +117 -75
  118. package/tests/navbar.html +2001 -1130
  119. package/tests/offcanvas.html +17 -21
  120. package/tests/parallax.html +1 -1
  121. package/tests/position.html +18 -16
  122. package/tests/progress.html +9 -9
  123. package/tests/scroll.html +7 -10
  124. package/tests/search.html +5 -5
  125. package/tests/slider.html +6 -5
  126. package/tests/slideshow.html +8 -8
  127. package/tests/sortable.html +6 -8
  128. package/tests/sticky-navbar.html +6 -6
  129. package/tests/sticky.html +8 -8
  130. package/tests/switcher.html +1 -1
  131. package/tests/tab.html +1 -1
  132. package/tests/table.html +7 -7
  133. package/tests/toggle.html +2 -2
  134. package/tests/tooltip.html +1 -1
  135. package/tests/upload.html +11 -11
  136. package/tests/utility.html +19 -0
  137. package/src/images/backgrounds/nav-parent-close.svg +0 -3
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.14.4-dev.838f092aa | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.14.4-dev.8a6d8c5ed | 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() :
@@ -383,12 +383,8 @@
383
383
  }
384
384
 
385
385
  function closest(element, selector) {
386
- if (startsWith(selector, '>')) {
387
- selector = selector.slice(1);
388
- }
389
-
390
386
  return isElement(element) ?
391
- element.closest(selector) :
387
+ element.closest(startsWith(selector, '>') ? selector.slice(1) : selector) :
392
388
  toNodes(element).
393
389
  map((element) => closest(element, selector)).
394
390
  filter(Boolean);
@@ -396,8 +392,8 @@
396
392
 
397
393
  function within(element, selector) {
398
394
  return isString(selector) ?
399
- matches(element, selector) || !!closest(element, selector) :
400
- element === selector || toNode(selector).contains(toNode(element));
395
+ !!closest(element, selector) :
396
+ toNode(selector).contains(toNode(element));
401
397
  }
402
398
 
403
399
  function parents(element, selector) {
@@ -785,18 +781,11 @@
785
781
  return elements[0];
786
782
  }
787
783
 
788
- const propertyRe = /^\s*(["'])?(.*?)\1\s*$/;
789
- function getCssVar(name, element) {if (element === void 0) {element = document.documentElement;}
790
- return css(element, "--uk-" + name).replace(propertyRe, '$2');
791
- }
792
-
793
784
  // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
794
785
  const propName = memoize((name) => vendorPropName(name));
795
786
 
796
- const cssPrefixes = ['webkit', 'moz'];
797
-
798
787
  function vendorPropName(name) {
799
- if (name[0] === '-') {
788
+ if (startsWith(name, '--')) {
800
789
  return name;
801
790
  }
802
791
 
@@ -808,11 +797,8 @@
808
797
  return name;
809
798
  }
810
799
 
811
- let i = cssPrefixes.length,
812
- prefixedName;
813
-
814
- while (i--) {
815
- prefixedName = "-" + cssPrefixes[i] + "-" + name;
800
+ for (const prefix of ['webkit', 'moz']) {
801
+ const prefixedName = "-" + prefix + "-" + name;
816
802
  if (prefixedName in style) {
817
803
  return prefixedName;
818
804
  }
@@ -913,13 +899,14 @@
913
899
  const Transition = {
914
900
  start: transition,
915
901
 
916
- stop(element) {
902
+ async stop(element) {
917
903
  trigger(element, 'transitionend');
918
- return Promise.resolve();
904
+ await Promise.resolve();
919
905
  },
920
906
 
921
- cancel(element) {
907
+ async cancel(element) {
922
908
  trigger(element, 'transitioncanceled');
909
+ await Promise.resolve();
923
910
  },
924
911
 
925
912
  inProgress(element) {
@@ -929,7 +916,7 @@
929
916
 
930
917
  const animationPrefix = 'uk-animation-';
931
918
 
932
- function animate$1(element, animation, duration, origin, out) {if (duration === void 0) {duration = 200;}
919
+ function animate$2(element, animation, duration, origin, out) {if (duration === void 0) {duration = 200;}
933
920
  return Promise.all(
934
921
  toNodes(element).map(
935
922
  (element) =>
@@ -965,10 +952,10 @@
965
952
 
966
953
  const inProgress = new RegExp(animationPrefix + "(enter|leave)");
967
954
  const Animation = {
968
- in: animate$1,
955
+ in: animate$2,
969
956
 
970
957
  out(element, animation, duration, origin) {
971
- return animate$1(element, animation, duration, origin, true);
958
+ return animate$2(element, animation, duration, origin, true);
972
959
  },
973
960
 
974
961
  inProgress(element) {
@@ -1060,13 +1047,13 @@
1060
1047
  }
1061
1048
 
1062
1049
  function offsetPosition(element) {
1063
- const offset = [0, 0];
1064
-
1065
1050
  element = toNode(element);
1066
1051
 
1067
- do {
1068
- offset[0] += element.offsetTop;
1069
- offset[1] += element.offsetLeft;
1052
+ const offset = [element.offsetTop, element.offsetLeft];
1053
+
1054
+ while (element = element.offsetParent) {
1055
+ offset[0] += element.offsetTop + toFloat(css(element, "borderTopWidth"));
1056
+ offset[1] += element.offsetLeft + toFloat(css(element, "borderLeftWidth"));
1070
1057
 
1071
1058
  if (css(element, 'position') === 'fixed') {
1072
1059
  const win = toWindow(element);
@@ -1074,7 +1061,7 @@
1074
1061
  offset[1] += win.scrollX;
1075
1062
  return offset;
1076
1063
  }
1077
- } while (element = element.offsetParent);
1064
+ }
1078
1065
 
1079
1066
  return offset;
1080
1067
  }
@@ -1293,9 +1280,9 @@
1293
1280
  const hasTouch = inBrowser && 'ontouchstart' in window;
1294
1281
  const hasPointerEvents = inBrowser && window.PointerEvent;
1295
1282
 
1296
- const pointerDown = hasPointerEvents ? 'pointerdown' : hasTouch ? 'touchstart' : 'mousedown';
1297
- const pointerMove = hasPointerEvents ? 'pointermove' : hasTouch ? 'touchmove' : 'mousemove';
1298
- const pointerUp = hasPointerEvents ? 'pointerup' : hasTouch ? 'touchend' : 'mouseup';
1283
+ const pointerDown$1 = hasPointerEvents ? 'pointerdown' : hasTouch ? 'touchstart' : 'mousedown';
1284
+ const pointerMove$1 = hasPointerEvents ? 'pointermove' : hasTouch ? 'touchmove' : 'mousemove';
1285
+ const pointerUp$1 = hasPointerEvents ? 'pointerup' : hasTouch ? 'touchend' : 'mouseup';
1299
1286
  const pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouch ? '' : 'mouseenter';
1300
1287
  const pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouch ? '' : 'mouseleave';
1301
1288
  const pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel';
@@ -1795,20 +1782,6 @@
1795
1782
 
1796
1783
  }
1797
1784
 
1798
- function scrollTop(element, top) {
1799
- if (isWindow(element) || isDocument(element)) {
1800
- element = scrollingElement(element);
1801
- } else {
1802
- element = toNode(element);
1803
- }
1804
-
1805
- if (isUndefined(top)) {
1806
- return element.scrollTop;
1807
- } else {
1808
- element.scrollTop = top;
1809
- }
1810
- }
1811
-
1812
1785
  function scrollIntoView(element, _temp) {let { offset: offsetBy = 0 } = _temp === void 0 ? {} : _temp;
1813
1786
  const parents = isVisible(element) ? scrollParents(element) : [];
1814
1787
  return parents.reduce(
@@ -1850,7 +1823,7 @@
1850
1823
  (function step() {
1851
1824
  const percent = ease(clamp((Date.now() - start) / duration));
1852
1825
 
1853
- scrollTop(element, scroll + top * percent);
1826
+ element.scrollTop = scroll + top * percent;
1854
1827
 
1855
1828
  // scroll more if we have not reached our destination
1856
1829
  if (percent === 1) {
@@ -1913,12 +1886,10 @@
1913
1886
  function offsetViewport(scrollElement) {
1914
1887
  const window = toWindow(scrollElement);
1915
1888
  const {
1916
- document: { body, documentElement } } =
1889
+ document: { documentElement } } =
1917
1890
  window;
1918
1891
  let viewportElement =
1919
- scrollElement === scrollingElement(scrollElement) || scrollElement === body ?
1920
- window :
1921
- scrollElement;
1892
+ scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
1922
1893
 
1923
1894
  const { visualViewport } = window;
1924
1895
  if (isWindow(viewportElement) && visualViewport) {
@@ -1937,7 +1908,7 @@
1937
1908
  // iOS 12 returns <body> as scrollingElement
1938
1909
  viewportElement = documentElement;
1939
1910
  } else {
1940
- rect[start] += toFloat(css(viewportElement, "border" + ucfirst(start) + "Width"));
1911
+ rect[start] += toFloat(css(viewportElement, "border-" + start + "-width"));
1941
1912
  }
1942
1913
  rect[prop] = rect[dir] = viewportElement["client" + ucfirst(prop)];
1943
1914
  rect[end] = rect[prop] + rect[start];
@@ -1962,126 +1933,65 @@
1962
1933
  ...options.attach },
1963
1934
 
1964
1935
  offset: [0, 0],
1936
+ placement: [],
1965
1937
  ...options };
1966
1938
 
1967
1939
 
1968
- const dim = options.flip ?
1969
- attachToWithFlip(element, target, options) :
1970
- attachTo(element, target, options);
1971
-
1972
- offset(element, dim);
1973
- }
1974
-
1975
- function attachTo(element, target, options) {
1976
- let { attach, offset: offsetBy } = {
1977
- attach: {
1978
- element: ['left', 'top'],
1979
- target: ['left', 'top'],
1980
- ...options.attach },
1981
-
1982
- offset: [0, 0],
1983
- ...options };
1984
-
1985
-
1986
- const position = offset(element);
1987
- const targetOffset = offset(target);
1988
- for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
1989
- position[start] = position[dir] =
1990
- targetOffset[start] +
1991
- moveBy(attach.target[i], end, targetOffset[prop]) -
1992
- moveBy(attach.element[i], end, position[prop]) +
1993
- +offsetBy[i];
1994
- position[end] = position[start] + position[prop];
1940
+ if (!isArray(target)) {
1941
+ target = [target, target];
1995
1942
  }
1996
- return position;
1997
- }
1998
1943
 
1999
- function moveBy(start, end, dim) {
2000
- return start === 'center' ? dim / 2 : start === end ? dim : 0;
1944
+ offset(element, getPosition(element, target, options));
2001
1945
  }
2002
1946
 
2003
- function attachToWithFlip(element, target, options) {
1947
+ function getPosition(element, target, options) {
2004
1948
  const position = attachTo(element, target, options);
2005
- const targetDim = offset(target);
2006
1949
 
2007
1950
  let {
2008
- flip,
2009
1951
  attach: { element: elAttach, target: targetAttach },
2010
1952
  offset: elOffset,
2011
1953
  boundary,
2012
- viewport,
2013
- viewportOffset } =
1954
+ viewportOffset,
1955
+ placement } =
2014
1956
  options;
2015
1957
 
2016
- let viewports = scrollParents(element);
2017
- if (boundary === target) {
2018
- viewports = viewports.filter((viewport) => viewport !== boundary);
2019
- }
2020
- const [scrollElement] = viewports;
2021
- viewports.push(viewport);
1958
+ let offsetPosition = position;
1959
+ for (const [i, [prop,, start, end]] of Object.entries(dirs)) {
1960
+ let viewports = scrollParents(target[i]);
1961
+ const [scrollElement] = viewports;
2022
1962
 
2023
- const offsetPosition = { ...position };
2024
- for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
2025
- if (flip !== true && !includes(flip, dir)) {
2026
- continue;
2027
- }
2028
-
2029
- const willFlip =
2030
- !intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i);
2031
-
2032
- viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
1963
+ let viewport = getIntersectionArea(...viewports.map(offsetViewport));
2033
1964
 
2034
1965
  if (viewportOffset) {
2035
1966
  viewport[start] += viewportOffset;
2036
1967
  viewport[end] -= viewportOffset;
2037
1968
  }
2038
1969
 
2039
- if (boundary && !willFlip && position[prop] <= offset(boundary)[prop]) {
2040
- viewport = getIntersectionArea(viewport, offset(boundary));
1970
+ if (boundary) {
1971
+ viewport = getIntersectionArea(viewport, offsetViewport(boundary));
2041
1972
  }
2042
1973
 
2043
- const isInStartBoundary = position[start] >= viewport[start];
2044
- const isInEndBoundary = position[end] <= viewport[end];
1974
+ const isInStartViewport = position[start] >= viewport[start];
1975
+ const isInEndViewport = position[end] <= viewport[end];
2045
1976
 
2046
- if (isInStartBoundary && isInEndBoundary) {
1977
+ if (isInStartViewport && isInEndViewport) {
2047
1978
  continue;
2048
1979
  }
2049
1980
 
2050
- let offsetBy;
1981
+ let offsetBy = 0;
2051
1982
 
2052
1983
  // Flip
2053
- if (willFlip) {
1984
+ if (placement[i] === 'flip') {
2054
1985
  if (
2055
- elAttach[i] === end && isInStartBoundary ||
2056
- elAttach[i] === start && isInEndBoundary)
1986
+ targetAttach[i] === end && isInEndViewport ||
1987
+ targetAttach[i] === start && isInStartViewport)
2057
1988
  {
2058
1989
  continue;
2059
1990
  }
2060
1991
 
2061
- offsetBy =
2062
- (elAttach[i] === start ?
2063
- -position[prop] :
2064
- elAttach[i] === end ?
2065
- position[prop] :
2066
- 0) + (
2067
- targetAttach[i] === start ?
2068
- targetDim[prop] :
2069
- targetAttach[i] === end ?
2070
- -targetDim[prop] :
2071
- 0) -
2072
- elOffset[i] * 2;
2073
-
2074
- if (
2075
- !isInScrollArea(
2076
- {
2077
- ...position,
2078
- [start]: position[start] + offsetBy,
2079
- [end]: position[end] + offsetBy },
2080
-
2081
- scrollElement,
2082
- i))
1992
+ offsetBy = flip(element, target, options, i)[start] - position[start];
2083
1993
 
2084
- {
1994
+ if (!isInScrollArea(applyOffset(position, offsetBy, i), scrollElement, i)) {
2085
1995
  if (isInScrollArea(position, scrollElement, i)) {
2086
1996
  continue;
2087
1997
  }
@@ -2090,26 +2000,27 @@
2090
2000
  return false;
2091
2001
  }
2092
2002
 
2093
- if (flip === true || includes(flip, dirs[1 - i][1])) {
2094
- const newPos = attachToWithFlip(element, target, {
2095
- ...options,
2096
- attach: {
2097
- element: elAttach.map(flipDir).reverse(),
2098
- target: targetAttach.map(flipDir).reverse() },
2003
+ const newPos = getPosition(element, target, {
2004
+ ...options,
2005
+ attach: {
2006
+ element: elAttach.map(flipAxis).reverse(),
2007
+ target: targetAttach.map(flipAxis).reverse() },
2099
2008
 
2100
- offset: elOffset.reverse(),
2101
- flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
2102
- recursion: true });
2009
+ offset: elOffset.reverse(),
2010
+ placement: placement.reverse(),
2011
+ recursion: true });
2103
2012
 
2104
2013
 
2105
- if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
2106
- return newPos;
2107
- }
2014
+ if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
2015
+ return newPos;
2108
2016
  }
2017
+
2018
+ continue;
2109
2019
  }
2110
2020
 
2111
- // Move
2112
- } else {
2021
+ // Shift
2022
+ } else if (placement[i] === 'shift') {
2023
+ const targetDim = offset(target[i]);
2113
2024
  offsetBy =
2114
2025
  clamp(
2115
2026
  clamp(position[start], viewport[start], viewport[end] - position[prop]),
@@ -2118,13 +2029,54 @@
2118
2029
  position[start];
2119
2030
  }
2120
2031
 
2121
- offsetPosition[start] = position[dir] = position[start] + offsetBy;
2122
- offsetPosition[end] += offsetBy;
2032
+ offsetPosition = applyOffset(offsetPosition, offsetBy, i);
2123
2033
  }
2124
2034
 
2125
2035
  return offsetPosition;
2126
2036
  }
2127
2037
 
2038
+ function attachTo(element, target, options) {
2039
+ let { attach, offset: offsetBy } = {
2040
+ attach: {
2041
+ element: ['left', 'top'],
2042
+ target: ['left', 'top'],
2043
+ ...options.attach },
2044
+
2045
+ offset: [0, 0],
2046
+ ...options };
2047
+
2048
+
2049
+ let elOffset = offset(element);
2050
+
2051
+ for (const [i, [prop,, start, end]] of Object.entries(dirs)) {
2052
+ const targetOffset =
2053
+ attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);
2054
+
2055
+ elOffset = applyOffset(
2056
+ elOffset,
2057
+ targetOffset[start] -
2058
+ elOffset[start] +
2059
+ moveBy(attach.target[i], end, targetOffset[prop]) -
2060
+ moveBy(attach.element[i], end, elOffset[prop]) +
2061
+ +offsetBy[i],
2062
+ i);
2063
+
2064
+ }
2065
+ return elOffset;
2066
+ }
2067
+
2068
+ function applyOffset(position, offset, i) {
2069
+ const [, dir, start, end] = dirs[i];
2070
+ const newPos = { ...position };
2071
+ newPos[start] = position[dir] = position[start] + offset;
2072
+ newPos[end] += offset;
2073
+ return newPos;
2074
+ }
2075
+
2076
+ function moveBy(attach, end, dim) {
2077
+ return attach === 'center' ? dim / 2 : attach === end ? dim : 0;
2078
+ }
2079
+
2128
2080
  function getIntersectionArea() {
2129
2081
  let area = {};for (var _len = arguments.length, rects = new Array(_len), _key = 0; _key < _len; _key++) {rects[_key] = arguments[_key];}
2130
2082
  for (const rect of rects) {
@@ -2145,12 +2097,32 @@
2145
2097
  return position[start] >= viewport[start] && position[end] <= viewport[end];
2146
2098
  }
2147
2099
 
2148
- function intersectLine(dimA, dimB, dir) {
2149
- const [,, start, end] = dirs[dir];
2150
- return dimA[end] > dimB[start] && dimB[end] > dimA[start];
2100
+ function flip(element, target, _ref, i) {let { offset, attach } = _ref;
2101
+ return attachTo(element, target, {
2102
+ attach: {
2103
+ element: flipAttach(attach.element, i),
2104
+ target: flipAttach(attach.target, i) },
2105
+
2106
+ offset: flipOffset(offset, i) });
2107
+
2108
+ }
2109
+
2110
+ function flipAttach(attach, i) {
2111
+ const newAttach = [...attach];
2112
+ const index = dirs[i].indexOf(attach[i]);
2113
+ if (~index) {
2114
+ newAttach[i] = dirs[i][1 - index % 2 + 2];
2115
+ }
2116
+ return newAttach;
2117
+ }
2118
+
2119
+ function flipOffset(offset, i) {
2120
+ offset = [...offset];
2121
+ offset[i] *= -1;
2122
+ return offset;
2151
2123
  }
2152
2124
 
2153
- function flipDir(prop) {
2125
+ function flipAxis(prop) {
2154
2126
  for (let i = 0; i < dirs.length; i++) {
2155
2127
  const index = dirs[i].indexOf(prop);
2156
2128
  if (~index) {
@@ -2165,7 +2137,7 @@
2165
2137
  getImage: getImage,
2166
2138
  transition: transition,
2167
2139
  Transition: Transition,
2168
- animate: animate$1,
2140
+ animate: animate$2,
2169
2141
  Animation: Animation,
2170
2142
  attr: attr,
2171
2143
  hasAttr: hasAttr,
@@ -2205,9 +2177,9 @@
2205
2177
  inBrowser: inBrowser,
2206
2178
  isRtl: isRtl,
2207
2179
  hasTouch: hasTouch,
2208
- pointerDown: pointerDown,
2209
- pointerMove: pointerMove,
2210
- pointerUp: pointerUp,
2180
+ pointerDown: pointerDown$1,
2181
+ pointerMove: pointerMove$1,
2182
+ pointerUp: pointerUp$1,
2211
2183
  pointerEnter: pointerEnter,
2212
2184
  pointerLeave: pointerLeave,
2213
2185
  pointerCancel: pointerCancel,
@@ -2295,10 +2267,8 @@
2295
2267
  findAll: findAll,
2296
2268
  escape: escape,
2297
2269
  css: css,
2298
- getCssVar: getCssVar,
2299
2270
  propName: propName,
2300
2271
  isInView: isInView,
2301
- scrollTop: scrollTop,
2302
2272
  scrollIntoView: scrollIntoView,
2303
2273
  scrolledOver: scrolledOver,
2304
2274
  scrollParents: scrollParents,
@@ -2621,7 +2591,7 @@
2621
2591
 
2622
2592
  value = props[key] === Boolean && value === '' ? true : coerce$1(props[key], value);
2623
2593
 
2624
- if (prop === 'target' && (!value || startsWith(value, '_'))) {
2594
+ if (prop === 'target' && startsWith(value, '_')) {
2625
2595
  continue;
2626
2596
  }
2627
2597
 
@@ -2632,7 +2602,7 @@
2632
2602
 
2633
2603
  for (const key in options) {
2634
2604
  const prop = camelize(key);
2635
- if (props[prop] !== undefined) {
2605
+ if (!isUndefined(props[prop])) {
2636
2606
  data$1[prop] = coerce$1(props[prop], options[key]);
2637
2607
  }
2638
2608
  }
@@ -2961,7 +2931,7 @@
2961
2931
  UIkit.data = '__uikit__';
2962
2932
  UIkit.prefix = 'uk-';
2963
2933
  UIkit.options = {};
2964
- UIkit.version = '3.14.4-dev.838f092aa';
2934
+ UIkit.version = '3.14.4-dev.8a6d8c5ed';
2965
2935
 
2966
2936
  globalAPI(UIkit);
2967
2937
  hooksAPI(UIkit);
@@ -3066,27 +3036,7 @@
3066
3036
  origin: false,
3067
3037
  transition: 'ease',
3068
3038
  clsEnter: 'uk-togglabe-enter',
3069
- clsLeave: 'uk-togglabe-leave',
3070
-
3071
- initProps: {
3072
- overflow: '',
3073
- maxHeight: '',
3074
- paddingTop: '',
3075
- paddingBottom: '',
3076
- marginTop: '',
3077
- marginBottom: '',
3078
- boxShadow: '' },
3079
-
3080
-
3081
- hideProps: {
3082
- overflow: 'hidden',
3083
- maxHeight: 0,
3084
- paddingTop: 0,
3085
- paddingBottom: 0,
3086
- marginTop: 0,
3087
- marginBottom: 0,
3088
- boxShadow: 'none' } },
3089
-
3039
+ clsLeave: 'uk-togglabe-leave' },
3090
3040
 
3091
3041
 
3092
3042
  computed: {
@@ -3095,7 +3045,7 @@
3095
3045
  },
3096
3046
 
3097
3047
  hasTransition(_ref2) {let { animation } = _ref2;
3098
- return startsWith(animation[0], 'slide');
3048
+ return ['slide', 'reveal'].some((transition) => startsWith(animation[0], transition));
3099
3049
  } },
3100
3050
 
3101
3051
 
@@ -3188,130 +3138,105 @@
3188
3138
  };
3189
3139
  }
3190
3140
 
3191
- function toggleTransition(cmp) {
3192
- switch (cmp.animation[0]) {
3193
- case 'slide-left':
3194
- return slideHorizontal(cmp);
3195
- case 'slide-right':
3196
- return slideHorizontal(cmp, true);}
3197
-
3198
- return slide$1(cmp);
3199
- }
3200
-
3201
- function slide$1(_ref4)
3202
-
3203
-
3141
+ function toggleTransition(cmp) {var _cmp$animation$;
3142
+ const [mode = 'reveal', startProp = 'top'] = ((_cmp$animation$ = cmp.animation[0]) == null ? void 0 : _cmp$animation$.split('-')) || [];
3204
3143
 
3144
+ const dirs = [
3145
+ ['left', 'right'],
3146
+ ['top', 'bottom']];
3205
3147
 
3148
+ const dir = dirs[includes(dirs[0], startProp) ? 0 : 1];
3149
+ const end = dir[1] === startProp;
3150
+ const props = ['width', 'height'];
3151
+ const dimProp = props[dirs.indexOf(dir)];
3152
+ const marginProp = "margin-" + dir[0];
3153
+ const marginStartProp = "margin-" + startProp;
3206
3154
 
3155
+ return async (el, show) => {
3156
+ let { duration, velocity, transition, _toggle } = cmp;
3207
3157
 
3158
+ let currentDim = dimensions$1(el)[dimProp];
3208
3159
 
3209
- {let { isToggled, duration, velocity, initProps, hideProps, transition, _toggle } = _ref4;
3210
- return (el, show) => {
3211
3160
  const inProgress = Transition.inProgress(el);
3212
- const inner =
3213
- !inProgress && el.hasChildNodes() ?
3214
- toFloat(css(el.firstElementChild, 'marginTop')) +
3215
- toFloat(css(el.lastElementChild, 'marginBottom')) :
3216
- 0;
3217
- const currentHeight = isVisible(el) ? toFloat(css(el, 'height')) + inner : 0;
3218
-
3219
- const props = inProgress ? css(el, Object.keys(initProps)) : show ? hideProps : initProps;
3220
-
3221
- Transition.cancel(el);
3161
+ await Transition.cancel(el);
3222
3162
 
3223
- if (!isToggled(el)) {
3163
+ if (show) {
3224
3164
  _toggle(el, true);
3225
3165
  }
3226
3166
 
3227
- css(el, 'maxHeight', '');
3228
-
3229
- // Update child components first
3230
- fastdom.flush();
3231
-
3232
- const endHeight = toFloat(css(el, 'height')) + inner;
3233
- duration = velocity * endHeight + duration;
3234
-
3235
- css(el, { ...props, maxHeight: currentHeight });
3236
-
3237
- return (
3238
- show ?
3239
- Transition.start(
3240
- el,
3241
- { ...initProps, overflow: 'hidden', maxHeight: endHeight },
3242
- duration * (1 - currentHeight / endHeight),
3243
- transition) :
3244
-
3245
- Transition.start(
3246
- el,
3247
- hideProps,
3248
- duration * (currentHeight / endHeight),
3249
- transition).
3250
- then(() => _toggle(el, false))).
3251
- then(() => css(el, initProps));
3252
- };
3253
- }
3254
-
3255
- function slideHorizontal(_ref5, right) {let { isToggled, duration, velocity, transition, _toggle } = _ref5;
3256
- return (el, show) => {
3257
- const visible = isVisible(el);
3258
- const marginLeft = toFloat(css(el, 'marginLeft'));
3259
-
3260
- Transition.cancel(el);
3261
-
3262
- const [scrollElement] = scrollParents(el);
3263
- css(scrollElement, 'overflowX', 'hidden');
3264
-
3265
- if (!isToggled(el)) {
3266
- _toggle(el, true);
3267
- }
3167
+ const prevProps = Object.fromEntries(
3168
+ [
3169
+ 'padding',
3170
+ 'border',
3171
+ 'width',
3172
+ 'height',
3173
+ 'overflowY',
3174
+ 'overflowX',
3175
+ marginProp,
3176
+ marginStartProp].
3177
+ map((key) => [key, el.style[key]]));
3178
+
3179
+
3180
+ const dim = dimensions$1(el);
3181
+ const currentMargin = toFloat(css(el, marginProp));
3182
+ const marginStart = toFloat(css(el, marginStartProp));
3183
+ const endDim = dim[dimProp] + marginStart;
3184
+
3185
+ if (!inProgress && !show) {
3186
+ currentDim += marginStart;
3187
+ }
3188
+
3189
+ const [wrapper] = wrapInner(el, '<div>');
3190
+ css(wrapper, {
3191
+ boxSizing: 'border-box',
3192
+ height: dim.height,
3193
+ width: dim.width,
3194
+ ...css(el, [
3195
+ 'overflow',
3196
+ 'padding',
3197
+ 'borderTop',
3198
+ 'borderRight',
3199
+ 'borderBottom',
3200
+ 'borderLeft',
3201
+ 'borderImage',
3202
+ marginStartProp]) });
3268
3203
 
3269
- const width = toFloat(css(el, 'width'));
3270
- duration = velocity * width + duration;
3271
3204
 
3272
- const percent = visible ? (width + marginLeft * (right ? -1 : 1)) / width * 100 : 0;
3273
- const offsetEl = offset(el);
3274
- const useClipPath = right ?
3275
- offsetEl.right < scrollElement.clientWidth :
3276
- Math.round(offsetEl.left) > 0;
3277
3205
 
3278
3206
  css(el, {
3279
- clipPath: useClipPath ?
3280
- right ? "polygon(0 0," +
3281
- percent + "% 0," + percent + "% 100%,0 100%)" : "polygon(" + (
3282
- 100 - percent) + "% 0,100% 0,100% 100%," + (100 - percent) + "% 100%)" :
3283
- '',
3284
- marginLeft: (100 - percent) * (right ? 1 : -1) / 100 * width });
3285
-
3207
+ padding: 0,
3208
+ border: 0,
3209
+ [marginStartProp]: 0,
3210
+ width: dim.width,
3211
+ height: dim.height,
3212
+ overflow: 'hidden',
3213
+ [dimProp]: currentDim });
3286
3214
 
3287
- return (
3288
- show ?
3289
- Transition.start(
3290
- el,
3291
- {
3292
- clipPath: useClipPath ? "polygon(0 0,100% 0,100% 100%,0 100%)" : '',
3293
- marginLeft: 0 },
3294
3215
 
3295
- duration * (1 - percent / 100),
3296
- transition) :
3216
+ const percent = currentDim / endDim;
3217
+ duration = (velocity * endDim + duration) * (show ? 1 - percent : percent);
3218
+ const endProps = { [dimProp]: show ? endDim : 0 };
3297
3219
 
3298
- Transition.start(
3299
- el,
3300
- {
3301
- clipPath: useClipPath ?
3302
- right ? "polygon(0 0,0 0,0 100%,0 100%)" : "polygon(100% 0,100% 0,100% 100%,100% 100%)" :
3220
+ if (end) {
3221
+ css(el, marginProp, endDim - currentDim + currentMargin);
3222
+ endProps[marginProp] = show ? currentMargin : endDim + currentMargin;
3223
+ }
3303
3224
 
3225
+ if (!end ^ mode === 'reveal') {
3226
+ css(wrapper, marginProp, -endDim + currentDim);
3227
+ Transition.start(wrapper, { [marginProp]: show ? 0 : -endDim }, duration, transition);
3228
+ }
3304
3229
 
3305
- '',
3306
- marginLeft: (right ? 1 : -1) * width },
3230
+ try {
3231
+ await Transition.start(el, endProps, duration, transition);
3232
+ } finally {
3233
+ css(el, prevProps);
3234
+ unwrap(wrapper.firstChild);
3307
3235
 
3308
- duration * (percent / 100),
3309
- transition).
3310
- then(() => _toggle(el, false))).
3311
- then(() => {
3312
- css(scrollElement, 'overflowX', '');
3313
- css(el, { clipPath: '', marginLeft: '' });
3314
- });
3236
+ if (!show) {
3237
+ _toggle(el, false);
3238
+ }
3239
+ }
3315
3240
  };
3316
3241
  }
3317
3242
 
@@ -3336,6 +3261,7 @@
3336
3261
  mixins: [Class, Lazyload, Togglable],
3337
3262
 
3338
3263
  props: {
3264
+ animation: Boolean,
3339
3265
  targets: String,
3340
3266
  active: null,
3341
3267
  collapsible: Boolean,
@@ -3348,7 +3274,7 @@
3348
3274
  data: {
3349
3275
  targets: '> *',
3350
3276
  active: false,
3351
- animation: ['slide'],
3277
+ animation: true,
3352
3278
  collapsible: true,
3353
3279
  multiple: false,
3354
3280
  clsOpen: 'uk-open',
@@ -3394,7 +3320,7 @@
3394
3320
  hide(
3395
3321
  el,
3396
3322
  !hasClass(
3397
- this.items.find((item) => item.contains(el)),
3323
+ this.items.find((item) => within(el, item)),
3398
3324
  this.clsOpen));
3399
3325
 
3400
3326
 
@@ -3446,23 +3372,15 @@
3446
3372
  toggleClass(el, this.clsOpen, show);
3447
3373
  attr($(this.$props.toggle, el), 'aria-expanded', show);
3448
3374
 
3449
- const content = $("" + (el._wrapper ? '> * ' : '') + this.content, el);
3375
+ const content = $(this.content, el);
3450
3376
 
3451
- if (animate === false || !this.hasTransition) {
3377
+ if (animate === false || !this.animation) {
3378
+ content.hidden = !show;
3452
3379
  hide(content, !show);
3453
3380
  return;
3454
3381
  }
3455
3382
 
3456
- if (!el._wrapper) {
3457
- el._wrapper = wrapAll(content, "<div" + (show ? ' hidden' : '') + ">");
3458
- }
3459
-
3460
- hide(content, false);
3461
- await slide$1(this)(el._wrapper, show);
3462
- hide(content, !show);
3463
-
3464
- delete el._wrapper;
3465
- unwrap(content);
3383
+ await toggleTransition(this)(content, show);
3466
3384
 
3467
3385
  if (show) {
3468
3386
  const toggle = $(this.$props.toggle, el);
@@ -3488,18 +3406,17 @@
3488
3406
  args: 'animation',
3489
3407
 
3490
3408
  props: {
3409
+ animation: Boolean,
3491
3410
  close: String },
3492
3411
 
3493
3412
 
3494
3413
  data: {
3495
- animation: ['slide'],
3414
+ animation: true,
3496
3415
  selClose: '.uk-alert-close',
3497
- duration: 150,
3498
- hideProps: { opacity: 0, ...Togglable.data.hideProps } },
3416
+ duration: 150 },
3499
3417
 
3500
3418
 
3501
- events: [
3502
- {
3419
+ events: {
3503
3420
  name: 'click',
3504
3421
 
3505
3422
  delegate() {
@@ -3509,16 +3426,39 @@
3509
3426
  handler(e) {
3510
3427
  e.preventDefault();
3511
3428
  this.close();
3512
- } }],
3513
-
3429
+ } },
3514
3430
 
3515
3431
 
3516
3432
  methods: {
3517
3433
  async close() {
3518
- await this.toggleElement(this.$el);
3434
+ await this.toggleElement(this.$el, false, animate$1(this));
3519
3435
  this.$destroy(true);
3520
3436
  } } };
3521
3437
 
3438
+
3439
+
3440
+ function animate$1(_ref) {let { duration, transition, velocity } = _ref;
3441
+ return (el) => {
3442
+ const height = toFloat(css(el, 'height'));
3443
+ css(el, 'height', height);
3444
+ return Transition.start(
3445
+ el,
3446
+ {
3447
+ height: 0,
3448
+ marginTop: 0,
3449
+ marginBottom: 0,
3450
+ paddingTop: 0,
3451
+ paddingBottom: 0,
3452
+ borderTop: 0,
3453
+ borderBottom: 0,
3454
+ opacity: 0 },
3455
+
3456
+ velocity * height + duration,
3457
+ transition);
3458
+
3459
+ };
3460
+ }
3461
+
3522
3462
  var Video = {
3523
3463
  args: 'autoplay',
3524
3464
 
@@ -3667,13 +3607,17 @@
3667
3607
  props: {
3668
3608
  pos: String,
3669
3609
  offset: null,
3670
- flip: Boolean },
3610
+ flip: Boolean,
3611
+ shift: Boolean,
3612
+ inset: Boolean },
3671
3613
 
3672
3614
 
3673
3615
  data: {
3674
3616
  pos: "bottom-" + (isRtl ? 'right' : 'left'),
3617
+ offset: false,
3675
3618
  flip: true,
3676
- offset: false },
3619
+ shift: true,
3620
+ inset: false },
3677
3621
 
3678
3622
 
3679
3623
  connected() {
@@ -3685,19 +3629,24 @@
3685
3629
  methods: {
3686
3630
  positionAt(element, target, boundary) {
3687
3631
  let offset = [this.getPositionOffset(element), this.getShiftOffset(element)];
3632
+ const placement = [this.flip && 'flip', this.shift && 'shift'];
3688
3633
 
3689
3634
  const attach = {
3690
- element: [flipPosition(this.dir), this.align],
3635
+ element: [this.inset ? this.dir : flipPosition(this.dir), this.align],
3691
3636
  target: [this.dir, this.align] };
3692
3637
 
3693
3638
 
3694
3639
  if (this.axis === 'y') {
3695
3640
  for (const prop in attach) {
3696
- attach[prop] = attach[prop].reverse();
3641
+ attach[prop].reverse();
3697
3642
  }
3698
- offset = offset.reverse();
3643
+ offset.reverse();
3644
+ placement.reverse();
3699
3645
  }
3700
3646
 
3647
+ const [scrollElement] = scrollParents(element, /auto|scroll/);
3648
+ const { scrollTop, scrollLeft } = scrollElement;
3649
+
3701
3650
  // Ensure none positioned element does not generate scrollbars
3702
3651
  const elDim = dimensions$1(element);
3703
3652
  css(element, { top: -elDim.height, left: -elDim.width });
@@ -3706,35 +3655,50 @@
3706
3655
  attach,
3707
3656
  offset,
3708
3657
  boundary,
3709
- flip: this.flip,
3658
+ placement,
3710
3659
  viewportOffset: this.getViewportOffset(element) });
3711
3660
 
3661
+
3662
+ // Restore scroll position
3663
+ scrollElement.scrollTop = scrollTop;
3664
+ scrollElement.scrollLeft = scrollLeft;
3712
3665
  },
3713
3666
 
3714
3667
  getPositionOffset(element) {
3715
3668
  return (
3716
3669
  toPx(
3717
- this.offset === false ? getCssVar('position-offset', element) : this.offset,
3670
+ this.offset === false ? css(element, '--uk-position-offset') : this.offset,
3718
3671
  this.axis === 'x' ? 'width' : 'height',
3719
3672
  element) * (
3720
- includes(['left', 'top'], this.dir) ? -1 : 1));
3673
+
3674
+ includes(['left', 'top'], this.dir) ? -1 : 1) * (
3675
+ this.inset ? -1 : 1));
3721
3676
 
3722
3677
  },
3723
3678
 
3724
3679
  getShiftOffset(element) {
3725
- return includes(['center', 'justify', 'stretch'], this.align) ?
3680
+ return this.align === 'center' ?
3726
3681
  0 :
3727
3682
  toPx(
3728
- getCssVar('position-shift-offset', element),
3683
+ css(element, '--uk-position-shift-offset'),
3729
3684
  this.axis === 'y' ? 'width' : 'height',
3730
3685
  element) * (
3731
3686
  includes(['left', 'top'], this.align) ? 1 : -1);
3732
3687
  },
3733
3688
 
3734
3689
  getViewportOffset(element) {
3735
- return toPx(getCssVar('position-viewport-offset', element));
3690
+ return toPx(css(element, '--uk-position-viewport-offset'));
3736
3691
  } } };
3737
3692
 
3693
+ var Style = {
3694
+ beforeConnect() {
3695
+ this._style = attr(this.$el, 'style');
3696
+ },
3697
+
3698
+ disconnected() {
3699
+ attr(this.$el, 'style', this._style);
3700
+ } };
3701
+
3738
3702
  const active$1 = [];
3739
3703
 
3740
3704
  var Modal = {
@@ -3837,15 +3801,15 @@
3837
3801
  this.$el,
3838
3802
  'hide',
3839
3803
  on(document, 'focusin', (e) => {
3840
- if (!within(e.target, this.panel)) {
3804
+ if (last(active$1) === this && !within(e.target, this.$el)) {
3841
3805
  this.$el.focus();
3842
3806
  }
3843
3807
  }));
3844
3808
 
3845
3809
 
3846
3810
  if (this.overlay) {
3847
- once(this.$el, 'hide', preventOverscroll(this.$el));
3848
- once(this.$el, 'hide', preventBackgroundScroll());
3811
+ once(this.$el, 'hidden', preventOverscroll(this.$el), { self: true });
3812
+ once(this.$el, 'hidden', preventBackgroundScroll(), { self: true });
3849
3813
  }
3850
3814
 
3851
3815
  if (this.stack) {
@@ -3858,7 +3822,7 @@
3858
3822
  once(
3859
3823
  this.$el,
3860
3824
  'hide',
3861
- on(document, pointerDown, (_ref3) => {let { target } = _ref3;
3825
+ on(document, pointerDown$1, (_ref3) => {let { target } = _ref3;
3862
3826
  if (
3863
3827
  last(active$1) !== this ||
3864
3828
  this.overlay && !within(target, this.$el) ||
@@ -3869,11 +3833,11 @@
3869
3833
 
3870
3834
  once(
3871
3835
  document,
3872
- pointerUp + " " + pointerCancel + " scroll",
3836
+ pointerUp$1 + " " + pointerCancel + " scroll",
3873
3837
  (_ref4) => {let { defaultPrevented, type, target: newTarget } = _ref4;
3874
3838
  if (
3875
3839
  !defaultPrevented &&
3876
- type === pointerUp &&
3840
+ type === pointerUp$1 &&
3877
3841
  target === newTarget)
3878
3842
  {
3879
3843
  this.hide();
@@ -3927,10 +3891,6 @@
3927
3891
  active$1.splice(active$1.indexOf(this), 1);
3928
3892
  }
3929
3893
 
3930
- if (!active$1.length) {
3931
- css(document.body, 'overflowY', '');
3932
- }
3933
-
3934
3894
  css(this.$el, 'zIndex', '');
3935
3895
 
3936
3896
  if (!active$1.some((modal) => modal.clsPage === this.clsPage)) {
@@ -4047,7 +4007,12 @@
4047
4007
  return () => events.forEach((fn) => fn());
4048
4008
  }
4049
4009
 
4010
+ let prevented;
4050
4011
  function preventBackgroundScroll() {
4012
+ if (prevented) {
4013
+ return noop;
4014
+ }
4015
+ prevented = true;
4051
4016
  const { body, documentElement } = document;
4052
4017
  css(body, {
4053
4018
  overflowY: width(window) > documentElement.clientWidth ? 'scroll' : '',
@@ -4055,6 +4020,7 @@
4055
4020
 
4056
4021
  css(documentElement, 'overflowY', 'hidden');
4057
4022
  return () => {
4023
+ prevented = false;
4058
4024
  css(documentElement, 'overflowY', '');
4059
4025
  css(body, { overflowY: '', touchAction: '' });
4060
4026
  };
@@ -4073,7 +4039,7 @@
4073
4039
  let active;
4074
4040
 
4075
4041
  var drop = {
4076
- mixins: [Container, Lazyload, Position, Togglable],
4042
+ mixins: [Container, Lazyload, Position, Style, Togglable],
4077
4043
 
4078
4044
  args: 'pos',
4079
4045
 
@@ -4081,7 +4047,10 @@
4081
4047
  mode: 'list',
4082
4048
  toggle: Boolean,
4083
4049
  boundary: Boolean,
4084
- boundaryAlign: Boolean,
4050
+ target: Boolean,
4051
+ targetX: Boolean,
4052
+ targetY: Boolean,
4053
+ stretch: Boolean,
4085
4054
  delayShow: Number,
4086
4055
  delayHide: Number,
4087
4056
  display: String,
@@ -4093,17 +4062,32 @@
4093
4062
  data: {
4094
4063
  mode: ['click', 'hover'],
4095
4064
  toggle: '- *',
4096
- boundary: true,
4097
- boundaryAlign: false,
4065
+ boundary: false,
4066
+ target: false,
4067
+ targetX: false,
4068
+ targetY: false,
4069
+ stretch: false,
4098
4070
  delayShow: 0,
4099
4071
  delayHide: 800,
4100
4072
  display: null,
4101
4073
  clsDrop: false,
4074
+ animateOut: false,
4075
+ bgScroll: true,
4102
4076
  animation: ['uk-animation-fade'],
4103
4077
  cls: 'uk-open',
4104
- container: false,
4105
- animateOut: false,
4106
- bgScroll: true },
4078
+ container: false },
4079
+
4080
+
4081
+ computed: {
4082
+ target(_ref, $el) {let { target, targetX, targetY } = _ref;
4083
+ targetX = targetX || target || this.targetEl;
4084
+ targetY = targetY || target || this.targetEl;
4085
+
4086
+ return [
4087
+ targetX === true ? window : query(targetX, $el),
4088
+ targetY === true ? window : query(targetY, $el)];
4089
+
4090
+ } },
4107
4091
 
4108
4092
 
4109
4093
  created() {
@@ -4117,13 +4101,13 @@
4117
4101
  connected() {
4118
4102
  addClass(this.$el, this.clsDrop);
4119
4103
 
4120
- if (this.toggle && !this.target) {
4121
- this.target = this.$create('toggle', query(this.toggle, this.$el), {
4104
+ if (this.toggle && !this.targetEl) {
4105
+ this.targetEl = this.$create('toggle', query(this.toggle, this.$el), {
4122
4106
  target: this.$el,
4123
4107
  mode: this.mode }).
4124
4108
  $el;
4125
- attr(this.target, 'aria-haspopup', true);
4126
- this.lazyload(this.target);
4109
+ attr(this.targetEl, 'aria-haspopup', true);
4110
+ this.lazyload(this.targetEl);
4127
4111
  }
4128
4112
  },
4129
4113
 
@@ -4154,7 +4138,7 @@
4154
4138
  return 'a[href^="#"]';
4155
4139
  },
4156
4140
 
4157
- handler(_ref) {let { defaultPrevented, current: { hash } } = _ref;
4141
+ handler(_ref2) {let { defaultPrevented, current: { hash } } = _ref2;
4158
4142
  if (!defaultPrevented && hash && !within(hash, this.$el)) {
4159
4143
  this.hide(false);
4160
4144
  }
@@ -4265,18 +4249,18 @@
4265
4249
  for (const handler of [
4266
4250
  on(
4267
4251
  document,
4268
- pointerDown,
4269
- (_ref2) => {let { target } = _ref2;return (
4252
+ pointerDown$1,
4253
+ (_ref3) => {let { target } = _ref3;return (
4270
4254
  !within(target, this.$el) &&
4271
4255
  once(
4272
4256
  document,
4273
- pointerUp + " " + pointerCancel + " scroll",
4274
- (_ref3) => {let { defaultPrevented, type, target: newTarget } = _ref3;
4257
+ pointerUp$1 + " " + pointerCancel + " scroll",
4258
+ (_ref4) => {let { defaultPrevented, type, target: newTarget } = _ref4;
4275
4259
  if (
4276
4260
  !defaultPrevented &&
4277
- type === pointerUp &&
4261
+ type === pointerUp$1 &&
4278
4262
  target === newTarget &&
4279
- !(this.target && within(target, this.target)))
4263
+ !(this.targetEl && within(target, this.targetEl)))
4280
4264
  {
4281
4265
  this.hide(false);
4282
4266
  }
@@ -4295,13 +4279,13 @@
4295
4279
  [] :
4296
4280
  [preventOverscroll(this.$el), preventBackgroundScroll()]),
4297
4281
 
4298
- ...(this.display === 'static' && this.align !== 'stretch' ?
4282
+ ...(this.display === 'static' ?
4299
4283
  [] :
4300
4284
  (() => {
4301
4285
  const handler = () => this.$emit();
4302
4286
  return [
4303
4287
  on(window, 'resize', handler),
4304
- on(document, 'scroll', handler, true),
4288
+ on([document, scrollParents(this.$el)], 'scroll', handler),
4305
4289
  (() => {
4306
4290
  const observer = observeResize(
4307
4291
  scrollParents(this.$el),
@@ -4330,7 +4314,7 @@
4330
4314
  {
4331
4315
  name: 'hide',
4332
4316
 
4333
- handler(_ref4) {let { target } = _ref4;
4317
+ handler(_ref5) {let { target } = _ref5;
4334
4318
  if (this.$el !== target) {
4335
4319
  active =
4336
4320
  active === null && within(target, this.$el) && this.isToggled() ?
@@ -4354,12 +4338,12 @@
4354
4338
 
4355
4339
 
4356
4340
  methods: {
4357
- show(target, delay) {if (target === void 0) {target = this.target;}if (delay === void 0) {delay = true;}
4358
- if (this.isToggled() && target && this.target && target !== this.target) {
4341
+ show(target, delay) {if (target === void 0) {target = this.targetEl;}if (delay === void 0) {delay = true;}
4342
+ if (this.isToggled() && target && this.targetEl && target !== this.targetEl) {
4359
4343
  this.hide(false, false);
4360
4344
  }
4361
4345
 
4362
- this.target = target;
4346
+ this.targetEl = target;
4363
4347
 
4364
4348
  this.clearTimers();
4365
4349
 
@@ -4422,60 +4406,69 @@
4422
4406
 
4423
4407
  position() {
4424
4408
  removeClass(this.$el, this.clsDrop + "-stack");
4425
- toggleClass(this.$el, this.clsDrop + "-boundary", this.boundaryAlign);
4426
- toggleClass(this.$el, this.clsDrop + "-stretch", this.align === 'stretch');
4409
+ attr(this.$el, 'style', this._style);
4427
4410
 
4428
- const boundary = query(this.boundary, this.$el);
4429
- const target = boundary && this.boundaryAlign ? boundary : this.target;
4430
- const [scrollParent] = scrollParents(
4431
- boundary && this.boundaryAlign ? boundary : this.$el);
4411
+ // Ensure none positioned element does not generate scrollbars
4412
+ this.$el.hidden = true;
4432
4413
 
4433
- const scrollParentOffset = offset(scrollParent);
4434
- const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
4414
+ const boundary = query(this.boundary, this.$el);
4415
+ const boundaryOffset = offsetViewport(boundary || window);
4416
+ const viewports = this.target.map((target) => offsetViewport(scrollParents(target)[0]));
4435
4417
  const viewportOffset = this.getViewportOffset(this.$el);
4436
4418
 
4437
- css(this.$el, 'maxWidth', '');
4438
- const maxWidth = scrollParentOffset.width - 2 * viewportOffset;
4419
+ const dirs = [
4420
+ [0, ['x', 'width', 'left', 'right']],
4421
+ [1, ['y', 'height', 'top', 'bottom']]];
4439
4422
 
4440
- if (this.align === 'justify') {
4441
- const prop = this.axis === 'y' ? 'width' : 'height';
4442
- css(
4443
- this.$el,
4444
- prop,
4445
- Math.min(
4446
- (boundary ? boundaryOffset : offset(this.target))[prop],
4447
- scrollParentOffset[prop] - 2 * viewportOffset));
4448
-
4449
-
4450
- } else if (this.align === 'stretch') {
4451
- this.flip = this.axis === 'y' ? 'x' : 'y';
4452
- this.display = 'static';
4453
-
4454
- const viewport = offsetViewport(scrollParent);
4455
- const targetDim = offset(target);
4456
- const elOffset = Math.abs(this.getPositionOffset(this.$el)) + viewportOffset;
4457
-
4458
- css(this.$el, {
4459
- width:
4460
- this.axis === 'y' ?
4461
- viewport.width :
4462
- (this.dir === 'left' ?
4463
- targetDim.left - viewport.left :
4464
- viewport.right - targetDim.right) - elOffset,
4465
- height:
4466
- this.axis === 'x' ?
4467
- viewport.height :
4468
- (this.dir === 'top' ?
4469
- targetDim.top - viewport.top :
4470
- viewport.bottom - targetDim.bottom) - elOffset });
4471
-
4472
- } else if (this.$el.offsetWidth > maxWidth) {
4423
+
4424
+ for (const [i, [axis, prop]] of dirs) {
4425
+ if (this.axis !== axis && includes([axis, true], this.stretch)) {
4426
+ css(this.$el, {
4427
+ [prop]: Math.min(
4428
+ boundaryOffset[prop],
4429
+ viewports[i][prop] - 2 * viewportOffset),
4430
+
4431
+ ["overflow-" + axis]: 'auto' });
4432
+
4433
+ }
4434
+ }
4435
+
4436
+ const maxWidth = viewports[0].width - 2 * viewportOffset;
4437
+
4438
+ if (this.$el.offsetWidth > maxWidth) {
4473
4439
  addClass(this.$el, this.clsDrop + "-stack");
4474
4440
  }
4475
4441
 
4476
4442
  css(this.$el, 'maxWidth', maxWidth);
4477
4443
 
4478
- this.positionAt(this.$el, target, boundary);
4444
+ this.$el.hidden = false;
4445
+
4446
+ this.positionAt(this.$el, this.target, boundary);
4447
+
4448
+ for (const [i, [axis, prop, start, end]] of dirs) {
4449
+ if (this.axis === axis && includes([axis, true], this.stretch)) {
4450
+ const positionOffset = Math.abs(this.getPositionOffset(this.$el));
4451
+ const targetOffset = offset(this.target[i]);
4452
+ const elOffset = offset(this.$el);
4453
+
4454
+ css(this.$el, {
4455
+ [prop]:
4456
+ (targetOffset[start] > elOffset[start] ?
4457
+ targetOffset[start] -
4458
+ Math.max(
4459
+ boundaryOffset[start],
4460
+ viewports[i][start] + viewportOffset) :
4461
+
4462
+ Math.min(
4463
+ boundaryOffset[end],
4464
+ viewports[i][end] - viewportOffset) -
4465
+ targetOffset[end]) - positionOffset,
4466
+ ["overflow-" + axis]: 'auto' });
4467
+
4468
+
4469
+ this.positionAt(this.$el, this.target, boundary);
4470
+ }
4471
+ }
4479
4472
  } } };
4480
4473
 
4481
4474
 
@@ -4972,8 +4965,11 @@
4972
4965
  let minHeight = '';
4973
4966
  const box = boxModelAdjust(this.$el, 'height', 'content-box');
4974
4967
 
4968
+ const { body, scrollingElement } = document;
4975
4969
  const [scrollElement] = scrollParents(this.$el, /auto|scroll/);
4976
- const { height: viewportHeight } = offsetViewport(scrollElement);
4970
+ const { height: viewportHeight } = offsetViewport(
4971
+ scrollElement === body ? scrollingElement : scrollElement);
4972
+
4977
4973
 
4978
4974
  if (this.expand) {
4979
4975
  minHeight = Math.max(
@@ -4983,14 +4979,19 @@
4983
4979
  0);
4984
4980
 
4985
4981
  } else {
4986
- // on mobile devices (iOS and Android) window.innerHeight !== 100vh
4987
- minHeight = "calc(" + (
4988
- document.scrollingElement === scrollElement ? '100vh' : viewportHeight + "px");
4982
+ const isScrollingElement =
4983
+ scrollingElement === scrollElement || body === scrollElement;
4989
4984
 
4985
+ // on mobile devices (iOS and Android) window.innerHeight !== 100vh
4986
+ minHeight = "calc(" + (isScrollingElement ? '100vh' : viewportHeight + "px");
4990
4987
 
4991
4988
  if (this.offsetTop) {
4992
- const top = offsetPosition(this.$el)[0] - offsetPosition(scrollElement)[0];
4993
- minHeight += top > 0 && top < viewportHeight / 2 ? " - " + top + "px" : '';
4989
+ if (isScrollingElement) {
4990
+ const top = offsetPosition(this.$el)[0] - offsetPosition(scrollElement)[0];
4991
+ minHeight += top > 0 && top < viewportHeight / 2 ? " - " + top + "px" : '';
4992
+ } else {
4993
+ minHeight += " - " + css(scrollElement, 'paddingTop');
4994
+ }
4994
4995
  }
4995
4996
 
4996
4997
  if (this.offsetBottom === true) {
@@ -5233,7 +5234,13 @@
5233
5234
 
5234
5235
  var marker = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"4\" width=\"1\" height=\"11\"/><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"/></svg>";
5235
5236
 
5236
- var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"9\" width=\"20\" height=\"2\"/><rect y=\"3\" width=\"20\" height=\"2\"/><rect y=\"15\" width=\"20\" height=\"2\"/></svg>";
5237
+ var navParentIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 3.5 6 8.5 11 3.5\"/></svg>";
5238
+
5239
+ var navParentIconLarge = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 4 7 10 13 4\"/></svg>";
5240
+
5241
+ var navbarParentIcon = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 3.5 6 8.5 11 3.5\"/></svg>";
5242
+
5243
+ var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><style>.uk-navbar-toggle svg > [class*='line-'] {\n transition: 0.2s ease-in-out;\n transition-property: transform, opacity,;\n transform-origin: center;\n opacity: 1;\n }\n\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-2 { transform: rotate(45deg); }\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-3 { transform: rotate(-45deg); }\n\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-1,\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-4 { opacity: 0; }\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-1 { transform: translateY(6px) scaleX(0); }\n .uk-navbar-toggle[aria-expanded=\"true\"] svg > .line-4 { transform: translateY(-6px) scaleX(0); }</style><rect class=\"line-1\" y=\"3\" width=\"20\" height=\"2\"/><rect class=\"line-2\" y=\"9\" width=\"20\" height=\"2\"/><rect class=\"line-3\" y=\"9\" width=\"20\" height=\"2\"/><rect class=\"line-4\" y=\"15\" width=\"20\" height=\"2\"/></svg>";
5237
5244
 
5238
5245
  var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>";
5239
5246
 
@@ -5265,6 +5272,9 @@
5265
5272
  marker,
5266
5273
  'close-icon': closeIcon,
5267
5274
  'close-large': closeLarge,
5275
+ 'nav-parent-icon': navParentIcon,
5276
+ 'nav-parent-icon-large': navParentIconLarge,
5277
+ 'navbar-parent-icon': navbarParentIcon,
5268
5278
  'navbar-toggle-icon': navbarToggleIcon,
5269
5279
  'overlay-icon': overlayIcon,
5270
5280
  'pagination-next': paginationNext,
@@ -5322,6 +5332,15 @@
5322
5332
  } };
5323
5333
 
5324
5334
 
5335
+ const NavParentIcon = {
5336
+ extends: IconComponent,
5337
+
5338
+ beforeConnect() {
5339
+ const icon = this.$props.icon;
5340
+ this.icon = closest(this.$el, '.uk-nav-primary') ? icon + "-large" : icon;
5341
+ } };
5342
+
5343
+
5325
5344
  const Slidenav = {
5326
5345
  extends: IconComponent,
5327
5346
 
@@ -5582,7 +5601,7 @@
5582
5601
 
5583
5602
 
5584
5603
  connected() {
5585
- const media = toMedia(this.media);
5604
+ const media = toMedia(this.media, this.$el);
5586
5605
  this.matchMedia = true;
5587
5606
  if (media) {
5588
5607
  this.mediaObj = window.matchMedia(media);
@@ -5603,11 +5622,10 @@
5603
5622
  } };
5604
5623
 
5605
5624
 
5606
- function toMedia(value) {
5625
+ function toMedia(value, element) {
5607
5626
  if (isString(value)) {
5608
5627
  if (startsWith(value, '@')) {
5609
- const name = "breakpoint-" + value.substr(1);
5610
- value = toFloat(getCssVar(name));
5628
+ value = toFloat(css(element, "--uk-breakpoint-" + value.substr(1)));
5611
5629
  } else if (isNaN(value)) {
5612
5630
  return value;
5613
5631
  }
@@ -5632,7 +5650,7 @@
5632
5650
 
5633
5651
  computed: {
5634
5652
  fill(_ref) {let { fill } = _ref;
5635
- return fill || getCssVar('leader-fill-content');
5653
+ return fill || css(this.$el, '--uk-leader-fill-content');
5636
5654
  } },
5637
5655
 
5638
5656
 
@@ -5824,7 +5842,9 @@
5824
5842
  align: String,
5825
5843
  offset: Number,
5826
5844
  boundary: Boolean,
5827
- boundaryAlign: Boolean,
5845
+ target: Boolean,
5846
+ targetX: Boolean,
5847
+ targetY: Boolean,
5828
5848
  clsDrop: String,
5829
5849
  delayShow: Number,
5830
5850
  delayHide: Number,
@@ -5841,9 +5861,12 @@
5841
5861
  offset: undefined,
5842
5862
  delayShow: undefined,
5843
5863
  delayHide: undefined,
5844
- boundaryAlign: undefined,
5845
- flip: 'x',
5864
+ flip: false,
5865
+ shift: true,
5846
5866
  boundary: true,
5867
+ target: false,
5868
+ targetX: false,
5869
+ targetY: false,
5847
5870
  dropbar: false,
5848
5871
  dropbarAnchor: false,
5849
5872
  duration: 200,
@@ -5878,7 +5901,7 @@
5878
5901
  },
5879
5902
 
5880
5903
  watch(dropbar) {
5881
- addClass(dropbar, 'uk-navbar-dropbar');
5904
+ addClass(dropbar, 'uk-dropbar', 'uk-dropbar-top', 'uk-navbar-dropbar');
5882
5905
  },
5883
5906
 
5884
5907
  immediate: true },
@@ -5894,7 +5917,7 @@
5894
5917
 
5895
5918
  if (this.dropContainer !== $el) {
5896
5919
  for (const el of $$("." + clsDrop, this.dropContainer)) {var _this$getDropdown;
5897
- const target = (_this$getDropdown = this.getDropdown(el)) == null ? void 0 : _this$getDropdown.target;
5920
+ const target = (_this$getDropdown = this.getDropdown(el)) == null ? void 0 : _this$getDropdown.targetEl;
5898
5921
  if (!includes(dropdowns, el) && target && within(target, this.$el)) {
5899
5922
  dropdowns.push(el);
5900
5923
  }
@@ -5911,8 +5934,7 @@
5911
5934
  {
5912
5935
  ...this.$props,
5913
5936
  boundary: this.boundary,
5914
- pos: this.pos,
5915
- offset: this.dropbar || this.offset });
5937
+ pos: this.pos });
5916
5938
 
5917
5939
 
5918
5940
  },
@@ -5957,8 +5979,8 @@
5957
5979
  if (
5958
5980
  active &&
5959
5981
  includes(active.mode, 'hover') &&
5960
- active.target &&
5961
- !within(active.target, current) &&
5982
+ active.targetEl &&
5983
+ !within(active.targetEl, current) &&
5962
5984
  !active.isDelaying)
5963
5985
  {
5964
5986
  active.hide(false);
@@ -5980,7 +6002,7 @@
5980
6002
  if (keyCode === keyMap.DOWN && hasAttr(current, 'aria-expanded')) {
5981
6003
  e.preventDefault();
5982
6004
 
5983
- if (!active || active.target !== current) {
6005
+ if (!active || active.targetEl !== current) {
5984
6006
  current.click();
5985
6007
  once(this.dropContainer, 'show', (_ref8) => {let { target } = _ref8;return (
5986
6008
  focusFirstFocusableElement(target));});
@@ -6030,8 +6052,8 @@
6030
6052
  }
6031
6053
  }
6032
6054
 
6033
- if (keyCode === keyMap.ESC) {var _active$target;
6034
- active == null ? void 0 : (_active$target = active.target) == null ? void 0 : _active$target.focus();
6055
+ if (keyCode === keyMap.ESC) {var _active$targetEl;
6056
+ active == null ? void 0 : (_active$targetEl = active.targetEl) == null ? void 0 : _active$targetEl.focus();
6035
6057
  }
6036
6058
 
6037
6059
  handleNavItemNavigation(e, this.toggles, active);
@@ -6073,8 +6095,8 @@
6073
6095
  return this.dropbar;
6074
6096
  },
6075
6097
 
6076
- handler(_, _ref9) {let { $el, align } = _ref9;
6077
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
6098
+ handler(_ref9) {let { target } = _ref9;
6099
+ if (!this.isDropbarDrop(target)) {
6078
6100
  return;
6079
6101
  }
6080
6102
 
@@ -6082,7 +6104,7 @@
6082
6104
  after(this.dropbarAnchor || this.$el, this.dropbar);
6083
6105
  }
6084
6106
 
6085
- addClass($el, this.clsDrop + "-dropbar");
6107
+ addClass(target, this.clsDrop + "-dropbar");
6086
6108
  } },
6087
6109
 
6088
6110
 
@@ -6097,19 +6119,24 @@
6097
6119
  return this.dropbar;
6098
6120
  },
6099
6121
 
6100
- handler(_, _ref10) {let { $el, align } = _ref10;
6101
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
6122
+ handler(_ref10) {let { target } = _ref10;
6123
+ if (!this.isDropbarDrop(target)) {
6102
6124
  return;
6103
6125
  }
6104
6126
 
6105
- this._observer = observeResize($el, () =>
6106
- this.transitionTo(
6107
- offset($el).bottom -
6108
- offset(this.dropbar).top +
6109
- toFloat(css($el, 'marginBottom')),
6110
- $el));
6111
-
6127
+ this._observer = observeResize(target, () => {
6128
+ const targetOffsets = parents(target, "." + this.clsDrop).
6129
+ concat(target).
6130
+ map((el) => offset(el));
6131
+ const minTop = Math.min(...targetOffsets.map((_ref11) => {let { top } = _ref11;return top;}));
6132
+ const maxBottom = Math.max(...targetOffsets.map((_ref12) => {let { bottom } = _ref12;return bottom;}));
6133
+ const dropbarOffset = offset(this.dropbar);
6134
+ css(this.dropbar, 'top', this.dropbar.offsetTop - (dropbarOffset.top - minTop));
6135
+ this.transitionTo(
6136
+ maxBottom - minTop + toFloat(css(target, 'marginBottom')),
6137
+ target);
6112
6138
 
6139
+ });
6113
6140
  } },
6114
6141
 
6115
6142
 
@@ -6124,13 +6151,13 @@
6124
6151
  return this.dropbar;
6125
6152
  },
6126
6153
 
6127
- handler(e, _ref11) {let { $el } = _ref11;
6154
+ handler(e) {
6128
6155
  const active = this.getActive();
6129
6156
 
6130
6157
  if (
6131
6158
  matches(this.dropbar, ':hover') &&
6132
- (active == null ? void 0 : active.$el) === $el &&
6133
- !this.toggles.some((el) => active.target !== el && matches(el, ':focus')))
6159
+ (active == null ? void 0 : active.$el) === e.target &&
6160
+ !this.toggles.some((el) => active.targetEl !== el && matches(el, ':focus')))
6134
6161
  {
6135
6162
  e.preventDefault();
6136
6163
  }
@@ -6148,8 +6175,8 @@
6148
6175
  return this.dropbar;
6149
6176
  },
6150
6177
 
6151
- handler(_, _ref12) {let { $el, align } = _ref12;
6152
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
6178
+ handler(_ref13) {let { target } = _ref13;
6179
+ if (!this.isDropbarDrop(target)) {
6153
6180
  return;
6154
6181
  }
6155
6182
 
@@ -6157,7 +6184,7 @@
6157
6184
 
6158
6185
  const active = this.getActive();
6159
6186
 
6160
- if (!active || (active == null ? void 0 : active.$el) === $el) {
6187
+ if (!active || (active == null ? void 0 : active.$el) === target) {
6161
6188
  this.transitionTo(0);
6162
6189
  }
6163
6190
  } }],
@@ -6166,7 +6193,7 @@
6166
6193
 
6167
6194
  methods: {
6168
6195
  getActive() {
6169
- return active && within(active.target, this.$el) && active;
6196
+ return active && within(active.targetEl, this.$el) && active;
6170
6197
  },
6171
6198
 
6172
6199
  transitionTo(newHeight, el) {
@@ -6196,13 +6223,17 @@
6196
6223
 
6197
6224
  getDropdown(el) {
6198
6225
  return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');
6226
+ },
6227
+
6228
+ isDropbarDrop(el) {
6229
+ return this.getDropdown(el) && hasClass(el, this.clsDrop);
6199
6230
  } } };
6200
6231
 
6201
6232
 
6202
6233
 
6203
6234
  function handleNavItemNavigation(e, toggles, active) {
6204
6235
  const { current, keyCode } = e;
6205
- const target = (active == null ? void 0 : active.target) || current;
6236
+ const target = (active == null ? void 0 : active.targetEl) || current;
6206
6237
  const i = toggles.indexOf(target);
6207
6238
 
6208
6239
  // Left
@@ -6259,7 +6290,7 @@
6259
6290
 
6260
6291
  registerEvent(this, {
6261
6292
  el: this.swipeTarget,
6262
- name: pointerDown,
6293
+ name: pointerDown$1,
6263
6294
  passive: true,
6264
6295
  handler(e) {
6265
6296
  if (!isTouch(e)) {
@@ -6269,7 +6300,7 @@
6269
6300
  // Handle Swipe Gesture
6270
6301
  const pos = getEventPos(e);
6271
6302
  const target = 'tagName' in e.target ? e.target : parent(e.target);
6272
- once(document, pointerUp + " " + pointerCancel + " scroll", (e) => {
6303
+ once(document, pointerUp$1 + " " + pointerCancel + " scroll", (e) => {
6273
6304
  const { x, y } = getEventPos(e);
6274
6305
 
6275
6306
  // swipe
@@ -6570,6 +6601,14 @@
6570
6601
  offset: 0 },
6571
6602
 
6572
6603
 
6604
+ connected() {
6605
+ registerClick(this);
6606
+ },
6607
+
6608
+ disconnected() {
6609
+ unregisterClick(this);
6610
+ },
6611
+
6573
6612
  methods: {
6574
6613
  async scrollTo(el) {
6575
6614
  el = el && $(el) || document.body;
@@ -6578,20 +6617,39 @@
6578
6617
  await scrollIntoView(el, { offset: this.offset });
6579
6618
  trigger(this.$el, 'scrolled', [this, el]);
6580
6619
  }
6581
- } },
6620
+ } } };
6582
6621
 
6583
6622
 
6584
- events: {
6585
- click(e) {
6586
- if (e.defaultPrevented) {
6587
- return;
6588
- }
6589
6623
 
6590
- e.preventDefault();
6591
- this.scrollTo(getTargetElement(this.$el));
6592
- } } };
6624
+ const components$2 = new Set();
6625
+ function registerClick(cmp) {
6626
+ if (!components$2.size) {
6627
+ on(document, 'click', clickHandler);
6628
+ }
6629
+
6630
+ components$2.add(cmp);
6631
+ }
6593
6632
 
6633
+ function unregisterClick(cmp) {
6634
+ components$2.delete(cmp);
6594
6635
 
6636
+ if (!components$2.length) {
6637
+ off(document, 'click', clickHandler);
6638
+ }
6639
+ }
6640
+
6641
+ function clickHandler(e) {
6642
+ if (e.defaultPrevented) {
6643
+ return;
6644
+ }
6645
+
6646
+ for (const component of components$2) {
6647
+ if (within(e.target, component.$el)) {
6648
+ e.preventDefault();
6649
+ component.scrollTo(getTargetElement(component.$el));
6650
+ }
6651
+ }
6652
+ }
6595
6653
 
6596
6654
  function getTargetElement(el) {
6597
6655
  return document.getElementById(decodeURIComponent(el.hash).substring(1));
@@ -6921,7 +6979,9 @@
6921
6979
  },
6922
6980
 
6923
6981
  handler() {
6924
- if (!location.hash || scrollTop(window) === 0) {
6982
+ const { scrollingElement } = document;
6983
+
6984
+ if (!location.hash || scrollingElement.scrollTop === 0) {
6925
6985
  return;
6926
6986
  }
6927
6987
 
@@ -6930,13 +6990,11 @@
6930
6990
  const elOffset = offset(this.$el);
6931
6991
 
6932
6992
  if (this.isFixed && intersectRect(targetOffset, elOffset)) {
6933
- scrollTop(
6934
- window,
6993
+ scrollingElement.scrollTop =
6935
6994
  targetOffset.top -
6936
6995
  elOffset.height -
6937
6996
  toPx(this.targetOffset, 'height', this.placeholder) -
6938
- toPx(this.offset, 'height', this.placeholder));
6939
-
6997
+ toPx(this.offset, 'height', this.placeholder);
6940
6998
  }
6941
6999
  });
6942
7000
  } }],
@@ -7034,7 +7092,7 @@
7034
7092
 
7035
7093
 
7036
7094
  {let { scroll: prevScroll = 0, dir: prevDir = 'down', overflow, overflowScroll = 0, start, end } = _ref4;
7037
- const scroll = scrollTop(window);
7095
+ const scroll = document.scrollingElement.scrollTop;
7038
7096
  const dir = prevScroll <= scroll ? 'down' : 'up';
7039
7097
 
7040
7098
  return {
@@ -7443,7 +7501,7 @@
7443
7501
 
7444
7502
  events: [
7445
7503
  {
7446
- name: pointerDown,
7504
+ name: pointerDown$1,
7447
7505
 
7448
7506
  filter() {
7449
7507
  return includes(this.mode, 'hover');
@@ -7461,7 +7519,7 @@
7461
7519
  trigger(this.$el, 'focus');
7462
7520
  once(
7463
7521
  document,
7464
- pointerDown,
7522
+ pointerDown$1,
7465
7523
  () => trigger(this.$el, 'blur'),
7466
7524
  true,
7467
7525
  (e) => !within(e.target, this.$el));
@@ -7554,7 +7612,7 @@
7554
7612
 
7555
7613
 
7556
7614
  {
7557
- name: 'toggled',
7615
+ name: 'hide show',
7558
7616
 
7559
7617
  self: true,
7560
7618
 
@@ -7562,10 +7620,8 @@
7562
7620
  return this.target;
7563
7621
  },
7564
7622
 
7565
- handler(e, toggled) {
7566
- if (e.target === this.target[0]) {
7567
- this.updateAria(toggled);
7568
- }
7623
+ handler(_ref2) {let { type } = _ref2;
7624
+ this.updateAria(type === 'show');
7569
7625
  } },
7570
7626
 
7571
7627
 
@@ -7660,10 +7716,12 @@
7660
7716
  Video: Video,
7661
7717
  Close: Close,
7662
7718
  Spinner: Spinner,
7719
+ NavParentIcon: NavParentIcon,
7663
7720
  SlidenavNext: Slidenav,
7664
7721
  SlidenavPrevious: Slidenav,
7665
7722
  SearchIcon: Search,
7666
7723
  Marker: IconComponent,
7724
+ NavbarParentIcon: IconComponent,
7667
7725
  NavbarToggleIcon: IconComponent,
7668
7726
  OverlayIcon: IconComponent,
7669
7727
  PaginationNext: IconComponent,
@@ -8153,7 +8211,7 @@
8153
8211
 
8154
8212
  },
8155
8213
 
8156
- setState(state, animate) {if (animate === void 0) {animate = true;}
8214
+ async setState(state, animate) {if (animate === void 0) {animate = true;}
8157
8215
  state = { filter: { '': '' }, sort: [], ...state };
8158
8216
 
8159
8217
  trigger(this.$el, 'beforeFilter', [this, state]);
@@ -8162,15 +8220,17 @@
8162
8220
  toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state)));
8163
8221
 
8164
8222
 
8165
- Promise.all(
8223
+ await Promise.all(
8166
8224
  $$(this.target, this.$el).map((target) => {
8167
8225
  const filterFn = () => {
8168
8226
  applyState(state, target, children(target));
8169
8227
  this.$update(this.$el);
8170
8228
  };
8171
8229
  return animate ? this.animate(filterFn, target) : filterFn();
8172
- })).
8173
- then(() => trigger(this.$el, 'afterFilter', [this]));
8230
+ }));
8231
+
8232
+
8233
+ trigger(this.$el, 'afterFilter', [this]);
8174
8234
  },
8175
8235
 
8176
8236
  updateState() {
@@ -8460,6 +8520,11 @@
8460
8520
  this.interval && clearInterval(this.interval);
8461
8521
  } } };
8462
8522
 
8523
+ const pointerOptions = { passive: false, capture: true };
8524
+ const pointerDown = 'touchstart mousedown';
8525
+ const pointerMove = 'touchmove mousemove';
8526
+ const pointerUp = 'touchend touchcancel mouseup click input';
8527
+
8463
8528
  var SliderDrag = {
8464
8529
  props: {
8465
8530
  draggable: Boolean },
@@ -8512,7 +8577,17 @@
8512
8577
 
8513
8578
  handler(e) {
8514
8579
  e.preventDefault();
8515
- } }],
8580
+ } },
8581
+
8582
+
8583
+ {
8584
+ // iOS workaround for slider stopping if swiping fast
8585
+ name: pointerMove + " " + pointerUp,
8586
+ el() {
8587
+ return this.list;
8588
+ },
8589
+ handler: noop,
8590
+ ...pointerOptions }],
8516
8591
 
8517
8592
 
8518
8593
 
@@ -8534,10 +8609,10 @@
8534
8609
  this.prevIndex = this.index;
8535
8610
  }
8536
8611
 
8537
- on(document, pointerMove, this.move, { passive: false });
8612
+ on(document, pointerMove, this.move, pointerOptions);
8538
8613
 
8539
8614
  // 'input' event is triggered by video controls
8540
- on(document, pointerUp + " " + pointerCancel + " input", this.end, true);
8615
+ on(document, pointerUp, this.end, pointerOptions);
8541
8616
 
8542
8617
  css(this.list, 'userSelect', 'none');
8543
8618
  },
@@ -8617,8 +8692,8 @@
8617
8692
  },
8618
8693
 
8619
8694
  end() {
8620
- off(document, pointerMove, this.move, { passive: false });
8621
- off(document, pointerUp + " " + pointerCancel + " input", this.end, true);
8695
+ off(document, pointerMove, this.move, pointerOptions);
8696
+ off(document, pointerUp, this.end, pointerOptions);
8622
8697
 
8623
8698
  if (this.dragging) {
8624
8699
  this.dragging = null;
@@ -9026,7 +9101,7 @@
9026
9101
 
9027
9102
  events: [
9028
9103
  {
9029
- name: pointerMove + " " + pointerDown + " keydown",
9104
+ name: pointerMove$1 + " " + pointerDown$1 + " keydown",
9030
9105
 
9031
9106
  handler: 'showControls' },
9032
9107
 
@@ -10681,7 +10756,7 @@
10681
10756
  },
10682
10757
 
10683
10758
  events: {
10684
- name: pointerDown,
10759
+ name: pointerDown$1,
10685
10760
  passive: false,
10686
10761
  handler: 'init' },
10687
10762
 
@@ -10811,8 +10886,8 @@
10811
10886
  this.placeholder = placeholder;
10812
10887
  this.origin = { target, index: index(placeholder), ...this.pos };
10813
10888
 
10814
- on(document, pointerMove, this.move);
10815
- on(document, pointerUp, this.end);
10889
+ on(document, pointerMove$1, this.move);
10890
+ on(document, pointerUp$1, this.end);
10816
10891
 
10817
10892
  if (!this.threshold) {
10818
10893
  this.start(e);
@@ -10848,8 +10923,8 @@
10848
10923
  },
10849
10924
 
10850
10925
  end() {
10851
- off(document, pointerMove, this.move);
10852
- off(document, pointerUp, this.end);
10926
+ off(document, pointerMove$1, this.move);
10927
+ off(document, pointerUp$1, this.end);
10853
10928
 
10854
10929
  if (!this.drag) {
10855
10930
  return;
@@ -10918,7 +10993,7 @@
10918
10993
  let last = Date.now();
10919
10994
  trackTimer = setInterval(() => {
10920
10995
  let { x, y } = pos;
10921
- y += scrollTop(window);
10996
+ y += document.scrollingElement.scrollTop;
10922
10997
 
10923
10998
  const dist = (Date.now() - last) * 0.3;
10924
10999
  last = Date.now();
@@ -10939,7 +11014,7 @@
10939
11014
  }
10940
11015
 
10941
11016
  if (scroll > 0 && scroll < scrollHeight - height) {
10942
- scrollTop(scrollEl, scroll);
11017
+ scrollEl.scrollTop = scroll;
10943
11018
  return true;
10944
11019
  }
10945
11020
  });
@@ -11084,11 +11159,11 @@
11084
11159
 
11085
11160
  this._unbind = once(
11086
11161
  document, "show keydown " +
11087
- pointerDown,
11162
+ pointerDown$1,
11088
11163
  this.hide,
11089
11164
  false,
11090
11165
  (e) =>
11091
- e.type === pointerDown && !within(e.target, this.$el) ||
11166
+ e.type === pointerDown$1 && !within(e.target, this.$el) ||
11092
11167
  e.type === 'keydown' && e.keyCode === 27 ||
11093
11168
  e.type === 'show' && e.detail[0] !== this && e.detail[0].$name === this.$name);
11094
11169
 
@@ -11159,7 +11234,7 @@
11159
11234
 
11160
11235
  // Clicking a button does not give it focus on all browsers and platforms
11161
11236
  // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus
11162
- [pointerDown](e) {
11237
+ [pointerDown$1](e) {
11163
11238
  if (isTouch(e)) {
11164
11239
  this.show();
11165
11240
  }