uikit 3.17.12-dev.f1425d280 → 3.18.1-dev.0856bd8a6

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 (260) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/css/uikit-core-rtl.css +577 -504
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +577 -504
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +600 -527
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +600 -527
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +2 -4
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +96 -60
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +96 -60
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +11 -6
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +8 -3
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +735 -37
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +8 -3
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +792 -129
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +7 -7
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +2 -8
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +299 -273
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +9 -4
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +505 -365
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +3 -3
  43. package/src/images/components/navbar-toggle-icon.svg +1 -1
  44. package/src/images/icons/arrow-up-right.svg +4 -0
  45. package/src/images/icons/git-branch.svg +4 -4
  46. package/src/images/icons/git-fork.svg +4 -4
  47. package/src/images/icons/link-external.svg +5 -0
  48. package/src/images/icons/signal.svg +3 -0
  49. package/src/images/icons/telegram.svg +3 -0
  50. package/src/images/icons/threads.svg +3 -0
  51. package/src/images/icons/x.svg +3 -0
  52. package/src/js/components/countdown.js +1 -3
  53. package/src/js/components/internal/slider-preload.js +6 -0
  54. package/src/js/components/lightbox-panel.js +2 -6
  55. package/src/js/components/parallax.js +1 -20
  56. package/src/js/components/slider.js +38 -18
  57. package/src/js/components/slideshow.js +14 -46
  58. package/src/js/components/sortable.js +7 -6
  59. package/src/js/components/tooltip.js +1 -7
  60. package/src/js/core/accordion.js +1 -1
  61. package/src/js/core/drop.js +3 -5
  62. package/src/js/core/dropnav.js +24 -20
  63. package/src/js/core/height-match.js +7 -3
  64. package/src/js/core/height-placeholder.js +32 -0
  65. package/src/js/core/icon.js +12 -5
  66. package/src/js/core/index.js +2 -0
  67. package/src/js/core/inverse.js +103 -0
  68. package/src/js/core/modal.js +13 -0
  69. package/src/js/core/navbar.js +32 -172
  70. package/src/js/core/responsive.js +2 -29
  71. package/src/js/core/sticky.js +45 -29
  72. package/src/js/core/video.js +5 -1
  73. package/src/js/mixin/modal.js +1 -1
  74. package/src/js/mixin/parallax.js +19 -0
  75. package/src/js/mixin/slider-autoplay.js +1 -3
  76. package/src/js/mixin/slider-drag.js +22 -19
  77. package/src/js/mixin/slider-nav.js +10 -1
  78. package/src/js/mixin/slider-parallax.js +138 -0
  79. package/src/js/mixin/slider-reactive.js +1 -1
  80. package/src/js/mixin/slider.js +25 -3
  81. package/src/js/util/animation.js +14 -14
  82. package/src/js/util/dom.js +2 -2
  83. package/src/js/util/mouse.js +8 -11
  84. package/src/js/util/scroll.js +58 -0
  85. package/src/js/util/selector.js +4 -2
  86. package/src/js/util/style.js +3 -3
  87. package/src/js/util/viewport.js +8 -4
  88. package/src/less/components/align.less +2 -2
  89. package/src/less/components/animation.less +2 -2
  90. package/src/less/components/article.less +2 -2
  91. package/src/less/components/base.less +3 -3
  92. package/src/less/components/card.less +13 -6
  93. package/src/less/components/column.less +3 -3
  94. package/src/less/components/container.less +3 -3
  95. package/src/less/components/divider.less +2 -2
  96. package/src/less/components/dropbar.less +1 -1
  97. package/src/less/components/dropdown.less +1 -1
  98. package/src/less/components/dropnav.less +1 -1
  99. package/src/less/components/form.less +1 -1
  100. package/src/less/components/grid.less +3 -3
  101. package/src/less/components/height.less +1 -1
  102. package/src/less/components/icon.less +3 -3
  103. package/src/less/components/inverse.less +12 -0
  104. package/src/less/components/link.less +1 -1
  105. package/src/less/components/modal.less +3 -3
  106. package/src/less/components/nav.less +66 -0
  107. package/src/less/components/navbar.less +7 -11
  108. package/src/less/components/overlay.less +5 -0
  109. package/src/less/components/position.less +7 -7
  110. package/src/less/components/section.less +6 -5
  111. package/src/less/components/sticky.less +1 -1
  112. package/src/less/components/svg.less +3 -3
  113. package/src/less/components/tile.less +10 -0
  114. package/src/less/components/transition.less +9 -9
  115. package/src/less/components/utility.less +4 -4
  116. package/src/less/components/width.less +7 -7
  117. package/src/less/theme/alert.less +1 -1
  118. package/src/less/theme/align.less +1 -1
  119. package/src/less/theme/animation.less +1 -1
  120. package/src/less/theme/article.less +1 -1
  121. package/src/less/theme/background.less +1 -1
  122. package/src/less/theme/badge.less +1 -1
  123. package/src/less/theme/base.less +1 -1
  124. package/src/less/theme/breadcrumb.less +1 -1
  125. package/src/less/theme/button.less +1 -1
  126. package/src/less/theme/card.less +1 -1
  127. package/src/less/theme/close.less +1 -1
  128. package/src/less/theme/column.less +1 -1
  129. package/src/less/theme/comment.less +1 -1
  130. package/src/less/theme/container.less +1 -1
  131. package/src/less/theme/description-list.less +1 -1
  132. package/src/less/theme/divider.less +1 -1
  133. package/src/less/theme/dotnav.less +1 -1
  134. package/src/less/theme/drop.less +1 -1
  135. package/src/less/theme/dropbar.less +1 -1
  136. package/src/less/theme/dropdown.less +1 -1
  137. package/src/less/theme/form-range.less +1 -1
  138. package/src/less/theme/height.less +1 -1
  139. package/src/less/theme/icon.less +1 -1
  140. package/src/less/theme/iconnav.less +1 -1
  141. package/src/less/theme/inverse.less +1 -1
  142. package/src/less/theme/label.less +1 -1
  143. package/src/less/theme/leader.less +1 -1
  144. package/src/less/theme/lightbox.less +1 -1
  145. package/src/less/theme/margin.less +1 -1
  146. package/src/less/theme/modal.less +1 -1
  147. package/src/less/theme/nav.less +1 -1
  148. package/src/less/theme/navbar.less +3 -3
  149. package/src/less/theme/notification.less +1 -1
  150. package/src/less/theme/offcanvas.less +1 -1
  151. package/src/less/theme/overlay.less +1 -1
  152. package/src/less/theme/padding.less +1 -1
  153. package/src/less/theme/pagination.less +1 -1
  154. package/src/less/theme/position.less +1 -1
  155. package/src/less/theme/search.less +1 -1
  156. package/src/less/theme/spinner.less +1 -1
  157. package/src/less/theme/sticky.less +1 -1
  158. package/src/less/theme/tab.less +2 -2
  159. package/src/less/theme/table.less +1 -1
  160. package/src/less/theme/thumbnav.less +1 -1
  161. package/src/less/theme/tile.less +1 -1
  162. package/src/less/theme/tooltip.less +1 -1
  163. package/src/less/theme/totop.less +1 -1
  164. package/src/less/theme/transition.less +1 -1
  165. package/src/less/theme/utility.less +1 -1
  166. package/src/less/theme/variables.less +1 -1
  167. package/src/less/theme/width.less +1 -1
  168. package/src/less/uikit.less +1 -1
  169. package/src/scss/components/align.scss +2 -2
  170. package/src/scss/components/animation.scss +2 -2
  171. package/src/scss/components/base.scss +2 -2
  172. package/src/scss/components/card.scss +12 -6
  173. package/src/scss/components/column.scss +3 -3
  174. package/src/scss/components/container.scss +3 -3
  175. package/src/scss/components/divider.scss +2 -2
  176. package/src/scss/components/dropnav.scss +1 -1
  177. package/src/scss/components/form.scss +1 -1
  178. package/src/scss/components/grid.scss +3 -3
  179. package/src/scss/components/height.scss +1 -1
  180. package/src/scss/components/icon.scss +3 -3
  181. package/src/scss/components/inverse.scss +12 -0
  182. package/src/scss/components/modal.scss +3 -3
  183. package/src/scss/components/nav.scss +63 -0
  184. package/src/scss/components/navbar.scss +5 -8
  185. package/src/scss/components/overlay.scss +4 -0
  186. package/src/scss/components/position.scss +7 -7
  187. package/src/scss/components/section.scss +6 -5
  188. package/src/scss/components/sticky.scss +1 -1
  189. package/src/scss/components/svg.scss +3 -3
  190. package/src/scss/components/tile.scss +8 -0
  191. package/src/scss/components/transition.scss +9 -9
  192. package/src/scss/components/utility.scss +4 -4
  193. package/src/scss/components/width.scss +7 -7
  194. package/src/scss/mixins-theme.scss +10 -7
  195. package/src/scss/mixins.scss +7 -4
  196. package/src/scss/theme/alert.scss +1 -0
  197. package/src/scss/theme/align.scss +1 -1
  198. package/src/scss/theme/animation.scss +1 -1
  199. package/src/scss/theme/article.scss +1 -1
  200. package/src/scss/theme/background.scss +1 -1
  201. package/src/scss/theme/badge.scss +1 -1
  202. package/src/scss/theme/base.scss +1 -1
  203. package/src/scss/theme/breadcrumb.scss +1 -1
  204. package/src/scss/theme/button.scss +1 -1
  205. package/src/scss/theme/card.scss +1 -0
  206. package/src/scss/theme/close.scss +1 -1
  207. package/src/scss/theme/column.scss +1 -1
  208. package/src/scss/theme/comment.scss +1 -1
  209. package/src/scss/theme/container.scss +1 -1
  210. package/src/scss/theme/description-list.scss +1 -1
  211. package/src/scss/theme/divider.scss +1 -1
  212. package/src/scss/theme/dotnav.scss +1 -0
  213. package/src/scss/theme/drop.scss +1 -1
  214. package/src/scss/theme/dropbar.scss +1 -1
  215. package/src/scss/theme/dropdown.scss +1 -1
  216. package/src/scss/theme/form-range.scss +1 -1
  217. package/src/scss/theme/height.scss +1 -1
  218. package/src/scss/theme/icon.scss +1 -1
  219. package/src/scss/theme/iconnav.scss +1 -1
  220. package/src/scss/theme/inverse.scss +1 -1
  221. package/src/scss/theme/label.scss +1 -1
  222. package/src/scss/theme/leader.scss +1 -1
  223. package/src/scss/theme/lightbox.scss +1 -1
  224. package/src/scss/theme/margin.scss +1 -1
  225. package/src/scss/theme/modal.scss +1 -0
  226. package/src/scss/theme/nav.scss +1 -1
  227. package/src/scss/theme/navbar.scss +1 -1
  228. package/src/scss/theme/notification.scss +1 -1
  229. package/src/scss/theme/offcanvas.scss +1 -1
  230. package/src/scss/theme/overlay.scss +1 -1
  231. package/src/scss/theme/padding.scss +1 -1
  232. package/src/scss/theme/pagination.scss +1 -1
  233. package/src/scss/theme/position.scss +1 -1
  234. package/src/scss/theme/search.scss +1 -1
  235. package/src/scss/theme/spinner.scss +1 -1
  236. package/src/scss/theme/sticky.scss +1 -1
  237. package/src/scss/theme/tab.scss +1 -1
  238. package/src/scss/theme/table.scss +1 -0
  239. package/src/scss/theme/thumbnav.scss +1 -1
  240. package/src/scss/theme/tile.scss +1 -1
  241. package/src/scss/theme/tooltip.scss +1 -1
  242. package/src/scss/theme/totop.scss +1 -1
  243. package/src/scss/theme/transition.scss +1 -1
  244. package/src/scss/theme/utility.scss +1 -1
  245. package/src/scss/theme/variables.scss +1 -1
  246. package/src/scss/theme/width.scss +1 -1
  247. package/src/scss/uikit.scss +1 -1
  248. package/src/scss/variables-theme.scss +20 -5
  249. package/src/scss/variables.scss +20 -5
  250. package/tests/height.html +58 -1
  251. package/tests/icon.html +38 -10
  252. package/tests/nav.html +42 -0
  253. package/tests/navbar.html +1 -1
  254. package/tests/offcanvas.html +8 -8
  255. package/tests/search.html +300 -202
  256. package/tests/slider.html +58 -0
  257. package/tests/slideshow.html +66 -0
  258. package/tests/sticky-navbar.html +381 -23
  259. package/src/images/icons/pagekit.svg +0 -3
  260. package/src/js/mixin/internal/scroll.js +0 -39
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.17.12-dev.f1425d280 | https://www.getuikit.com | (c) 2014 - 2024 YOOtheme | MIT License */
1
+ /*! UIkit 3.18.1-dev.0856bd8a6 | https://www.getuikit.com | (c) 2014 - 2024 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -245,7 +245,7 @@
245
245
  }
246
246
  }
247
247
  }
248
- function removeClasses$1(element, clsRegex) {
248
+ function removeClasses(element, clsRegex) {
249
249
  clsRegex = new RegExp(clsRegex);
250
250
  for (const node of toNodes(element)) {
251
251
  node.classList.remove(...toArray(node.classList).filter((cls) => cls.match(clsRegex)));
@@ -402,7 +402,9 @@
402
402
  selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
403
403
  }
404
404
  }
405
- context = document;
405
+ if (!isDocument(context)) {
406
+ context = context.ownerDocument;
407
+ }
406
408
  }
407
409
  try {
408
410
  return context[queryFn](selector);
@@ -410,7 +412,7 @@
410
412
  return null;
411
413
  }
412
414
  }
413
- const selectorRe = /.*?[^\\](?:,|$)/g;
415
+ const selectorRe = /.*?[^\\](?![^(]*\))(?:,|$)/g;
414
416
  const splitSelector = memoize(
415
417
  (selector) => selector.match(selectorRe).map((selector2) => selector2.replace(/,$/, "").trim())
416
418
  );
@@ -576,8 +578,9 @@
576
578
  }
577
579
  return props;
578
580
  } else if (isObject(property)) {
579
- priority = value;
580
- each(property, (value2, property2) => css(element2, property2, value2, priority));
581
+ for (const prop in property) {
582
+ css(element2, prop, property[prop], value);
583
+ }
581
584
  }
582
585
  }
583
586
  return elements[0];
@@ -601,8 +604,8 @@
601
604
  }
602
605
 
603
606
  const clsTransition = "uk-transition";
604
- const clsTransitionEnd = "transitionend";
605
- const clsTransitionCanceled = "transitioncanceled";
607
+ const transitionEnd = "transitionend";
608
+ const transitionCanceled = "transitioncanceled";
606
609
  function transition$1(element, props, duration = 400, timing = "linear") {
607
610
  duration = Math.round(duration);
608
611
  return Promise.all(
@@ -614,10 +617,10 @@
614
617
  css(element2, name, value);
615
618
  }
616
619
  }
617
- const timer = setTimeout(() => trigger(element2, clsTransitionEnd), duration);
620
+ const timer = setTimeout(() => trigger(element2, transitionEnd), duration);
618
621
  once(
619
622
  element2,
620
- [clsTransitionEnd, clsTransitionCanceled],
623
+ [transitionEnd, transitionCanceled],
621
624
  ({ type }) => {
622
625
  clearTimeout(timer);
623
626
  removeClass(element2, clsTransition);
@@ -626,7 +629,7 @@
626
629
  transitionDuration: "",
627
630
  transitionTimingFunction: ""
628
631
  });
629
- type === clsTransitionCanceled ? reject() : resolve(element2);
632
+ type === transitionCanceled ? reject() : resolve(element2);
630
633
  },
631
634
  { self: true }
632
635
  );
@@ -644,11 +647,11 @@
644
647
  const Transition = {
645
648
  start: transition$1,
646
649
  async stop(element) {
647
- trigger(element, clsTransitionEnd);
650
+ trigger(element, transitionEnd);
648
651
  await Promise.resolve();
649
652
  },
650
653
  async cancel(element) {
651
- trigger(element, clsTransitionCanceled);
654
+ trigger(element, transitionCanceled);
652
655
  await Promise.resolve();
653
656
  },
654
657
  inProgress(element) {
@@ -656,22 +659,22 @@
656
659
  }
657
660
  };
658
661
  const animationPrefix = "uk-animation-";
659
- const clsAnimationEnd = "animationend";
660
- const clsAnimationCanceled = "animationcanceled";
662
+ const animationEnd = "animationend";
663
+ const animationCanceled = "animationcanceled";
661
664
  function animate$2(element, animation, duration = 200, origin, out) {
662
665
  return Promise.all(
663
666
  toNodes(element).map(
664
667
  (element2) => new Promise((resolve, reject) => {
665
- trigger(element2, clsAnimationCanceled);
666
- const timer = setTimeout(() => trigger(element2, clsAnimationEnd), duration);
668
+ trigger(element2, animationCanceled);
669
+ const timer = setTimeout(() => trigger(element2, animationEnd), duration);
667
670
  once(
668
671
  element2,
669
- [clsAnimationEnd, clsAnimationCanceled],
672
+ [animationEnd, animationCanceled],
670
673
  ({ type }) => {
671
674
  clearTimeout(timer);
672
- type === clsAnimationCanceled ? reject() : resolve(element2);
675
+ type === animationCanceled ? reject() : resolve(element2);
673
676
  css(element2, "animationDuration", "");
674
- removeClasses$1(element2, `${animationPrefix}\\S*`);
677
+ removeClasses(element2, `${animationPrefix}\\S*`);
675
678
  },
676
679
  { self: true }
677
680
  );
@@ -695,7 +698,7 @@
695
698
  return inProgressRe.test(attr(element, "class"));
696
699
  },
697
700
  cancel(element) {
698
- trigger(element, clsAnimationCanceled);
701
+ trigger(element, animationCanceled);
699
702
  }
700
703
  };
701
704
 
@@ -737,8 +740,8 @@
737
740
  }
738
741
  function wrapAll(element, structure) {
739
742
  structure = toNode(before(element, structure));
740
- while (structure.firstChild) {
741
- structure = structure.firstChild;
743
+ while (structure.firstElementChild) {
744
+ structure = structure.firstElementChild;
742
745
  }
743
746
  append(structure, element);
744
747
  return structure;
@@ -1005,10 +1008,7 @@
1005
1008
  return ~index && array.splice(index, 1);
1006
1009
  }
1007
1010
 
1008
- function MouseTracker() {
1009
- }
1010
- MouseTracker.prototype = {
1011
- positions: [],
1011
+ class MouseTracker {
1012
1012
  init() {
1013
1013
  this.positions = [];
1014
1014
  let position;
@@ -1022,17 +1022,17 @@
1022
1022
  this.positions.shift();
1023
1023
  }
1024
1024
  }, 50);
1025
- },
1025
+ }
1026
1026
  cancel() {
1027
1027
  var _a;
1028
1028
  (_a = this.unbind) == null ? void 0 : _a.call(this);
1029
1029
  clearInterval(this.interval);
1030
- },
1030
+ }
1031
1031
  movesTo(target) {
1032
- if (this.positions.length < 2) {
1032
+ if (!this.positions || this.positions.length < 2) {
1033
1033
  return false;
1034
1034
  }
1035
- const p = target.getBoundingClientRect();
1035
+ const p = dimensions$1(target);
1036
1036
  const { left, right, top, bottom } = p;
1037
1037
  const [prevPosition] = this.positions;
1038
1038
  const position = last(this.positions);
@@ -1055,7 +1055,7 @@
1055
1055
  return intersection && pointInRect(intersection, p);
1056
1056
  });
1057
1057
  }
1058
- };
1058
+ }
1059
1059
  function intersect([{ x: x1, y: y1 }, { x: x2, y: y2 }], [{ x: x3, y: y3 }, { x: x4, y: y4 }]) {
1060
1060
  const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
1061
1061
  if (denominator === 0) {
@@ -1268,7 +1268,7 @@
1268
1268
  const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
1269
1269
  const start = Math.max(0, elementOffsetTop - viewportHeight + startOffset);
1270
1270
  const end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset);
1271
- return clamp((scrollTop - start) / (end - start));
1271
+ return start < end ? clamp((scrollTop - start) / (end - start)) : 1;
1272
1272
  }
1273
1273
  function scrollParents(element, scrollable = false, props = []) {
1274
1274
  const scrollEl = scrollingElement(element);
@@ -1308,7 +1308,7 @@
1308
1308
  ["height", "y", "top", "bottom"]
1309
1309
  ]) {
1310
1310
  if (isWindow(viewportElement)) {
1311
- viewportElement = window.document.documentElement;
1311
+ viewportElement = scrollElement.ownerDocument;
1312
1312
  } else {
1313
1313
  rect[start] += toFloat(css(viewportElement, `border-${start}-width`));
1314
1314
  }
@@ -1319,8 +1319,10 @@
1319
1319
  return rect;
1320
1320
  }
1321
1321
  function getCoveringElement(target) {
1322
- return target.ownerDocument.elementsFromPoint(offset(target).left, 0).find(
1323
- (el) => !el.contains(target) && (hasPosition(el, "fixed") && zIndex(
1322
+ const { left, width, top } = dimensions$1(target);
1323
+ return target.ownerDocument.elementsFromPoint(left + width / 2, top).find(
1324
+ (el) => !el.contains(target) && // If e.g. Offcanvas is not yet closed
1325
+ !hasClass(el, "uk-togglable-leave") && (hasPosition(el, "fixed") && zIndex(
1324
1326
  parents(target).reverse().find((parent2) => !parent2.contains(el) && !hasPosition(parent2, "static"))
1325
1327
  ) < zIndex(el) || hasPosition(el, "sticky") && parent(el).contains(target))
1326
1328
  );
@@ -1628,7 +1630,7 @@
1628
1630
  remove: remove$1,
1629
1631
  removeAttr: removeAttr,
1630
1632
  removeClass: removeClass,
1631
- removeClasses: removeClasses$1,
1633
+ removeClasses: removeClasses,
1632
1634
  replaceClass: replaceClass,
1633
1635
  scrollIntoView: scrollIntoView,
1634
1636
  scrollParent: scrollParent,
@@ -1690,9 +1692,7 @@
1690
1692
  },
1691
1693
  events: {
1692
1694
  name: "visibilitychange",
1693
- el() {
1694
- return document;
1695
- },
1695
+ el: () => document,
1696
1696
  handler() {
1697
1697
  if (document.hidden) {
1698
1698
  this.stop();
@@ -2435,36 +2435,36 @@
2435
2435
  return $("a,button", el) || el;
2436
2436
  }
2437
2437
 
2438
- var Container = {
2439
- props: {
2440
- container: Boolean
2441
- },
2442
- data: {
2443
- container: true
2444
- },
2445
- computed: {
2446
- container({ container }) {
2447
- return container === true && this.$container || container && $(container);
2448
- }
2449
- }
2450
- };
2451
-
2452
2438
  let prevented;
2453
2439
  function preventBackgroundScroll(el) {
2454
- const off = on(
2455
- el,
2456
- "touchmove",
2457
- (e) => {
2458
- if (e.targetTouches.length !== 1 || matches(e.target, 'input[type="range"')) {
2459
- return;
2460
- }
2461
- let { scrollHeight, clientHeight, scrollWidth, clientWidth } = scrollParent(e.target);
2462
- if (e.cancelable && clientHeight >= scrollHeight && clientWidth >= scrollWidth) {
2463
- e.preventDefault();
2464
- }
2465
- },
2466
- { passive: false }
2467
- );
2440
+ const off = on(el, "touchstart", (e) => {
2441
+ if (e.targetTouches.length !== 1 || matches(e.target, 'input[type="range"')) {
2442
+ return;
2443
+ }
2444
+ let prev = getEventPos(e).y;
2445
+ const offMove = on(
2446
+ el,
2447
+ "touchmove",
2448
+ (e2) => {
2449
+ const pos = getEventPos(e2).y;
2450
+ if (pos === prev) {
2451
+ return;
2452
+ }
2453
+ prev = pos;
2454
+ if (!scrollParents(e2.target).some((scrollParent) => {
2455
+ if (!el.contains(scrollParent)) {
2456
+ return false;
2457
+ }
2458
+ let { scrollHeight, clientHeight } = scrollParent;
2459
+ return clientHeight < scrollHeight;
2460
+ })) {
2461
+ e2.preventDefault();
2462
+ }
2463
+ },
2464
+ { passive: false }
2465
+ );
2466
+ once(el, "scroll touchend touchcanel", offMove, { capture: true });
2467
+ });
2468
2468
  if (prevented) {
2469
2469
  return off;
2470
2470
  }
@@ -2482,6 +2482,20 @@
2482
2482
  };
2483
2483
  }
2484
2484
 
2485
+ var Container = {
2486
+ props: {
2487
+ container: Boolean
2488
+ },
2489
+ data: {
2490
+ container: true
2491
+ },
2492
+ computed: {
2493
+ container({ container }) {
2494
+ return container === true && this.$container || container && $(container);
2495
+ }
2496
+ }
2497
+ };
2498
+
2485
2499
  var Togglable = {
2486
2500
  props: {
2487
2501
  cls: Boolean,
@@ -2999,9 +3013,7 @@
2999
3013
  events: [
3000
3014
  {
3001
3015
  name: "visibilitychange",
3002
- el() {
3003
- return document;
3004
- },
3016
+ el: () => document,
3005
3017
  filter() {
3006
3018
  return this.autoplay;
3007
3019
  },
@@ -3034,6 +3046,7 @@
3034
3046
  const pointerDown = "touchstart mousedown";
3035
3047
  const pointerMove = "touchmove mousemove";
3036
3048
  const pointerUp = "touchend touchcancel mouseup click input scroll";
3049
+ const preventClick = (e) => e.preventDefault();
3037
3050
  var SliderDrag = {
3038
3051
  props: {
3039
3052
  draggable: Boolean
@@ -3061,7 +3074,7 @@
3061
3074
  return `${this.selList} > *`;
3062
3075
  },
3063
3076
  handler(e) {
3064
- if (!this.draggable || !isTouch(e) && hasSelectableText(e.target) || e.target.closest(selInput) || e.button > 0 || this.length < 2) {
3077
+ if (!this.draggable || this.parallax || !isTouch(e) && hasSelectableText(e.target) || e.target.closest(selInput) || e.button > 0 || this.length < 2) {
3065
3078
  return;
3066
3079
  }
3067
3080
  this.start(e);
@@ -3105,20 +3118,22 @@
3105
3118
  if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {
3106
3119
  return;
3107
3120
  }
3108
- css(this.list, "pointerEvents", "none");
3121
+ if (!this.dragging) {
3122
+ on(this.list, "click", preventClick, pointerOptions);
3123
+ }
3109
3124
  e.cancelable && e.preventDefault();
3110
3125
  this.dragging = true;
3111
3126
  this.dir = distance < 0 ? 1 : -1;
3112
3127
  let { slides, prevIndex } = this;
3113
3128
  let dis = Math.abs(distance);
3114
3129
  let nextIndex = this.getIndex(prevIndex + this.dir);
3115
- let width = this._getDistance(prevIndex, nextIndex);
3130
+ let width = getDistance.call(this, prevIndex, nextIndex);
3116
3131
  while (nextIndex !== prevIndex && dis > width) {
3117
3132
  this.drag -= width * this.dir;
3118
3133
  prevIndex = nextIndex;
3119
3134
  dis -= width;
3120
3135
  nextIndex = this.getIndex(prevIndex + this.dir);
3121
- width = this._getDistance(prevIndex, nextIndex);
3136
+ width = getDistance.call(this, prevIndex, nextIndex);
3122
3137
  }
3123
3138
  this.percent = dis / width;
3124
3139
  const prev = slides[prevIndex];
@@ -3141,14 +3156,14 @@
3141
3156
  if (changed) {
3142
3157
  this.prevIndex = prevIndex;
3143
3158
  this.index = nextIndex;
3144
- !edge && trigger(prev, "beforeitemhide", [this]);
3159
+ if (!edge) {
3160
+ trigger(prev, "beforeitemhide", [this]);
3161
+ trigger(prev, "itemhide", [this]);
3162
+ }
3145
3163
  trigger(next, "beforeitemshow", [this]);
3146
- }
3147
- this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
3148
- if (changed) {
3149
- !edge && trigger(prev, "itemhide", [this]);
3150
3164
  trigger(next, "itemshow", [this]);
3151
3165
  }
3166
+ this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
3152
3167
  },
3153
3168
  end() {
3154
3169
  off(document, pointerMove, this.move, pointerOptions);
@@ -3172,14 +3187,15 @@
3172
3187
  );
3173
3188
  }
3174
3189
  }
3175
- css(this.list, { userSelect: "", pointerEvents: "" });
3190
+ setTimeout(() => off(this.list, "click", preventClick, pointerOptions));
3191
+ css(this.list, { userSelect: "" });
3176
3192
  this.drag = this.percent = null;
3177
- },
3178
- _getDistance(prev, next) {
3179
- return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth;
3180
3193
  }
3181
3194
  }
3182
3195
  };
3196
+ function getDistance(prev, next) {
3197
+ return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth;
3198
+ }
3183
3199
  function hasSelectableText(el) {
3184
3200
  return css(el, "userSelect") !== "none" && toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim());
3185
3201
  }
@@ -3514,7 +3530,7 @@
3514
3530
  };
3515
3531
  App.util = util;
3516
3532
  App.options = {};
3517
- App.version = "3.17.12-dev.f1425d280";
3533
+ App.version = "3.18.1-dev.0856bd8a6";
3518
3534
 
3519
3535
  const PREFIX = "uk-";
3520
3536
  const DATA = "__uikit__";
@@ -3782,6 +3798,9 @@
3782
3798
  delegate() {
3783
3799
  return this.selNavItem;
3784
3800
  },
3801
+ filter() {
3802
+ return !this.parallax;
3803
+ },
3785
3804
  handler(e) {
3786
3805
  if (e.target.closest("a,button") && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
3787
3806
  e.preventDefault();
@@ -3798,6 +3817,9 @@
3798
3817
  delegate() {
3799
3818
  return this.selNavItem;
3800
3819
  },
3820
+ filter() {
3821
+ return !this.parallax;
3822
+ },
3801
3823
  handler(e) {
3802
3824
  const { current, keyCode } = e;
3803
3825
  const cmd = data(current, this.attrItem);
@@ -3822,9 +3844,10 @@
3822
3844
  const item = toNumber(cmd);
3823
3845
  const active = item === index;
3824
3846
  toggleClass(el, this.clsActive, active);
3847
+ toggleClass(button, "uk-disabled", this.parallax);
3825
3848
  attr(button, {
3826
3849
  "aria-selected": active,
3827
- tabindex: active ? null : -1
3850
+ tabindex: active && !this.parallax ? null : -1
3828
3851
  });
3829
3852
  if (active && button && matches(parent(el), ":focus-within")) {
3830
3853
  button.focus();
@@ -3844,7 +3867,7 @@
3844
3867
  var Slider = {
3845
3868
  mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n],
3846
3869
  props: {
3847
- clsActivated: Boolean,
3870
+ clsActivated: String,
3848
3871
  easing: String,
3849
3872
  index: Number,
3850
3873
  finite: Boolean,
@@ -3859,7 +3882,10 @@
3859
3882
  stack: [],
3860
3883
  percent: 0,
3861
3884
  clsActive: "uk-active",
3862
- clsActivated: false,
3885
+ clsActivated: "",
3886
+ clsEnter: "uk-slide-enter",
3887
+ clsLeave: "uk-slide-leave",
3888
+ clsSlideActive: "uk-slide-active",
3863
3889
  Transitioner: false,
3864
3890
  transitionOptions: {}
3865
3891
  }),
@@ -3892,10 +3918,24 @@
3892
3918
  }
3893
3919
  },
3894
3920
  observe: resize(),
3921
+ events: {
3922
+ itemshow({ target }) {
3923
+ addClass(target, this.clsEnter, this.clsSlideActive);
3924
+ },
3925
+ itemshown({ target }) {
3926
+ removeClass(target, this.clsEnter);
3927
+ },
3928
+ itemhide({ target }) {
3929
+ addClass(target, this.clsLeave);
3930
+ },
3931
+ itemhidden({ target }) {
3932
+ removeClass(target, this.clsLeave, this.clsSlideActive);
3933
+ }
3934
+ },
3895
3935
  methods: {
3896
3936
  show(index, force = false) {
3897
3937
  var _a;
3898
- if (this.dragging || !this.length) {
3938
+ if (this.dragging || !this.length || this.parallax) {
3899
3939
  return;
3900
3940
  }
3901
3941
  const { stack } = this;
@@ -4110,9 +4150,7 @@
4110
4150
  {
4111
4151
  name: "shown",
4112
4152
  self: true,
4113
- handler() {
4114
- this.showControls();
4115
- }
4153
+ handler: "showControls"
4116
4154
  },
4117
4155
  {
4118
4156
  name: "hide",
@@ -4132,9 +4170,7 @@
4132
4170
  },
4133
4171
  {
4134
4172
  name: "keyup",
4135
- el() {
4136
- return document;
4137
- },
4173
+ el: () => document,
4138
4174
  handler({ keyCode }) {
4139
4175
  if (!this.isToggled(this.$el) || !this.draggable) {
4140
4176
  return;
@@ -4803,6 +4839,9 @@
4803
4839
  return data;
4804
4840
  }, {});
4805
4841
  }
4842
+ function ease(percent, easing) {
4843
+ return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
4844
+ }
4806
4845
 
4807
4846
  var parallax = {
4808
4847
  mixins: [Parallax],
@@ -4868,17 +4907,122 @@
4868
4907
  events: ["scroll", "resize"]
4869
4908
  }
4870
4909
  };
4871
- function ease(percent, easing) {
4872
- return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
4873
- }
4874
4910
  function getOffsetElement(el) {
4875
4911
  return el ? "offsetTop" in el ? el : getOffsetElement(parent(el)) : document.documentElement;
4876
4912
  }
4877
4913
 
4914
+ var SliderParallax = {
4915
+ props: {
4916
+ parallax: Boolean,
4917
+ parallaxTarget: Boolean,
4918
+ parallaxStart: String,
4919
+ parallaxEnd: String,
4920
+ parallaxEasing: Number
4921
+ },
4922
+ data: {
4923
+ parallax: false,
4924
+ parallaxTarget: false,
4925
+ parallaxStart: 0,
4926
+ parallaxEnd: 0,
4927
+ parallaxEasing: 0
4928
+ },
4929
+ observe: [
4930
+ resize({
4931
+ target: ({ $el, parallaxTarget }) => [$el, parallaxTarget],
4932
+ filter: ({ parallax }) => parallax
4933
+ }),
4934
+ scroll$1({ filter: ({ parallax }) => parallax })
4935
+ ],
4936
+ computed: {
4937
+ parallaxTarget({ parallaxTarget }, $el) {
4938
+ return parallaxTarget && query(parallaxTarget, $el) || this.list;
4939
+ }
4940
+ },
4941
+ update: {
4942
+ write() {
4943
+ if (!this.parallax) {
4944
+ return;
4945
+ }
4946
+ const target = this.parallaxTarget;
4947
+ const start = toPx(this.parallaxStart, "height", target, true);
4948
+ const end = toPx(this.parallaxEnd, "height", target, true);
4949
+ const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
4950
+ const [prevIndex, slidePercent] = this.getIndexAt(percent);
4951
+ const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
4952
+ const prev = this.slides[prevIndex];
4953
+ const next = this.slides[nextIndex];
4954
+ const { triggerShow, triggerShown, triggerHide, triggerHidden } = useTriggers(this);
4955
+ if (~this.prevIndex) {
4956
+ for (const i of /* @__PURE__ */ new Set([this.index, this.prevIndex])) {
4957
+ if (!includes([nextIndex, prevIndex], i)) {
4958
+ triggerHide(this.slides[i]);
4959
+ triggerHidden(this.slides[i]);
4960
+ }
4961
+ }
4962
+ }
4963
+ const changed = this.prevIndex !== prevIndex || this.index !== nextIndex;
4964
+ this.dir = 1;
4965
+ this.prevIndex = prevIndex;
4966
+ this.index = nextIndex;
4967
+ if (prev !== next) {
4968
+ triggerHide(prev);
4969
+ }
4970
+ triggerShow(next);
4971
+ if (changed) {
4972
+ triggerShown(prev);
4973
+ }
4974
+ this._translate(prev === next ? 1 : slidePercent, prev, next);
4975
+ },
4976
+ events: ["scroll", "resize"]
4977
+ },
4978
+ methods: {
4979
+ getIndexAt(percent) {
4980
+ const index = percent * (this.length - 1);
4981
+ return [Math.floor(index), index % 1];
4982
+ }
4983
+ }
4984
+ };
4985
+ function useTriggers(cmp) {
4986
+ const { clsSlideActive, clsEnter, clsLeave } = cmp;
4987
+ return { triggerShow, triggerShown, triggerHide, triggerHidden };
4988
+ function triggerShow(el) {
4989
+ if (hasClass(el, clsLeave)) {
4990
+ triggerHide(el);
4991
+ triggerHidden(el);
4992
+ }
4993
+ if (!hasClass(el, clsSlideActive)) {
4994
+ trigger(el, "beforeitemshow", [cmp]);
4995
+ trigger(el, "itemshow", [cmp]);
4996
+ }
4997
+ }
4998
+ function triggerShown(el) {
4999
+ if (hasClass(el, clsEnter)) {
5000
+ trigger(el, "itemshown", [cmp]);
5001
+ }
5002
+ }
5003
+ function triggerHide(el) {
5004
+ if (!hasClass(el, clsSlideActive)) {
5005
+ triggerShow(el);
5006
+ }
5007
+ if (hasClass(el, clsEnter)) {
5008
+ triggerShown(el);
5009
+ }
5010
+ if (!hasClass(el, clsLeave)) {
5011
+ trigger(el, "beforeitemhide", [cmp]);
5012
+ trigger(el, "itemhide", [cmp]);
5013
+ }
5014
+ }
5015
+ function triggerHidden(el) {
5016
+ if (hasClass(el, clsLeave)) {
5017
+ trigger(el, "itemhidden", [cmp]);
5018
+ }
5019
+ }
5020
+ }
5021
+
4878
5022
  var SliderReactive = {
4879
5023
  update: {
4880
5024
  write() {
4881
- if (this.stack.length || this.dragging) {
5025
+ if (this.stack.length || this.dragging || this.parallax) {
4882
5026
  return;
4883
5027
  }
4884
5028
  const index = this.getValidIndex();
@@ -4896,7 +5040,12 @@
4896
5040
  observe: lazyload({
4897
5041
  target: ({ slides }) => slides,
4898
5042
  targets: (instance) => instance.getAdjacentSlides()
4899
- })
5043
+ }),
5044
+ methods: {
5045
+ getAdjacentSlides() {
5046
+ return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]);
5047
+ }
5048
+ }
4900
5049
  };
4901
5050
 
4902
5051
  function Transitioner(prev, next, dir, { center, easing, list }) {
@@ -5020,7 +5169,7 @@
5020
5169
  }
5021
5170
 
5022
5171
  var slider = {
5023
- mixins: [Class, Slider, SliderReactive, SliderPreload],
5172
+ mixins: [Class, Slider, SliderReactive, SliderParallax, SliderPreload],
5024
5173
  props: {
5025
5174
  center: Boolean,
5026
5175
  sets: Boolean
@@ -5035,9 +5184,6 @@
5035
5184
  Transitioner
5036
5185
  },
5037
5186
  computed: {
5038
- avgWidth() {
5039
- return getWidth(this.list) / this.length;
5040
- },
5041
5187
  finite({ finite }) {
5042
5188
  return finite || isFinite(this.list, this.center);
5043
5189
  },
@@ -5059,7 +5205,7 @@
5059
5205
  return ~index ? index : this.length - 1;
5060
5206
  },
5061
5207
  sets({ sets: enabled }) {
5062
- if (!enabled) {
5208
+ if (!enabled || this.parallax) {
5063
5209
  return;
5064
5210
  }
5065
5211
  let left = 0;
@@ -5071,7 +5217,7 @@
5071
5217
  left = 0;
5072
5218
  }
5073
5219
  if (this.center) {
5074
- if (left < width / 2 && left + slideWidth + dimensions$1(getIndex(+i + 1, this.slides)).width / 2 > width / 2) {
5220
+ if (left < width / 2 && left + slideWidth + dimensions$1(this.slides[getIndex(+i + 1, this.slides)]).width / 2 > width / 2) {
5075
5221
  sets.push(+i);
5076
5222
  left = width / 2 - slideWidth / 2;
5077
5223
  }
@@ -5108,10 +5254,7 @@
5108
5254
  el.hidden = !this.maxIndex || index > this.maxIndex || this.sets && !includes(this.sets, index);
5109
5255
  }
5110
5256
  }
5111
- if (this.length && !this.dragging && !this.stack.length) {
5112
- this.reorder();
5113
- this._translate(1);
5114
- }
5257
+ this.reorder();
5115
5258
  this.updateActiveClasses();
5116
5259
  },
5117
5260
  events: ["resize"]
@@ -5132,13 +5275,15 @@
5132
5275
  return;
5133
5276
  }
5134
5277
  const index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex;
5135
- this.duration = speedUp(this.avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / this.avgWidth);
5278
+ const avgWidth = getWidth(this.list) / this.length;
5279
+ this.duration = speedUp(avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / avgWidth);
5136
5280
  this.reorder();
5137
5281
  },
5138
5282
  itemshow() {
5139
5283
  if (~this.prevIndex) {
5140
5284
  addClass(this._getTransitioner().getItemIn(), this.clsActive);
5141
5285
  }
5286
+ this.updateActiveClasses(this.prevIndex);
5142
5287
  },
5143
5288
  itemshown() {
5144
5289
  this.updateActiveClasses();
@@ -5171,11 +5316,11 @@
5171
5316
  width -= dimensions$1(slide).width;
5172
5317
  }
5173
5318
  },
5174
- updateActiveClasses() {
5175
- const actives = this._getTransitioner(this.index).getActives();
5319
+ updateActiveClasses(currentIndex = this.index) {
5320
+ const actives = this._getTransitioner(currentIndex).getActives();
5176
5321
  const activeClasses = [
5177
5322
  this.clsActive,
5178
- (!this.sets || includes(this.sets, toFloat(this.index))) && this.clsActivated || ""
5323
+ !this.sets || includes(this.sets, toFloat(this.index)) ? this.clsActivated : ""
5179
5324
  ];
5180
5325
  for (const slide of this.slides) {
5181
5326
  const active = includes(actives, slide);
@@ -5221,6 +5366,21 @@
5221
5366
  } while (this.length > j && currentLeft > left && currentLeft < right);
5222
5367
  }
5223
5368
  return Array.from(slides);
5369
+ },
5370
+ getIndexAt(percent) {
5371
+ let index = -1;
5372
+ const firstSlideWidth = dimensions$1(this.slides[0]).width;
5373
+ const lastSlideWidth = dimensions$1(last(this.slides)).width;
5374
+ const scrollDist = getWidth(this.list) - (this.center ? firstSlideWidth / 2 + lastSlideWidth / 2 : lastSlideWidth);
5375
+ let dist = percent * scrollDist;
5376
+ let slidePercent = 0;
5377
+ do {
5378
+ const slideWidth = dimensions$1(this.slides[++index]).width;
5379
+ const slideDist = this.center ? slideWidth / 2 + dimensions$1(this.slides[index + 1]).width / 2 : slideWidth;
5380
+ slidePercent = dist / slideDist % 1;
5381
+ dist -= slideDist;
5382
+ } while (dist >= 0 && index < this.maxIndex);
5383
+ return [index, slidePercent];
5224
5384
  }
5225
5385
  }
5226
5386
  };
@@ -5412,18 +5572,17 @@
5412
5572
  }
5413
5573
  };
5414
5574
 
5415
- const supportsAspectRatio = inBrowser && CSS.supports("aspect-ratio", "1/1");
5416
5575
  var slideshow = {
5417
- mixins: [Class, Slideshow, SliderReactive, SliderPreload],
5576
+ mixins: [Class, Slideshow, SliderReactive, SliderParallax, SliderPreload],
5418
5577
  props: {
5419
5578
  ratio: String,
5420
- minHeight: Number,
5421
- maxHeight: Number
5579
+ minHeight: String,
5580
+ maxHeight: String
5422
5581
  },
5423
5582
  data: {
5424
5583
  ratio: "16:9",
5425
- minHeight: false,
5426
- maxHeight: false,
5584
+ minHeight: void 0,
5585
+ maxHeight: void 0,
5427
5586
  selList: ".uk-slideshow-items",
5428
5587
  attrItem: "uk-slideshow-item",
5429
5588
  selNav: ".uk-slideshow-nav",
@@ -5431,38 +5590,15 @@
5431
5590
  },
5432
5591
  watch: {
5433
5592
  list(list) {
5434
- if (list && supportsAspectRatio) {
5435
- css(list, {
5436
- aspectRatio: this.ratio.replace(":", "/"),
5437
- minHeight: this.minHeight || "",
5438
- maxHeight: this.maxHeight || "",
5439
- minWidth: "100%",
5440
- maxWidth: "100%"
5441
- });
5442
- }
5593
+ css(list, {
5594
+ aspectRatio: this.ratio ? this.ratio.replace(":", "/") : void 0,
5595
+ minHeight: this.minHeight,
5596
+ maxHeight: this.maxHeight,
5597
+ minWidth: "100%",
5598
+ maxWidth: "100%"
5599
+ });
5443
5600
  }
5444
5601
  },
5445
- update: {
5446
- // deprecated: Remove with iOS 17
5447
- read() {
5448
- if (!this.list || supportsAspectRatio) {
5449
- return false;
5450
- }
5451
- let [width, height] = this.ratio.split(":").map(Number);
5452
- height = height * this.list.offsetWidth / width || 0;
5453
- if (this.minHeight) {
5454
- height = Math.max(this.minHeight, height);
5455
- }
5456
- if (this.maxHeight) {
5457
- height = Math.min(this.maxHeight, height);
5458
- }
5459
- return { height: height - boxModelAdjust(this.list, "height", "content-box") };
5460
- },
5461
- write({ height }) {
5462
- height > 0 && css(this.list, "minHeight", height);
5463
- },
5464
- events: ["resize"]
5465
- },
5466
5602
  methods: {
5467
5603
  getAdjacentSlides() {
5468
5604
  return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]);
@@ -5605,7 +5741,7 @@
5605
5741
  },
5606
5742
  start(e) {
5607
5743
  this.drag = appendDrag(this.$container, this.placeholder);
5608
- const { left, top } = this.placeholder.getBoundingClientRect();
5744
+ const { left, top } = dimensions$1(this.placeholder);
5609
5745
  assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top });
5610
5746
  addClass(this.drag, this.clsDrag, this.clsCustom);
5611
5747
  addClass(this.placeholder, this.clsPlaceholder);
@@ -5721,20 +5857,20 @@
5721
5857
  return clone;
5722
5858
  }
5723
5859
  function findTarget(items, point) {
5724
- return items[findIndex(items, (item) => pointInRect(point, item.getBoundingClientRect()))];
5860
+ return items[findIndex(items, (item) => pointInRect(point, dimensions$1(item)))];
5725
5861
  }
5726
5862
  function findInsertTarget(list, target, placeholder, x, y, sameList) {
5727
5863
  if (!children(list).length) {
5728
5864
  return;
5729
5865
  }
5730
- const rect = target.getBoundingClientRect();
5866
+ const rect = dimensions$1(target);
5731
5867
  if (!sameList) {
5732
5868
  if (!isHorizontal(list, placeholder)) {
5733
5869
  return y < rect.top + rect.height / 2 ? target : target.nextElementSibling;
5734
5870
  }
5735
5871
  return target;
5736
5872
  }
5737
- const placeholderRect = placeholder.getBoundingClientRect();
5873
+ const placeholderRect = dimensions$1(placeholder);
5738
5874
  const sameRow = linesIntersect(
5739
5875
  [rect.top, rect.bottom],
5740
5876
  [placeholderRect.top, placeholderRect.bottom]
@@ -5759,9 +5895,9 @@
5759
5895
  }
5760
5896
  const items = children(list);
5761
5897
  const isHorizontal2 = items.some((el, i) => {
5762
- const rectA = el.getBoundingClientRect();
5898
+ const rectA = dimensions$1(el);
5763
5899
  return items.slice(i + 1).some((el2) => {
5764
- const rectB = el2.getBoundingClientRect();
5900
+ const rectB = dimensions$1(el2);
5765
5901
  return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);
5766
5902
  });
5767
5903
  });
@@ -5964,13 +6100,7 @@
5964
6100
  }
5965
6101
  }
5966
6102
  const props = includes(properties[0], dir) ? properties[1] : properties[0];
5967
- if (elOffset[props[0]] === targetOffset[props[0]]) {
5968
- align = props[0];
5969
- } else if (elOffset[props[1]] === targetOffset[props[1]]) {
5970
- align = props[1];
5971
- } else {
5972
- align = "center";
5973
- }
6103
+ align = props.find((prop) => elOffset[prop] === targetOffset[prop]) || "center";
5974
6104
  return [dir, align];
5975
6105
  }
5976
6106
  function parseProps(options) {
@@ -6441,7 +6571,7 @@
6441
6571
  let frame;
6442
6572
  (function scroll() {
6443
6573
  frame = requestAnimationFrame(() => {
6444
- const { top } = el.getBoundingClientRect();
6574
+ const { top } = dimensions$1(el);
6445
6575
  if (top < 0) {
6446
6576
  scrollElement.scrollTop += top;
6447
6577
  }
@@ -6525,7 +6655,7 @@
6525
6655
  intersection({
6526
6656
  filter: ({ $el, autoplay }) => autoplay && isVideo($el),
6527
6657
  handler([{ isIntersecting }]) {
6528
- if (isIntersecting) {
6658
+ if (isIntersecting || this.$el.webkitDisplayingFullscreen || document.fullscreenElement === this.$el) {
6529
6659
  play(this.$el);
6530
6660
  } else {
6531
6661
  pause(this.$el);
@@ -6802,9 +6932,7 @@
6802
6932
  {
6803
6933
  name: "beforehide",
6804
6934
  self: true,
6805
- handler() {
6806
- this.clearTimers();
6807
- }
6935
+ handler: "clearTimers"
6808
6936
  },
6809
6937
  {
6810
6938
  name: "hide",
@@ -7028,8 +7156,12 @@
7028
7156
  dropbar = this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);
7029
7157
  return dropbar ? dropbar : this._dropbar = $("<div></div>");
7030
7158
  },
7031
- dropbarOffset() {
7032
- return 0;
7159
+ dropbarOffset({ target, targetY }, $el) {
7160
+ const { offsetTop, offsetHeight } = query(targetY || target || $el, $el);
7161
+ return offsetTop + offsetHeight + this.dropbarPositionOffset;
7162
+ },
7163
+ dropbarPositionOffset(_, $el) {
7164
+ return toPx(css($el, "--uk-position-offset"));
7033
7165
  },
7034
7166
  dropContainer(_, $el) {
7035
7167
  return this.container || $el;
@@ -7188,17 +7320,12 @@
7188
7320
  }
7189
7321
  const drop = this.getDropdown(target);
7190
7322
  const adjustHeight = () => {
7191
- const targetOffsets = parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el));
7192
- const minTop = Math.min(...targetOffsets.map(({ top }) => top));
7193
- const maxBottom = Math.max(...targetOffsets.map(({ bottom }) => bottom));
7194
- const dropbarOffset = offset(this.dropbar);
7195
- css(
7196
- this.dropbar,
7197
- "top",
7198
- this.dropbar.offsetTop - (dropbarOffset.top - minTop) - this.dropbarOffset
7323
+ const maxBottom = Math.max(
7324
+ ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
7199
7325
  );
7326
+ css(this.dropbar, "top", this.dropbarOffset);
7200
7327
  this.transitionTo(
7201
- maxBottom - minTop + toFloat(css(target, "marginBottom")) + this.dropbarOffset,
7328
+ maxBottom - offset(this.dropbar).top + toFloat(css(target, "marginBottom")),
7202
7329
  target
7203
7330
  );
7204
7331
  };
@@ -7252,17 +7379,21 @@
7252
7379
  const oldHeight = height(dropbar);
7253
7380
  el = oldHeight < newHeight && el;
7254
7381
  await Transition.cancel([el, dropbar]);
7382
+ if (el) {
7383
+ const diff = offset(el).top - offset(dropbar).top - oldHeight;
7384
+ if (diff > 0) {
7385
+ css(el, "transitionDelay", `${diff / newHeight * this.duration}ms`);
7386
+ }
7387
+ }
7255
7388
  css(el, "clipPath", `polygon(0 0,100% 0,100% ${oldHeight}px,0 ${oldHeight}px)`);
7256
7389
  height(dropbar, oldHeight);
7257
7390
  await Promise.all([
7258
7391
  Transition.start(dropbar, { height: newHeight }, this.duration),
7259
7392
  Transition.start(
7260
7393
  el,
7261
- {
7262
- clipPath: `polygon(0 0,100% 0,100% ${newHeight}px,0 ${newHeight}px)`
7263
- },
7394
+ { clipPath: `polygon(0 0,100% 0,100% ${newHeight}px,0 ${newHeight}px)` },
7264
7395
  this.duration
7265
- ).finally(() => css(el, { clipPath: "" }))
7396
+ ).finally(() => css(el, { clipPath: "", transitionDelay: "" }))
7266
7397
  ]).catch(noop);
7267
7398
  },
7268
7399
  getDropdown(el) {
@@ -7556,7 +7687,9 @@
7556
7687
  let heights = elements.map(getHeight);
7557
7688
  const max = Math.max(...heights);
7558
7689
  return {
7559
- heights: elements.map((el, i) => heights[i].toFixed(2) === max.toFixed(2) ? "" : max),
7690
+ heights: elements.map(
7691
+ (el, i) => heights[i].toFixed(2) === max.toFixed(2) ? "" : max - boxModelAdjust(el, "height", "content-box")
7692
+ ),
7560
7693
  elements
7561
7694
  };
7562
7695
  }
@@ -7566,11 +7699,34 @@
7566
7699
  css(element, "display", "block", "important");
7567
7700
  }
7568
7701
  css(element, "minHeight", "");
7569
- const height = dimensions$1(element).height - boxModelAdjust(element, "height", "content-box");
7702
+ const height = element.offsetHeight;
7570
7703
  css(element, style);
7571
7704
  return height;
7572
7705
  }
7573
7706
 
7707
+ var heightPlaceholder = {
7708
+ args: "target",
7709
+ props: {
7710
+ target: String
7711
+ },
7712
+ data: {
7713
+ target: ""
7714
+ },
7715
+ computed: {
7716
+ target: ({ target }, $el) => query(target, $el)
7717
+ },
7718
+ observe: resize({ target: ({ target }) => target }),
7719
+ update: {
7720
+ read() {
7721
+ return { height: height(this.target) };
7722
+ },
7723
+ write({ height: height2 }) {
7724
+ css(this.$el, { minHeight: height2 });
7725
+ },
7726
+ events: ["resize"]
7727
+ }
7728
+ };
7729
+
7574
7730
  var heightViewport = {
7575
7731
  props: {
7576
7732
  expand: Boolean,
@@ -7650,7 +7806,7 @@
7650
7806
 
7651
7807
  var navbarParentIcon = "<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>";
7652
7808
 
7653
- var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><style>.uk-navbar-toggle-animate svg&gt;[class*=&quot;line-&quot;]{transition:0.2s ease-in-out;transition-property:transform, opacity;transform-origin:center;opacity:1}.uk-navbar-toggle svg&gt;.line-3{opacity:0}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{opacity:1}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-2{transform:rotate(45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{transform:rotate(-45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1,.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-4{opacity:0}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1{transform:translateY(6px) scaleX(0)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.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>";
7809
+ var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><style>.uk-navbar-toggle-animate svg&gt;[class*=&quot;line-&quot;]{transition:0.2s ease-in-out;transition-property:transform, opacity;transform-origin:center;opacity:1}.uk-navbar-toggle-animate svg&gt;.line-3{opacity:0}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{opacity:1}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-2{transform:rotate(45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{transform:rotate(-45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1,.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-4{opacity:0}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1{transform:translateY(6px) scaleX(0)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.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>";
7654
7810
 
7655
7811
  var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>";
7656
7812
 
@@ -7759,6 +7915,7 @@
7759
7915
  "search-icon": searchIcon,
7760
7916
  "search-large": searchLarge,
7761
7917
  "search-navbar": searchNavbar,
7918
+ "search-toggle-icon": searchIcon,
7762
7919
  "slidenav-next": slidenavNext,
7763
7920
  "slidenav-next-large": slidenavNextLarge,
7764
7921
  "slidenav-previous": slidenavPrevious,
@@ -7805,11 +7962,12 @@
7805
7962
  mixins: [I18n],
7806
7963
  i18n: { toggle: "Open Search", submit: "Submit Search" },
7807
7964
  beforeConnect() {
7808
- this.icon = hasClass(this.$el, "uk-search-icon") && parents(this.$el, ".uk-search-large").length ? "search-large" : parents(this.$el, ".uk-search-navbar").length ? "search-navbar" : this.$props.icon;
7965
+ const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle");
7966
+ this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && closest(this.$el, ".uk-search-large") ? "search-large" : closest(this.$el, ".uk-search-navbar") ? "search-navbar" : this.$props.icon;
7809
7967
  if (hasAttr(this.$el, "aria-label")) {
7810
7968
  return;
7811
7969
  }
7812
- if (hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle")) {
7970
+ if (isToggle) {
7813
7971
  const label = this.t("toggle");
7814
7972
  attr(this.$el, "aria-label", label);
7815
7973
  } else {
@@ -7903,7 +8061,9 @@
7903
8061
  }
7904
8062
  };
7905
8063
  }
8064
+ const aliases = { twitter: "x" };
7906
8065
  function getIcon(icon) {
8066
+ icon = aliases[icon] || icon;
7907
8067
  if (!icons[icon]) {
7908
8068
  return null;
7909
8069
  }
@@ -8042,6 +8202,90 @@
8042
8202
  return isTag(el, "img");
8043
8203
  }
8044
8204
 
8205
+ var inverse = {
8206
+ props: {
8207
+ target: String,
8208
+ selActive: String
8209
+ },
8210
+ data: {
8211
+ target: false,
8212
+ selActive: false
8213
+ },
8214
+ computed: {
8215
+ target: ({ target }, $el) => target ? $$(target, $el) : [$el]
8216
+ },
8217
+ observe: [
8218
+ mutation({
8219
+ target: ({ target }) => target,
8220
+ options: { attributes: true, attributeFilter: ["class"], attributeOldValue: true }
8221
+ }),
8222
+ {
8223
+ target: ({ target }) => target,
8224
+ observe: (target, handler) => {
8225
+ const observer = observeResize([...target, document.documentElement], handler);
8226
+ const listener = [
8227
+ on(document, "scroll itemshown itemhidden", handler, {
8228
+ passive: true,
8229
+ capture: true
8230
+ }),
8231
+ on(document, "show hide transitionstart", (e) => {
8232
+ handler();
8233
+ return observer.observe(e.target);
8234
+ }),
8235
+ on(document, "shown hidden transitionend transitioncancel", (e) => {
8236
+ handler();
8237
+ return observer.unobserve(e.target);
8238
+ })
8239
+ ];
8240
+ return {
8241
+ disconnect() {
8242
+ observer.disconnect();
8243
+ listener.map((off) => off());
8244
+ }
8245
+ };
8246
+ },
8247
+ handler() {
8248
+ this.$emit();
8249
+ }
8250
+ }
8251
+ ],
8252
+ update: {
8253
+ read() {
8254
+ for (const target of this.target) {
8255
+ replaceClass(
8256
+ target,
8257
+ "uk-light,uk-dark",
8258
+ !this.selActive || matches(target, this.selActive) ? findTargetColor(target) : ""
8259
+ );
8260
+ }
8261
+ }
8262
+ }
8263
+ };
8264
+ function findTargetColor(target) {
8265
+ const { left, top, height, width } = dimensions$1(target);
8266
+ let last;
8267
+ for (const percent of [0.25, 0.5, 0.75]) {
8268
+ const elements = target.ownerDocument.elementsFromPoint(
8269
+ Math.max(0, left) + width * percent,
8270
+ Math.max(0, top) + height / 2
8271
+ );
8272
+ for (const element of elements) {
8273
+ if (target.contains(element) || element.closest('[class*="-leave"]') && elements.some((el) => element !== el && matches(el, '[class*="-enter"]'))) {
8274
+ continue;
8275
+ }
8276
+ const color = css(element, "--uk-inverse");
8277
+ if (color) {
8278
+ if (color === last) {
8279
+ return `uk-${color}`;
8280
+ }
8281
+ last = color;
8282
+ break;
8283
+ }
8284
+ }
8285
+ }
8286
+ return last ? `uk-${last}` : "";
8287
+ }
8288
+
8045
8289
  var leader = {
8046
8290
  mixins: [Class, Media],
8047
8291
  props: {
@@ -8089,6 +8333,15 @@
8089
8333
  selClose: ".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"
8090
8334
  },
8091
8335
  events: [
8336
+ {
8337
+ name: "fullscreenchange webkitendfullscreen",
8338
+ capture: true,
8339
+ handler(e) {
8340
+ if (isTag(e.target, "video") && this.isToggled() && !document.fullscreenElement) {
8341
+ this.hide();
8342
+ }
8343
+ }
8344
+ },
8092
8345
  {
8093
8346
  name: "show",
8094
8347
  self: true,
@@ -8190,6 +8443,7 @@
8190
8443
  }
8191
8444
  };
8192
8445
 
8446
+ const clsNavbarTransparent = "uk-navbar-transparent";
8193
8447
  var navbar = {
8194
8448
  extends: Dropnav,
8195
8449
  props: {
@@ -8199,49 +8453,25 @@
8199
8453
  clsDrop: "uk-navbar-dropdown",
8200
8454
  selNavItem: ".uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle",
8201
8455
  // Simplify with :where() selector once browser target is Safari 14+
8202
- selTransparentTarget: '[class*="uk-section"]',
8203
8456
  dropbarTransparentMode: false
8204
8457
  },
8205
8458
  computed: {
8206
8459
  navbarContainer: (_, $el) => $el.closest(".uk-navbar-container"),
8207
- dropbarOffset: ({ dropbarTransparentMode }, $el) => dropbarTransparentMode === "behind" ? $el.offsetHeight : 0
8460
+ dropbarOffset({ dropbarTransparentMode }) {
8461
+ const { offsetTop, offsetHeight } = this.navbarContainer;
8462
+ return offsetTop + (dropbarTransparentMode === "behind" ? 0 : offsetHeight + this.dropbarPositionOffset);
8463
+ }
8208
8464
  },
8209
8465
  watch: {
8210
8466
  items() {
8211
8467
  const justify = hasClass(this.$el, "uk-navbar-justify");
8212
- for (const container of $$(
8213
- ".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right",
8214
- this.$el
8215
- )) {
8216
- css(
8217
- container,
8218
- "flexGrow",
8219
- justify ? $$(
8220
- ".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle",
8221
- container
8222
- ).length : ""
8223
- );
8468
+ const containers = $$(".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right", this.$el);
8469
+ for (const container of containers) {
8470
+ const items = justify ? $$(".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle", container).length : "";
8471
+ css(container, "flexGrow", items);
8224
8472
  }
8225
8473
  }
8226
8474
  },
8227
- disconnect() {
8228
- var _a;
8229
- (_a = this._colorListener) == null ? void 0 : _a.call(this);
8230
- },
8231
- observe: [
8232
- mutation({
8233
- target: ({ navbarContainer }) => navbarContainer,
8234
- handler: "registerColorListener",
8235
- options: { attributes: true, attributeFilter: ["class"], attributeOldValue: true }
8236
- }),
8237
- intersection({
8238
- handler(records) {
8239
- this._isIntersecting = records[0].isIntersecting;
8240
- this.registerColorListener();
8241
- },
8242
- args: { intersecting: false }
8243
- })
8244
- ],
8245
8475
  events: [
8246
8476
  {
8247
8477
  name: "show",
@@ -8249,21 +8479,9 @@
8249
8479
  return this.dropContainer;
8250
8480
  },
8251
8481
  handler({ target }) {
8252
- const transparentMode = this.getTransparentMode(target);
8253
- if (!transparentMode || this._mode) {
8254
- return;
8255
- }
8256
- const storePrevColor = () => this._mode = removeClasses(this.navbarContainer, "uk-light", "uk-dark");
8257
- if (transparentMode === "behind") {
8258
- const mode = getDropbarBehindColor(this.$el);
8259
- if (mode) {
8260
- storePrevColor();
8261
- addClass(this.navbarContainer, `uk-${mode}`);
8262
- }
8263
- }
8264
- if (transparentMode === "remove") {
8265
- storePrevColor();
8266
- removeClass(this.navbarContainer, "uk-navbar-transparent");
8482
+ if (this.getTransparentMode(target) === "remove" && hasClass(this.navbarContainer, clsNavbarTransparent)) {
8483
+ removeClass(this.navbarContainer, clsNavbarTransparent);
8484
+ this._transparent = true;
8267
8485
  }
8268
8486
  }
8269
8487
  },
@@ -8272,26 +8490,12 @@
8272
8490
  el() {
8273
8491
  return this.dropContainer;
8274
8492
  },
8275
- async handler({ target }) {
8276
- const transparentMode = this.getTransparentMode(target);
8277
- if (!transparentMode || !this._mode) {
8278
- return;
8279
- }
8493
+ async handler() {
8280
8494
  await awaitMacroTask();
8281
- if (this.getActive()) {
8282
- return;
8495
+ if (!this.getActive() && this._transparent) {
8496
+ addClass(this.navbarContainer, clsNavbarTransparent);
8497
+ this._transparent = null;
8283
8498
  }
8284
- if (transparentMode === "behind") {
8285
- const mode = getDropbarBehindColor(this.$el);
8286
- if (mode) {
8287
- removeClass(this.navbarContainer, `uk-${mode}`);
8288
- }
8289
- }
8290
- addClass(this.navbarContainer, this._mode);
8291
- if (transparentMode === "remove") {
8292
- addClass(this.navbarContainer, "uk-navbar-transparent");
8293
- }
8294
- this._mode = null;
8295
8499
  }
8296
8500
  }
8297
8501
  ],
@@ -8304,70 +8508,15 @@
8304
8508
  return this.dropbarTransparentMode;
8305
8509
  }
8306
8510
  const drop = this.getDropdown(el);
8307
- if (!drop || !hasClass(el, "uk-dropbar")) {
8308
- return;
8511
+ if (drop && hasClass(el, "uk-dropbar")) {
8512
+ return drop.inset ? "behind" : "remove";
8309
8513
  }
8310
- return drop.inset ? "behind" : "remove";
8311
- },
8312
- registerColorListener() {
8313
- const active = this._isIntersecting && hasClass(this.navbarContainer, "uk-navbar-transparent") && !isWithinMixBlendMode(this.navbarContainer) && !$$(".uk-drop", this.dropContainer).map(this.getDropdown).some(
8314
- (drop) => drop.isToggled() && (drop.inset || this.getTransparentMode(drop.$el) === "behind")
8315
- );
8316
- if (this._colorListener) {
8317
- if (!active) {
8318
- this._colorListener();
8319
- this._colorListener = null;
8320
- }
8321
- return;
8322
- }
8323
- if (!active) {
8324
- return;
8325
- }
8326
- this._colorListener = listenForPositionChange(this.navbarContainer, () => {
8327
- const { left, top, height } = offset(this.navbarContainer);
8328
- const startPoint = { x: left, y: Math.max(0, top) + height / 2 };
8329
- const target = $$(this.selTransparentTarget).find(
8330
- (target2) => pointInRect(startPoint, offset(target2))
8331
- );
8332
- const color = css(target, "--uk-navbar-color");
8333
- if (color) {
8334
- replaceClass(this.navbarContainer, "uk-light,uk-dark", `uk-${color}`);
8335
- }
8336
- });
8337
8514
  }
8338
8515
  }
8339
8516
  };
8340
- function removeClasses(el, ...classes) {
8341
- for (const cls of classes) {
8342
- if (hasClass(el, cls)) {
8343
- removeClass(el, cls);
8344
- return cls;
8345
- }
8346
- }
8347
- }
8348
- async function awaitMacroTask() {
8517
+ function awaitMacroTask() {
8349
8518
  return new Promise((resolve) => setTimeout(resolve));
8350
8519
  }
8351
- function getDropbarBehindColor(el) {
8352
- return css(el, "--uk-navbar-dropbar-behind-color");
8353
- }
8354
- function listenForPositionChange(el, handler) {
8355
- const parent2 = scrollParent(el, true);
8356
- const scrollEl = parent2 === document.documentElement ? document : parent2;
8357
- const off = on(scrollEl, "scroll", handler, { passive: true });
8358
- const observer = observeResize([el, parent2], handler);
8359
- return () => {
8360
- off();
8361
- observer.disconnect();
8362
- };
8363
- }
8364
- function isWithinMixBlendMode(el) {
8365
- do {
8366
- if (css(el, "mixBlendMode") !== "normal") {
8367
- return true;
8368
- }
8369
- } while (el = parent(el));
8370
- }
8371
8520
 
8372
8521
  var offcanvas = {
8373
8522
  mixins: [Modal],
@@ -8535,27 +8684,7 @@
8535
8684
  props: ["width", "height"],
8536
8685
  connected() {
8537
8686
  addClass(this.$el, "uk-responsive-width");
8538
- },
8539
- observe: resize({
8540
- target: ({ $el }) => [$el, parent($el)]
8541
- }),
8542
- update: {
8543
- read() {
8544
- return isVisible(this.$el) && this.width && this.height ? { width: width(parent(this.$el)), height: this.height } : false;
8545
- },
8546
- write(dim) {
8547
- height(
8548
- this.$el,
8549
- Dimensions.contain(
8550
- {
8551
- height: this.height,
8552
- width: this.width
8553
- },
8554
- dim
8555
- ).height
8556
- );
8557
- },
8558
- events: ["resize"]
8687
+ css(this.$el, "aspectRatio", `${this.width}/${this.height}`);
8559
8688
  }
8560
8689
  };
8561
8690
 
@@ -8701,7 +8830,7 @@
8701
8830
  toggleClass(el, this.inViewClass, inview);
8702
8831
  toggleClass(el, state.cls);
8703
8832
  if (/\buk-animation-/.test(state.cls)) {
8704
- const removeAnimationClasses = () => removeClasses$1(el, "uk-animation-[\\w-]+");
8833
+ const removeAnimationClasses = () => removeClasses(el, "uk-animation-[\\w-]+");
8705
8834
  if (inview) {
8706
8835
  state.off = once(el, "animationcancel animationend", removeAnimationClasses, {
8707
8836
  self: true
@@ -8828,7 +8957,7 @@
8828
8957
  targetOffset: false
8829
8958
  },
8830
8959
  computed: {
8831
- selTarget: ({ selTarget }, $el) => selTarget && $(selTarget, $el) || $el
8960
+ target: ({ selTarget }, $el) => selTarget && $(selTarget, $el) || $el
8832
8961
  },
8833
8962
  connected() {
8834
8963
  this.start = coerce(this.start || this.top);
@@ -8840,16 +8969,26 @@
8840
8969
  beforeDisconnect() {
8841
8970
  if (this.isFixed) {
8842
8971
  this.hide();
8843
- removeClass(this.selTarget, this.clsInactive);
8972
+ removeClass(this.target, this.clsInactive);
8844
8973
  }
8845
8974
  reset(this.$el);
8846
8975
  remove$1(this.placeholder);
8847
8976
  this.placeholder = null;
8848
8977
  },
8849
8978
  observe: [
8850
- viewport(),
8979
+ viewport({
8980
+ handler() {
8981
+ if (toPx("100vh", "height") !== this._data.viewport) {
8982
+ this.$emit("resize");
8983
+ }
8984
+ }
8985
+ }),
8851
8986
  scroll$1({ target: () => document.scrollingElement }),
8852
- resize({ target: ({ $el }) => [$el, document.scrollingElement] })
8987
+ resize({
8988
+ target: () => document.scrollingElement,
8989
+ options: { box: "content-box" }
8990
+ }),
8991
+ resize({ target: ({ $el }) => $el })
8853
8992
  ],
8854
8993
  events: [
8855
8994
  {
@@ -8894,7 +9033,7 @@
8894
9033
  }
8895
9034
  const hide = this.isFixed && !this.transitionInProgress;
8896
9035
  if (hide) {
8897
- preventTransition(this.$el);
9036
+ preventTransition(this.target);
8898
9037
  this.hide();
8899
9038
  }
8900
9039
  if (!this.active) {
@@ -8929,20 +9068,20 @@
8929
9068
  );
8930
9069
  sticky = maxScrollHeight && !this.showOnUp && start + offset$1 === topOffset && end === Math.min(
8931
9070
  maxScrollHeight,
8932
- parseProp("!*", this.$el, 0, true) - elHeight - offset$1 + overflow
9071
+ parseProp(true, this.$el, 0, true) - elHeight - offset$1 + overflow
8933
9072
  ) && css(parent(this.$el), "overflowY") === "visible";
8934
9073
  return {
8935
9074
  start,
8936
9075
  end,
8937
9076
  offset: offset$1,
8938
9077
  overflow,
8939
- topOffset,
8940
9078
  height: height$1,
8941
9079
  elHeight,
8942
9080
  width,
8943
9081
  margin,
8944
9082
  top: offsetPosition(referenceElement)[0],
8945
- sticky
9083
+ sticky,
9084
+ viewport: viewport2
8946
9085
  };
8947
9086
  },
8948
9087
  write({ height, width, margin, offset, sticky }) {
@@ -8958,10 +9097,10 @@
8958
9097
  }
8959
9098
  const { placeholder } = this;
8960
9099
  css(placeholder, { height, width, margin });
8961
- if (!document.contains(placeholder)) {
9100
+ if (parent(placeholder) !== parent(this.$el) || sticky ^ index(placeholder) < index(this.$el)) {
9101
+ (sticky ? before : after)(this.$el, placeholder);
8962
9102
  placeholder.hidden = true;
8963
9103
  }
8964
- (sticky ? before : after)(this.$el, placeholder);
8965
9104
  },
8966
9105
  events: ["resize"]
8967
9106
  },
@@ -8972,18 +9111,21 @@
8972
9111
  overflow,
8973
9112
  overflowScroll = 0,
8974
9113
  start,
8975
- end
9114
+ end,
9115
+ elHeight,
9116
+ height,
9117
+ sticky
8976
9118
  }) {
8977
9119
  const scroll2 = document.scrollingElement.scrollTop;
8978
9120
  const dir = prevScroll <= scroll2 ? "down" : "up";
9121
+ const referenceElement = this.isFixed ? this.placeholder : this.$el;
8979
9122
  return {
8980
9123
  dir,
8981
9124
  prevDir,
8982
9125
  scroll: scroll2,
8983
9126
  prevScroll,
8984
- offsetParentTop: offset(
8985
- (this.isFixed ? this.placeholder : this.$el).offsetParent
8986
- ).top,
9127
+ below: scroll2 > offset(referenceElement).top + (sticky ? Math.min(height, elHeight) : height),
9128
+ offsetParentTop: offset(referenceElement.offsetParent).top,
8987
9129
  overflowScroll: clamp(
8988
9130
  overflowScroll + clamp(scroll2, start, end) - clamp(prevScroll, start, end),
8989
9131
  0,
@@ -9001,8 +9143,7 @@
9001
9143
  prevScroll = 0,
9002
9144
  top,
9003
9145
  start,
9004
- topOffset,
9005
- height
9146
+ below
9006
9147
  } = data;
9007
9148
  if (scroll2 < 0 || scroll2 === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
9008
9149
  return;
@@ -9015,7 +9156,7 @@
9015
9156
  if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll2) <= 30 && Math.abs(prevScroll - scroll2) <= 10) {
9016
9157
  return;
9017
9158
  }
9018
- if (this.inactive || scroll2 < start || this.showOnUp && (scroll2 <= start || dir === "down" && isScrollUpdate || dir === "up" && !this.isFixed && scroll2 <= topOffset + height)) {
9159
+ if (this.inactive || scroll2 < start || this.showOnUp && (scroll2 <= start || dir === "down" && isScrollUpdate || dir === "up" && !this.isFixed && !below)) {
9019
9160
  if (!this.isFixed) {
9020
9161
  if (Animation.inProgress(this.$el) && top > scroll2) {
9021
9162
  Animation.cancel(this.$el);
@@ -9023,7 +9164,7 @@
9023
9164
  }
9024
9165
  return;
9025
9166
  }
9026
- if (this.animation && scroll2 > topOffset) {
9167
+ if (this.animation && below) {
9027
9168
  if (hasClass(this.$el, "uk-animation-leave")) {
9028
9169
  return;
9029
9170
  }
@@ -9033,11 +9174,11 @@
9033
9174
  }
9034
9175
  } else if (this.isFixed) {
9035
9176
  this.update();
9036
- } else if (this.animation && scroll2 > topOffset) {
9177
+ } else if (this.animation && below) {
9037
9178
  this.show();
9038
9179
  Animation.in(this.$el, this.animation).catch(noop);
9039
9180
  } else {
9040
- preventTransition(this.selTarget);
9181
+ preventTransition(this.target);
9041
9182
  this.show();
9042
9183
  }
9043
9184
  },
@@ -9076,11 +9217,9 @@
9076
9217
  start,
9077
9218
  end,
9078
9219
  offset,
9079
- topOffset,
9080
- height,
9081
- elHeight,
9082
9220
  offsetParentTop,
9083
- sticky
9221
+ sticky,
9222
+ below
9084
9223
  } = this._data;
9085
9224
  const active = start !== 0 || scroll2 > start;
9086
9225
  if (!sticky) {
@@ -9093,22 +9232,21 @@
9093
9232
  }
9094
9233
  css(this.$el, "top", offset - overflowScroll);
9095
9234
  this.setActive(active);
9096
- toggleClass(
9097
- this.$el,
9098
- this.clsBelow,
9099
- scroll2 > topOffset + (sticky ? Math.min(height, elHeight) : height)
9100
- );
9235
+ toggleClass(this.$el, this.clsBelow, below);
9101
9236
  addClass(this.$el, this.clsFixed);
9102
9237
  },
9103
9238
  setActive(active) {
9104
9239
  const prev = this.active;
9105
9240
  this.active = active;
9106
9241
  if (active) {
9107
- replaceClass(this.selTarget, this.clsInactive, this.clsActive);
9242
+ replaceClass(this.target, this.clsInactive, this.clsActive);
9108
9243
  prev !== active && trigger(this.$el, "active");
9109
9244
  } else {
9110
- replaceClass(this.selTarget, this.clsActive, this.clsInactive);
9111
- prev !== active && trigger(this.$el, "inactive");
9245
+ replaceClass(this.target, this.clsActive, this.clsInactive);
9246
+ if (prev !== active) {
9247
+ preventTransition(this.target);
9248
+ trigger(this.$el, "inactive");
9249
+ }
9112
9250
  }
9113
9251
  }
9114
9252
  }
@@ -9597,9 +9735,11 @@
9597
9735
  FormCustom: formCustom,
9598
9736
  Grid: grid,
9599
9737
  HeightMatch: heightMatch,
9738
+ HeightPlaceholder: heightPlaceholder,
9600
9739
  HeightViewport: heightViewport,
9601
9740
  Icon: Icon,
9602
9741
  Img: img,
9742
+ Inverse: inverse,
9603
9743
  Leader: leader,
9604
9744
  Margin: Margin,
9605
9745
  Marker: Marker,