uikit 3.23.13-dev.f819730bb → 3.23.14-dev.be820cd99

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 (128) hide show
  1. package/.prettierignore +1 -0
  2. package/CHANGELOG.md +36 -0
  3. package/dist/css/uikit-core-rtl.css +301 -111
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +301 -111
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +305 -111
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +305 -111
  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 +49 -23
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +19 -14
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +19 -14
  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 +2 -2
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +2 -2
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +8 -3
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +2 -2
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +8 -3
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +48 -22
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +3 -3
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +2 -2
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +134 -63
  38. package/dist/js/uikit-core.min.js +1 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +183 -90
  42. package/dist/js/uikit.min.js +1 -1
  43. package/eslint.config.mjs +1 -1
  44. package/package.json +1 -1
  45. package/src/images/backgrounds/form-checkbox.svg +2 -2
  46. package/src/images/components/navbar-toggle-icon.svg +14 -7
  47. package/src/js/api/options.js +1 -1
  48. package/src/js/components/lightbox-panel.js +6 -4
  49. package/src/js/components/upload.js +1 -3
  50. package/src/js/core/drop.js +3 -8
  51. package/src/js/core/dropnav.js +4 -4
  52. package/src/js/core/img.js +1 -1
  53. package/src/js/core/index.js +1 -0
  54. package/src/js/core/navbar.js +3 -5
  55. package/src/js/core/overflow-fade.js +67 -0
  56. package/src/js/core/scrollspy.js +10 -10
  57. package/src/js/core/sticky.js +18 -16
  58. package/src/js/core/toggle.js +3 -5
  59. package/src/js/core/video.js +36 -10
  60. package/src/js/mixin/internal/animate-fade.js +32 -15
  61. package/src/js/mixin/internal/animate-slide.js +27 -9
  62. package/src/js/mixin/modal.js +3 -4
  63. package/src/js/mixin/slider.js +3 -1
  64. package/src/js/mixin/togglable.js +1 -1
  65. package/src/js/util/animation.js +3 -4
  66. package/src/js/util/await.js +7 -0
  67. package/src/js/util/player.js +1 -3
  68. package/src/js/util/scroll.js +2 -2
  69. package/src/js/util/selector.js +1 -1
  70. package/src/js/util/viewport.js +1 -1
  71. package/src/less/components/base.less +19 -4
  72. package/src/less/components/card.less +40 -1
  73. package/src/less/components/countdown.less +4 -42
  74. package/src/less/components/form.less +87 -67
  75. package/src/less/components/heading.less +0 -84
  76. package/src/less/components/icon.less +44 -0
  77. package/src/less/components/navbar.less +23 -9
  78. package/src/less/components/position.less +1 -1
  79. package/src/less/components/section.less +33 -0
  80. package/src/less/components/subnav.less +1 -1
  81. package/src/less/components/utility.less +45 -0
  82. package/src/less/components/visibility.less +1 -1
  83. package/src/less/components/width.less +0 -5
  84. package/src/less/theme/card.less +13 -0
  85. package/src/less/theme/icon.less +14 -0
  86. package/src/scss/components/base.scss +19 -4
  87. package/src/scss/components/card.scss +35 -1
  88. package/src/scss/components/countdown.scss +2 -40
  89. package/src/scss/components/form.scss +73 -55
  90. package/src/scss/components/heading.scss +0 -83
  91. package/src/scss/components/icon.scss +22 -0
  92. package/src/scss/components/navbar.scss +23 -9
  93. package/src/scss/components/position.scss +1 -1
  94. package/src/scss/components/section.scss +33 -0
  95. package/src/scss/components/subnav.scss +1 -1
  96. package/src/scss/components/utility.scss +45 -0
  97. package/src/scss/components/visibility.scss +1 -1
  98. package/src/scss/components/width.scss +0 -15
  99. package/src/scss/mixins-theme.scss +28 -8
  100. package/src/scss/mixins.scss +25 -8
  101. package/src/scss/variables-theme.scss +27 -30
  102. package/src/scss/variables.scss +25 -30
  103. package/tests/article.html +7 -7
  104. package/tests/base.html +13 -13
  105. package/tests/card.html +9 -1
  106. package/tests/column.html +1 -1
  107. package/tests/countdown.html +595 -8
  108. package/tests/cover.html +7 -13
  109. package/tests/dropbar.html +3 -3
  110. package/tests/dropdown.html +13 -13
  111. package/tests/dropnav.html +9 -9
  112. package/tests/form.html +56 -3
  113. package/tests/icon.html +31 -0
  114. package/tests/index.html +68 -58
  115. package/tests/js/index.js +76 -83
  116. package/tests/lightbox.html +4 -4
  117. package/tests/link.html +71 -8
  118. package/tests/modal.html +1 -1
  119. package/tests/navbar.html +32 -32
  120. package/tests/notification.html +5 -5
  121. package/tests/search.html +3 -3
  122. package/tests/slideshow.html +3 -3
  123. package/tests/sticky-navbar.html +72 -72
  124. package/tests/subnav.html +106 -2
  125. package/tests/tab.html +68 -21
  126. package/tests/table.html +8 -8
  127. package/tests/utility.html +159 -1
  128. package/tests/video.html +137 -10
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.23.13-dev.f819730bb | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */
1
+ /*! UIkit 3.23.14-dev.be820cd99 | https://www.getuikit.com | (c) 2014 - 2025 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -442,7 +442,7 @@
442
442
  function _doQuery(context, queryFn, selector) {
443
443
  try {
444
444
  return context[queryFn](selector);
445
- } catch (e) {
445
+ } catch {
446
446
  return null;
447
447
  }
448
448
  }
@@ -643,13 +643,13 @@
643
643
  const clsTransition = "uk-transition";
644
644
  const transitionEnd = "transitionend";
645
645
  const transitionCanceled = "transitioncanceled";
646
- function transition$1(element, props, duration = 400, timing = "linear") {
646
+ function transition$1(element, props, duration = 400, timing = "linear", skipReflow) {
647
647
  duration = Math.round(duration);
648
648
  return Promise.all(
649
649
  toNodes(element).map(
650
650
  (element2) => new Promise((resolve, reject) => {
651
- for (const name in props) {
652
- css(element2, name);
651
+ if (!skipReflow) {
652
+ element2.offsetHeight;
653
653
  }
654
654
  const timer = setTimeout(() => trigger(element2, transitionEnd), duration);
655
655
  once(
@@ -1186,7 +1186,7 @@
1186
1186
  try {
1187
1187
  data = JSON.parse(data);
1188
1188
  return youtube && (data == null ? void 0 : data.id) === id && data.event === "onReady" || vimeo && Number(data == null ? void 0 : data.player_id) === id;
1189
- } catch (e) {
1189
+ } catch {
1190
1190
  }
1191
1191
  });
1192
1192
  el.src = `${el.src}${includes(el.src, "?") ? "&" : "?"}${youtube ? "enablejsapi=1" : `api=1&player_id=${id}`}`;
@@ -1343,7 +1343,7 @@
1343
1343
  parents(target).reverse().find(
1344
1344
  (parent2) => !parent2.contains(el) && !hasPosition(parent2, "static")
1345
1345
  )
1346
- ) < zIndex(el) || hasPosition(el, "sticky") && parent(el).contains(target)) && (!coverEl || dimensions(coverEl).height < dimensions(el).height)) {
1346
+ ) < zIndex(el) || hasPosition(el, "sticky") && (!target || parent(el).contains(target))) && (!coverEl || dimensions(coverEl).height < dimensions(el).height)) {
1347
1347
  coverEl = el;
1348
1348
  }
1349
1349
  }
@@ -1991,7 +1991,7 @@
1991
1991
  }
1992
1992
  return options2;
1993
1993
  }, {}) : {};
1994
- } catch (e) {
1994
+ } catch {
1995
1995
  return {};
1996
1996
  }
1997
1997
  }
@@ -2166,7 +2166,7 @@
2166
2166
  };
2167
2167
  App.util = util;
2168
2168
  App.options = {};
2169
- App.version = "3.23.13-dev.f819730bb";
2169
+ App.version = "3.23.14-dev.be820cd99";
2170
2170
 
2171
2171
  const PREFIX = "uk-";
2172
2172
  const DATA = "__uikit__";
@@ -2623,7 +2623,7 @@
2623
2623
  })
2624
2624
  );
2625
2625
  return true;
2626
- } catch (e) {
2626
+ } catch {
2627
2627
  return false;
2628
2628
  }
2629
2629
  },
@@ -2991,63 +2991,77 @@
2991
2991
  args: "autoplay",
2992
2992
  props: {
2993
2993
  automute: Boolean,
2994
- autoplay: Boolean
2994
+ autoplay: Boolean,
2995
+ restart: Boolean,
2996
+ hoverTarget: Boolean
2995
2997
  },
2996
2998
  data: {
2997
2999
  automute: false,
2998
- autoplay: true
3000
+ autoplay: true,
3001
+ restart: false,
3002
+ hoverTarget: false
2999
3003
  },
3000
3004
  beforeConnect() {
3001
- if (this.autoplay === "inview" && !hasAttr(this.$el, "preload")) {
3005
+ const isVideo = isTag(this.$el, "video");
3006
+ if (this.autoplay === "inview" && isVideo && !hasAttr(this.$el, "preload")) {
3002
3007
  this.$el.preload = "none";
3003
3008
  }
3004
- if (isTag(this.$el, "iframe") && !hasAttr(this.$el, "allow")) {
3009
+ if (!isVideo && !hasAttr(this.$el, "allow")) {
3005
3010
  this.$el.allow = "autoplay";
3006
3011
  }
3007
3012
  if (this.autoplay === "hover") {
3008
- if (isTag(this.$el, "video")) {
3013
+ if (isVideo) {
3009
3014
  this.$el.tabIndex = 0;
3010
3015
  } else {
3011
3016
  this.autoplay = true;
3012
3017
  }
3013
3018
  }
3014
- if (this.automute) {
3019
+ if (this.automute || hasAttr(this.$el, "muted")) {
3015
3020
  mute(this.$el);
3016
3021
  }
3017
3022
  },
3018
3023
  events: [
3019
3024
  {
3020
3025
  name: `${pointerEnter} focusin`,
3026
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3021
3027
  filter: ({ autoplay }) => includes(autoplay, "hover"),
3022
3028
  handler(e) {
3023
3029
  if (!isTouch(e) || !isPlaying(this.$el)) {
3024
3030
  play(this.$el);
3025
3031
  } else {
3026
- pause(this.$el);
3032
+ pauseHover(this.$el, this.restart);
3027
3033
  }
3028
3034
  }
3029
3035
  },
3030
3036
  {
3031
3037
  name: `${pointerLeave} focusout`,
3038
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3032
3039
  filter: ({ autoplay }) => includes(autoplay, "hover"),
3033
3040
  handler(e) {
3034
3041
  if (!isTouch(e)) {
3035
- pause(this.$el);
3042
+ pauseHover(this.$el, this.restart);
3036
3043
  }
3037
3044
  }
3038
3045
  }
3039
3046
  ],
3040
3047
  observe: [
3041
3048
  intersection({
3042
- filter: ({ autoplay }) => autoplay !== "hover",
3043
- handler([{ isIntersecting }]) {
3049
+ filter: ({ $el }) => $el.preload === "none",
3050
+ handler([{ target }]) {
3051
+ target.preload = "";
3052
+ this.$reset();
3053
+ }
3054
+ }),
3055
+ intersection({
3056
+ filter: ({ $el, autoplay }) => autoplay !== "hover" && $el.preload !== "none",
3057
+ handler([{ isIntersecting, target }]) {
3044
3058
  if (!document.fullscreenElement) {
3045
3059
  if (isIntersecting) {
3046
3060
  if (this.autoplay) {
3047
- play(this.$el);
3061
+ play(target);
3048
3062
  }
3049
3063
  } else {
3050
- pause(this.$el);
3064
+ pauseHover(target, this.restart);
3051
3065
  }
3052
3066
  }
3053
3067
  },
@@ -3061,6 +3075,12 @@
3061
3075
  function isPlaying(videoEl) {
3062
3076
  return !videoEl.paused && !videoEl.ended;
3063
3077
  }
3078
+ function pauseHover(el, restart) {
3079
+ pause(el);
3080
+ if (restart && isTag(el, "video")) {
3081
+ el.currentTime = 0;
3082
+ }
3083
+ }
3064
3084
 
3065
3085
  var cover = {
3066
3086
  mixins: [Video],
@@ -3162,7 +3182,7 @@
3162
3182
  const props = {
3163
3183
  overflowY: CSS.supports("overflow", "clip") ? "clip" : "hidden",
3164
3184
  touchAction: "none",
3165
- paddingRight: width(window) - scrollingElement.clientWidth || ""
3185
+ scrollbarGutter: "stable"
3166
3186
  };
3167
3187
  css(scrollingElement, props);
3168
3188
  return () => {
@@ -3174,7 +3194,7 @@
3174
3194
 
3175
3195
  let active$1;
3176
3196
  var drop = {
3177
- mixins: [Container, Position, Togglable],
3197
+ mixins: [Class, Container, Position, Togglable],
3178
3198
  args: "pos",
3179
3199
  props: {
3180
3200
  mode: "list",
@@ -3189,7 +3209,6 @@
3189
3209
  delayShow: Number,
3190
3210
  delayHide: Number,
3191
3211
  autoUpdate: Boolean,
3192
- clsDrop: String,
3193
3212
  animateOut: Boolean,
3194
3213
  bgScroll: Boolean,
3195
3214
  closeOnScroll: Boolean
@@ -3207,7 +3226,6 @@
3207
3226
  delayShow: 0,
3208
3227
  delayHide: 800,
3209
3228
  autoUpdate: true,
3210
- clsDrop: false,
3211
3229
  animateOut: false,
3212
3230
  bgScroll: true,
3213
3231
  animation: ["uk-animation-fade"],
@@ -3235,11 +3253,8 @@
3235
3253
  created() {
3236
3254
  this.tracker = new MouseTracker();
3237
3255
  },
3238
- beforeConnect() {
3239
- this.clsDrop = this.$props.clsDrop || this.$options.id;
3240
- },
3241
3256
  connected() {
3242
- addClass(this.$el, "uk-drop", this.clsDrop);
3257
+ addClass(this.$el, "uk-drop");
3243
3258
  if (this.toggle && !this.targetEl) {
3244
3259
  this.targetEl = createToggleComponent(this);
3245
3260
  }
@@ -3548,7 +3563,6 @@
3548
3563
  mixins: [Class, Container],
3549
3564
  props: {
3550
3565
  align: String,
3551
- clsDrop: String,
3552
3566
  boundary: Boolean,
3553
3567
  dropbar: Boolean,
3554
3568
  dropbarAnchor: Boolean,
@@ -3572,6 +3586,7 @@
3572
3586
  boundary: true,
3573
3587
  dropbar: false,
3574
3588
  dropbarAnchor: false,
3589
+ flip: true,
3575
3590
  delayShow: 160,
3576
3591
  duration: 200,
3577
3592
  container: false,
@@ -3584,7 +3599,7 @@
3584
3599
  return null;
3585
3600
  }
3586
3601
  dropbar = this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);
3587
- return dropbar ? dropbar : this._dropbar = $("<div></div>");
3602
+ return dropbar ? dropbar : this._dropbar = $("<div>");
3588
3603
  },
3589
3604
  dropContainer(_, $el) {
3590
3605
  return this.container || $el;
@@ -3830,10 +3845,10 @@
3830
3845
  this.dropdowns.filter((el) => !this.getDropdown(el)),
3831
3846
  {
3832
3847
  ...this.$props,
3833
- flip: false,
3848
+ flip: this.flip && !this.$props.dropbar,
3834
3849
  shift: true,
3835
3850
  pos: `bottom-${this.align}`,
3836
- boundary: this.boundary === true ? this.$el : this.boundary
3851
+ boundaryX: this.boundary === true ? this.$el : this.boundary
3837
3852
  }
3838
3853
  );
3839
3854
  }
@@ -4347,7 +4362,7 @@
4347
4362
 
4348
4363
  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>";
4349
4364
 
4350
- var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><style>.uk-navbar-toggle-icon svg&gt;[class*=&quot;line-&quot;]{transition:0.2s ease-in-out;transition-property:transform, opacity;transform-origin:center;opacity:1}.uk-navbar-toggle-icon 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 width=\"20\" height=\"2\" y=\"3\" class=\"line-1\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-2\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-3\"/><rect width=\"20\" height=\"2\" y=\"15\" class=\"line-4\"/></svg>";
4365
+ var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><style>.uk-navbar-toggle-icon svg&gt;[class*=&quot;line-&quot;]{transition:0.2s ease-in-out;transition-property:transform, opacity;transform-origin:center;opacity:1}.uk-navbar-toggle-icon svg&gt;.line-3{opacity:0}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-3,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-3{opacity:1}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-2,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-2{transform:rotate(45deg)}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-3,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-3{transform:rotate(-45deg)}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-1,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-1,[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-4,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-4{opacity:0}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-1,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-1{transform:translateY(6px) scaleX(0)}[aria-expanded=&quot;true&quot;].uk-navbar-toggle-icon svg&gt;.line-4,[aria-expanded=&quot;true&quot;]&gt;.uk-navbar-toggle-icon svg&gt;.line-4{transform:translateY(-6px) scaleX(0)}</style><rect width=\"20\" height=\"2\" y=\"3\" class=\"line-1\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-2\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-3\"/><rect width=\"20\" height=\"2\" y=\"15\" class=\"line-4\"/></svg>";
4351
4366
 
4352
4367
  var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"><rect width=\"1\" height=\"40\" x=\"19\" y=\"0\"/><rect width=\"40\" height=\"1\" x=\"0\" y=\"19\"/></svg>";
4353
4368
 
@@ -4761,7 +4776,7 @@
4761
4776
  if (startsWith(sources, "[")) {
4762
4777
  try {
4763
4778
  sources = JSON.parse(sources);
4764
- } catch (e) {
4779
+ } catch {
4765
4780
  sources = [];
4766
4781
  }
4767
4782
  } else {
@@ -4983,6 +4998,13 @@
4983
4998
  }
4984
4999
  };
4985
5000
 
5001
+ function awaitFrame() {
5002
+ return new Promise((resolve) => requestAnimationFrame(resolve));
5003
+ }
5004
+ function awaitTimeout(timeout) {
5005
+ return new Promise((resolve) => setTimeout(resolve, timeout));
5006
+ }
5007
+
4986
5008
  const active = [];
4987
5009
  var Modal = {
4988
5010
  mixins: [Class, Container, Togglable],
@@ -5127,12 +5149,10 @@
5127
5149
  toggle() {
5128
5150
  return this.isToggled() ? this.hide() : this.show();
5129
5151
  },
5130
- show() {
5152
+ async show() {
5131
5153
  if (this.container && parent(this.$el) !== this.container) {
5132
5154
  append(this.container, this.$el);
5133
- return new Promise(
5134
- (resolve) => requestAnimationFrame(() => this.show().then(resolve))
5135
- );
5155
+ await awaitFrame();
5136
5156
  }
5137
5157
  return this.toggleElement(this.$el, true, animate);
5138
5158
  },
@@ -5337,6 +5357,7 @@
5337
5357
  dropbarTransparentMode: Boolean
5338
5358
  },
5339
5359
  data: {
5360
+ flip: false,
5340
5361
  delayShow: 200,
5341
5362
  clsDrop: "uk-navbar-dropdown",
5342
5363
  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",
@@ -5371,7 +5392,7 @@
5371
5392
  name: "hide",
5372
5393
  el: ({ dropContainer }) => dropContainer,
5373
5394
  async handler() {
5374
- await awaitMacroTask();
5395
+ await awaitTimeout();
5375
5396
  if (this._transparent && (!active$1 || !this.dropContainer.contains(active$1.$el))) {
5376
5397
  addClass(this.navbarContainer, clsNavbarTransparent);
5377
5398
  this._transparent = null;
@@ -5398,9 +5419,6 @@
5398
5419
  }
5399
5420
  }
5400
5421
  };
5401
- function awaitMacroTask() {
5402
- return new Promise((resolve) => setTimeout(resolve));
5403
- }
5404
5422
 
5405
5423
  var offcanvas = {
5406
5424
  mixins: [Modal],
@@ -5561,6 +5579,59 @@
5561
5579
  }
5562
5580
  };
5563
5581
 
5582
+ var overflowFade = {
5583
+ data: {
5584
+ fadeDuration: 0.05
5585
+ },
5586
+ events: {
5587
+ name: "scroll",
5588
+ self: true,
5589
+ passive: true,
5590
+ handler() {
5591
+ this.$emit();
5592
+ }
5593
+ },
5594
+ observe: [
5595
+ mutation({
5596
+ options: {
5597
+ subtree: true,
5598
+ childList: true
5599
+ }
5600
+ }),
5601
+ resize({
5602
+ target: ({ $el }) => [$el, ...children($el)]
5603
+ })
5604
+ ],
5605
+ update: {
5606
+ read() {
5607
+ const overflow = [];
5608
+ for (const prop of ["Width", "Height"]) {
5609
+ overflow.push(this.$el[`scroll${prop}`] - this.$el[`client${prop}`]);
5610
+ }
5611
+ return { overflow };
5612
+ },
5613
+ write({ overflow }) {
5614
+ for (let i = 0; i < 2; i++) {
5615
+ toggleClass(
5616
+ this.$el,
5617
+ `${this.$options.id}-${i ? "vertical" : "horizontal"}`,
5618
+ overflow[i] && !overflow[i - 1]
5619
+ );
5620
+ if (!overflow[i - 1]) {
5621
+ const dir = i ? "Top" : "Left";
5622
+ const percent = overflow[i] ? this.$el[`scroll${dir}`] / overflow[i] : 0;
5623
+ const toValue = (value) => overflow[i] ? clamp((this.fadeDuration - value) / this.fadeDuration) : 1;
5624
+ css(this.$el, {
5625
+ "--uk-overflow-fade-start-opacity": toValue(percent),
5626
+ "--uk-overflow-fade-end-opacity": toValue(1 - percent)
5627
+ });
5628
+ }
5629
+ }
5630
+ },
5631
+ events: ["resize"]
5632
+ }
5633
+ };
5634
+
5564
5635
  var responsive = {
5565
5636
  props: ["width", "height"],
5566
5637
  connected() {
@@ -5654,7 +5725,7 @@
5654
5725
  },
5655
5726
  disconnected() {
5656
5727
  for (const [el, state] of this.elementData.entries()) {
5657
- removeClass(el, clsInView, (state == null ? void 0 : state.cls) || "");
5728
+ removeClass(el, clsInView, state.cls || "");
5658
5729
  }
5659
5730
  delete this.elementData;
5660
5731
  },
@@ -5685,7 +5756,8 @@
5685
5756
  for (const [el, state] of this.elementData.entries()) {
5686
5757
  if (state.show && !state.inview && !state.queued) {
5687
5758
  state.queued = true;
5688
- data.promise = (data.promise || Promise.resolve()).then(() => new Promise((resolve) => setTimeout(resolve, this.delay))).then(() => {
5759
+ data.promise = (data.promise || Promise.resolve()).then(async () => {
5760
+ await awaitTimeout(state.show ? this.delay : 0);
5689
5761
  this.toggle(el, true);
5690
5762
  setTimeout(() => {
5691
5763
  state.queued = false;
@@ -5881,20 +5953,19 @@
5881
5953
  name: "load hashchange popstate",
5882
5954
  el: () => window,
5883
5955
  filter: ({ targetOffset }) => targetOffset !== false,
5884
- handler() {
5956
+ async handler() {
5885
5957
  const { scrollingElement } = document;
5886
5958
  if (!location.hash || scrollingElement.scrollTop === 0) {
5887
5959
  return;
5888
5960
  }
5889
- setTimeout(() => {
5890
- const targetOffset = offset($(location.hash));
5891
- const elOffset = offset(this.$el);
5892
- if (this.isFixed && intersectRect(targetOffset, elOffset)) {
5893
- scrollingElement.scrollTop = Math.ceil(
5894
- targetOffset.top - elOffset.height - toPx(this.targetOffset, "height", this.placeholder) - toPx(this.offset, "height", this.placeholder)
5895
- );
5896
- }
5897
- });
5961
+ await awaitTimeout();
5962
+ const targetOffset = offset($(location.hash));
5963
+ const elOffset = offset(this.$el);
5964
+ if (this.isFixed && intersectRect(targetOffset, elOffset)) {
5965
+ scrollingElement.scrollTop = Math.ceil(
5966
+ targetOffset.top - elOffset.height - toPx(this.targetOffset, "height", this.placeholder) - toPx(this.offset, "height", this.placeholder)
5967
+ );
5968
+ }
5898
5969
  }
5899
5970
  }
5900
5971
  ],
@@ -6153,10 +6224,11 @@
6153
6224
  css(el, { position: "", top: "", marginTop: "", width: "" });
6154
6225
  }
6155
6226
  const clsTransitionDisable = "uk-transition-disable";
6156
- function preventTransition(element) {
6227
+ async function preventTransition(element) {
6157
6228
  if (!hasClass(element, clsTransitionDisable)) {
6158
6229
  addClass(element, clsTransitionDisable);
6159
- requestAnimationFrame(() => removeClass(element, clsTransitionDisable));
6230
+ await awaitFrame();
6231
+ removeClass(element, clsTransitionDisable);
6160
6232
  }
6161
6233
  }
6162
6234
  function getVisibleParent(element) {
@@ -6503,17 +6575,15 @@
6503
6575
  }
6504
6576
  },
6505
6577
  {
6506
- // mouseenter mouseleave are added because of Firefox bug,
6507
- // where pointerleave is triggered immediately after pointerenter on scroll
6508
- name: `mouseenter mouseleave ${pointerEnter} ${pointerLeave} focus blur`,
6578
+ name: `${pointerEnter} ${pointerLeave} focus blur`,
6509
6579
  filter: ({ mode }) => includes(mode, "hover"),
6510
6580
  handler(e) {
6511
6581
  if (isTouch(e) || this.$el.disabled || document.readyState === "loading") {
6512
6582
  return;
6513
6583
  }
6514
- const show = includes(["mouseenter", pointerEnter, "focus"], e.type);
6584
+ const show = includes([pointerEnter, "focus"], e.type);
6515
6585
  const expanded = this.isToggled(this.target);
6516
- if (!show && (!isBoolean(this._showState) || e.type !== "blur" && matches(this.$el, ":focus") || e.type === "blur" && matches(this.$el, ":hover"))) {
6586
+ if (!show && (!isBoolean(this._showState) || e.type === pointerLeave && matches(this.$el, ":focus") || e.type === "blur" && matches(this.$el, ":hover"))) {
6517
6587
  if (expanded === this._showState) {
6518
6588
  this._showState = null;
6519
6589
  }
@@ -6623,6 +6693,7 @@
6623
6693
  NavbarToggleIcon: NavbarToggleIcon,
6624
6694
  Offcanvas: offcanvas,
6625
6695
  OverflowAuto: overflowAuto,
6696
+ OverflowFade: overflowFade,
6626
6697
  OverlayIcon: IconComponent,
6627
6698
  PaginationNext: PaginationNext,
6628
6699
  PaginationPrevious: PaginationPrevious,