uikit 3.25.29-dev.e02d266 → 3.25.29-dev.f3e1c53

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 (63) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/css/uikit-core-rtl.css +1 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +1 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +1 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +1 -1
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +12 -11
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +23 -18
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +23 -18
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +5 -2
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +10 -9
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +11 -10
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +11 -10
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +11 -10
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  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 +71 -77
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +71 -77
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/computed.js +1 -1
  44. package/src/js/api/observables.js +5 -4
  45. package/src/js/api/observer.js +3 -4
  46. package/src/js/api/update.js +10 -9
  47. package/src/js/core/alert.js +6 -3
  48. package/src/js/core/drop.js +4 -4
  49. package/src/js/core/dropnav.js +1 -1
  50. package/src/js/core/grid.js +1 -1
  51. package/src/js/core/icon.js +6 -12
  52. package/src/js/core/img.js +3 -3
  53. package/src/js/core/inverse.js +4 -2
  54. package/src/js/core/margin.js +1 -1
  55. package/src/js/core/modal.js +1 -1
  56. package/src/js/core/overflow-fade.js +6 -2
  57. package/src/js/core/switcher.js +1 -0
  58. package/src/js/core/toggle.js +0 -2
  59. package/src/js/mixin/event.js +4 -1
  60. package/src/js/util/lang.js +8 -33
  61. package/src/js/util/scroll.js +14 -9
  62. package/tests/alert.html +2 -2
  63. package/tests/overflow-fade.test.mjs +69 -0
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.25.29-dev.e02d266 | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
1
+ /*! UIkit 3.25.29-dev.f3e1c53 | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -156,28 +156,17 @@
156
156
  function pointInRect(point, rect) {
157
157
  return point.x <= rect.right && point.x >= rect.left && point.y <= rect.bottom && point.y >= rect.top;
158
158
  }
159
- function ratio(dimensions, prop, value) {
160
- const aProp = prop === "width" ? "height" : "width";
159
+ function cover$1(dimensions, maxDimensions) {
160
+ const scale = Math.max(
161
+ dimensions.width ? maxDimensions.width / dimensions.width : 0,
162
+ dimensions.height ? maxDimensions.height / dimensions.height : 0
163
+ );
161
164
  return {
162
- [aProp]: dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp],
163
- [prop]: value
165
+ width: Math.round(dimensions.width * scale),
166
+ height: Math.round(dimensions.height * scale)
164
167
  };
165
168
  }
166
- function contain(dimensions, maxDimensions) {
167
- dimensions = { ...dimensions };
168
- for (const prop in dimensions) {
169
- dimensions = dimensions[prop] > maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;
170
- }
171
- return dimensions;
172
- }
173
- function cover$1(dimensions, maxDimensions) {
174
- dimensions = contain(dimensions, maxDimensions);
175
- for (const prop in dimensions) {
176
- dimensions = dimensions[prop] < maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;
177
- }
178
- return dimensions;
179
- }
180
- const Dimensions = { ratio, contain, cover: cover$1 };
169
+ const Dimensions = { cover: cover$1 };
181
170
  function getIndex(i, elements, current = 0, finite = false) {
182
171
  elements = toNodes(elements);
183
172
  const { length } = elements;
@@ -1912,22 +1901,23 @@
1912
1901
  if (!instance._updates.length) {
1913
1902
  return;
1914
1903
  }
1915
- if (!instance._updateCount) {
1916
- instance._updateCount = 0;
1917
- requestAnimationFrame(() => instance._updateCount = 0);
1918
- }
1919
1904
  if (!instance._queued) {
1920
1905
  instance._queued = /* @__PURE__ */ new Set();
1921
1906
  fastdom.read(() => {
1922
1907
  if (instance._connected) {
1923
- runUpdates(instance, instance._queued);
1908
+ if (!instance._updateCount) {
1909
+ instance._updateCount = 0;
1910
+ requestAnimationFrame(() => instance._updateCount = 0);
1911
+ }
1912
+ if (instance._updateCount < 10) {
1913
+ instance._updateCount++;
1914
+ runUpdates(instance, instance._queued);
1915
+ }
1924
1916
  }
1925
1917
  instance._queued = null;
1926
1918
  });
1927
1919
  }
1928
- if (instance._updateCount++ < 20) {
1929
- instance._queued.add(e.type || e);
1930
- }
1920
+ instance._queued.add(e.type || e);
1931
1921
  }
1932
1922
  function runUpdates(instance, types) {
1933
1923
  for (const { read, write, events = [] } of instance._updates) {
@@ -2002,8 +1992,11 @@
2002
1992
  const pos = getEventPos(e);
2003
1993
  const target = "tagName" in e.target ? e.target : parent(e.target);
2004
1994
  once(document, `${pointerUp$1} ${pointerCancel} scroll`, (e2) => {
1995
+ if (e2.type !== pointerUp$1 || !target) {
1996
+ return;
1997
+ }
2005
1998
  const { x, y } = getEventPos(e2);
2006
- if (e2.type !== "scroll" && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
1999
+ if (x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
2007
2000
  setTimeout(() => {
2008
2001
  trigger(target, "swipe");
2009
2002
  trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`);
@@ -2105,7 +2098,7 @@
2105
2098
  }
2106
2099
  const offsetCurrent = getOffset(current[0], withOffset);
2107
2100
  if (offset.top >= offsetCurrent.bottom - 1 && offset.top !== offsetCurrent.top) {
2108
- sorted.push([el]);
2101
+ sorted.splice(i + 1, 0, [el]);
2109
2102
  break;
2110
2103
  }
2111
2104
  if (offset.bottom - 1 > offsetCurrent.top || offset.top === offsetCurrent.top) {
@@ -2369,7 +2362,7 @@
2369
2362
  }
2370
2363
 
2371
2364
  function maybeDefaultPreventClick(e) {
2372
- if (e.target.closest('a[href="#"],a[href=""]')) {
2365
+ if (e.type === "keydown" && e.keyCode === keyMap.SPACE || e.target.closest('a[href="#"],a[href=""]')) {
2373
2366
  e.preventDefault();
2374
2367
  }
2375
2368
  }
@@ -2608,8 +2601,9 @@
2608
2601
  const elements = isTag(parentNode, "picture") ? children(parentNode) : [el];
2609
2602
  elements.forEach((el2) => setSourceProps(el2, el2));
2610
2603
  } else if (src) {
2611
- if (!includes(el.style.backgroundImage, src)) {
2612
- css(el, "backgroundImage", `url(${escape(src)})`);
2604
+ const previousBackground = el.style.backgroundImage;
2605
+ css(el, "backgroundImage", `url(${escape(src)})`);
2606
+ if (el.style.backgroundImage !== previousBackground) {
2613
2607
  trigger(el, createEvent("load", false));
2614
2608
  }
2615
2609
  }
@@ -2662,7 +2656,7 @@
2662
2656
  return isTag(el, "img");
2663
2657
  }
2664
2658
 
2665
- let prevented;
2659
+ let scrollLocks = 0;
2666
2660
  function preventBackgroundScroll(el) {
2667
2661
  const off = on(
2668
2662
  el,
@@ -2697,21 +2691,25 @@
2697
2691
  },
2698
2692
  { passive: true }
2699
2693
  );
2700
- if (prevented) {
2701
- return off;
2702
- }
2703
- prevented = true;
2704
2694
  const { scrollingElement } = document;
2705
2695
  const props = {
2706
2696
  overflowY: CSS.supports("overflow", "clip") ? "clip" : "hidden",
2707
2697
  touchAction: "none",
2708
2698
  scrollbarGutter: width(window) - scrollingElement.clientWidth ? "stable" : ""
2709
2699
  };
2710
- css(scrollingElement, props);
2700
+ if (!scrollLocks++) {
2701
+ css(scrollingElement, props);
2702
+ }
2703
+ let released = false;
2711
2704
  return () => {
2712
- prevented = false;
2705
+ if (released) {
2706
+ return;
2707
+ }
2708
+ released = true;
2713
2709
  off();
2714
- resetProps(scrollingElement, props);
2710
+ if (!--scrollLocks) {
2711
+ resetProps(scrollingElement, props);
2712
+ }
2715
2713
  };
2716
2714
  }
2717
2715
 
@@ -3419,7 +3417,7 @@
3419
3417
  return Math.atan2(Math.abs(pos2.y - pos1.y), Math.abs(pos2.x - pos1.x)) * 180 / Math.PI;
3420
3418
  }
3421
3419
 
3422
- var VERSION = '3.25.29-dev.e02d266';
3420
+ var VERSION = '3.25.29-dev.f3e1c53';
3423
3421
 
3424
3422
  function initWatches(instance) {
3425
3423
  instance._watches = [];
@@ -3502,7 +3500,7 @@
3502
3500
  });
3503
3501
  }
3504
3502
  function resetComputed(instance) {
3505
- const values = { ...instance._computed };
3503
+ const values = instance._computed;
3506
3504
  instance._computed = {};
3507
3505
  return values;
3508
3506
  }
@@ -3538,16 +3536,15 @@
3538
3536
  }
3539
3537
 
3540
3538
  function initObservers(instance) {
3541
- for (const observer of instance.$options.observe || []) {
3542
- registerObservable(instance, observer);
3539
+ for (const [index, observer] of (instance.$options.observe || []).entries()) {
3540
+ registerObservable(instance, observer, `_observe${index}`);
3543
3541
  }
3544
3542
  }
3545
- function registerObservable(instance, observable) {
3543
+ function registerObservable(instance, observable, key) {
3546
3544
  let { observe, target = instance.$el, handler, options, filter, args } = observable;
3547
3545
  if (filter && !filter.call(instance, instance)) {
3548
3546
  return;
3549
3547
  }
3550
- const key = `_observe${instance._disconnect.length}`;
3551
3548
  if (isFunction(target) && !hasOwn(instance, key)) {
3552
3549
  registerComputed(instance, key, () => {
3553
3550
  const targets2 = target.call(instance, instance);
@@ -6910,11 +6907,10 @@
6910
6907
  mixins: [Class, Togglable],
6911
6908
  args: "animation",
6912
6909
  props: {
6913
- animation: Boolean,
6914
6910
  close: String
6915
6911
  },
6916
6912
  data: {
6917
- animation: true,
6913
+ animation: [true],
6918
6914
  selClose: ".uk-alert-close",
6919
6915
  duration: 150
6920
6916
  },
@@ -6928,7 +6924,11 @@
6928
6924
  },
6929
6925
  methods: {
6930
6926
  async close() {
6931
- await this.toggleElement(this.$el, false, this.animation ? animate : false);
6927
+ await this.toggleElement(
6928
+ this.$el,
6929
+ false,
6930
+ this.animation[0] === true || this.animation[0] === 1 ? animate : true
6931
+ );
6932
6932
  this.$destroy(true);
6933
6933
  }
6934
6934
  }
@@ -7160,11 +7160,10 @@
7160
7160
  attr(this.targetEl, "aria-expanded", false);
7161
7161
  this._style = pick(this.$el.style, ["width", "height"]);
7162
7162
  },
7163
+ beforeDisconnect() {
7164
+ this.hide(false, false);
7165
+ },
7163
7166
  disconnected() {
7164
- if (this.isActive()) {
7165
- this.hide(false);
7166
- active = null;
7167
- }
7168
7167
  css(this.$el, this._style);
7169
7168
  },
7170
7169
  events: [
@@ -7593,7 +7592,7 @@
7593
7592
  el: ({ dropContainer }) => dropContainer,
7594
7593
  delegate: ({ clsDrop }) => `.${clsDrop}`,
7595
7594
  handler(e) {
7596
- var _a;
7595
+ var _a, _b;
7597
7596
  const { current, keyCode, target } = e;
7598
7597
  if (isInput(target) || !includes(this.dropdowns, current)) {
7599
7598
  return;
@@ -7603,15 +7602,15 @@
7603
7602
  if (~next) {
7604
7603
  e.preventDefault();
7605
7604
  const elements = $$(selFocusable, current);
7606
- elements[getIndex(
7605
+ (_a = elements[getIndex(
7607
7606
  next,
7608
7607
  elements,
7609
7608
  findIndex(elements, (el) => matches(el, ":focus"))
7610
- )].focus();
7609
+ )]) == null ? void 0 : _a.focus();
7611
7610
  return;
7612
7611
  }
7613
7612
  if (keyCode === keyMap.ESC) {
7614
- (_a = active2.targetEl) == null ? void 0 : _a.focus();
7613
+ (_b = active2.targetEl) == null ? void 0 : _b.focus();
7615
7614
  }
7616
7615
  handleNavItemNavigation(e, this.items, active2);
7617
7616
  }
@@ -7910,7 +7909,7 @@
7910
7909
  };
7911
7910
  },
7912
7911
  write({ columns, scrolled, scrollColumns, translates }) {
7913
- if (!scrolled && !translates) {
7912
+ if (scrolled === false && !translates) {
7914
7913
  return;
7915
7914
  }
7916
7915
  columns.forEach(
@@ -8329,16 +8328,9 @@
8329
8328
  beforeConnect() {
8330
8329
  const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle");
8331
8330
  this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && this.$el.closest(".uk-search-large") ? "search-large" : this.$el.closest(".uk-search-medium") ? "search-medium" : this.$props.icon;
8332
- if (hasAttr(this.$el, "aria-label")) {
8333
- return;
8334
- }
8335
- if (isToggle) {
8336
- this.$el.ariaLabel = this.t("toggle");
8337
- } else {
8338
- const button = this.$el.closest("a,button");
8339
- if (button) {
8340
- button.ariaLabel = this.t("submit");
8341
- }
8331
+ const target = isToggle ? this.$el : this.$el.closest("a,button");
8332
+ if (target && !hasAttr(target, "aria-label")) {
8333
+ target.ariaLabel = this.t(isToggle ? "toggle" : "submit");
8342
8334
  }
8343
8335
  }
8344
8336
  };
@@ -8424,7 +8416,7 @@
8424
8416
  apply(
8425
8417
  document.body,
8426
8418
  (el) => each(UIkit.getComponents(el), (cmp) => {
8427
- cmp.$options.isIcon && cmp.icon in added && cmp.$reset();
8419
+ cmp.$options.isIcon && (aliases[cmp.icon] || cmp.icon) in added && cmp.$reset();
8428
8420
  })
8429
8421
  );
8430
8422
  }
@@ -8491,6 +8483,7 @@
8491
8483
  [...toNodes(target), document.documentElement],
8492
8484
  handler
8493
8485
  );
8486
+ const transitionObserver = observeResize([], handler);
8494
8487
  const listener = [
8495
8488
  on(document, "scroll itemshown itemhidden", handler, {
8496
8489
  passive: true,
@@ -8498,11 +8491,11 @@
8498
8491
  }),
8499
8492
  on(document, "show hide transitionstart", (e) => {
8500
8493
  handler();
8501
- return observer.observe(e.target);
8494
+ return transitionObserver.observe(e.target);
8502
8495
  }),
8503
8496
  on(document, "shown hidden transitionend transitioncancel", (e) => {
8504
8497
  handler();
8505
- return observer.unobserve(e.target);
8498
+ return transitionObserver.unobserve(e.target);
8506
8499
  })
8507
8500
  ];
8508
8501
  return {
@@ -8510,6 +8503,7 @@
8510
8503
  unobserve: observer.unobserve.bind(observer),
8511
8504
  disconnect() {
8512
8505
  observer.disconnect();
8506
+ transitionObserver.disconnect();
8513
8507
  listener.forEach((off) => off());
8514
8508
  }
8515
8509
  };
@@ -8712,7 +8706,7 @@
8712
8706
  const dialog = modal.dialog(tmpl(options), options);
8713
8707
  return assign(
8714
8708
  new Promise((resolve) => {
8715
- const off = on(dialog.$el, "hide", () => resolve(hideFn()));
8709
+ const off = on(dialog.$el, "hide", () => resolve(hideFn()), { self: true });
8716
8710
  on(dialog.$el, "submit", "form", (e) => {
8717
8711
  e.preventDefault();
8718
8712
  resolve(submitFn(dialog));
@@ -9015,7 +9009,8 @@
9015
9009
  );
9016
9010
  if (!overflow[i - 1]) {
9017
9011
  const dir = i ? "Top" : "Left";
9018
- const percent = overflow[i] ? this.$el[`scroll${dir}`] / overflow[i] : 0;
9012
+ const position = this.$el[`scroll${dir}`] + (!i && isRtl ? overflow[i] : 0);
9013
+ const percent = overflow[i] ? position / overflow[i] : 0;
9019
9014
  const toValue = (value) => overflow[i] ? clamp((this.fadeDuration - value) / this.fadeDuration) : 1;
9020
9015
  css(this.$el, {
9021
9016
  "--uk-overflow-fade-start-opacity": toValue(percent),
@@ -9037,7 +9032,7 @@
9037
9032
  const { $el: el, threshold, $options } = this;
9038
9033
  let started;
9039
9034
  const off = on(document, pointerMove$1, move(e), pointerOptions);
9040
- on(document, [pointerUp$1, pointerCancel], end, { capture: true, once: true });
9035
+ once(document, [pointerUp$1, pointerCancel], end, true);
9041
9036
  function move(e2) {
9042
9037
  let origin = getEventPos(e2);
9043
9038
  let pos = origin;
@@ -9819,7 +9814,7 @@
9819
9814
  name: "click keydown",
9820
9815
  delegate: ({ toggle }) => toggle,
9821
9816
  handler(e) {
9822
- if (!matches(e.current, selDisabled) && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
9817
+ if (!e.defaultPrevented && !matches(e.current, selDisabled) && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
9823
9818
  maybeDefaultPreventClick(e);
9824
9819
  this.show(e.current);
9825
9820
  }
@@ -10058,7 +10053,6 @@
10058
10053
  {
10059
10054
  name: "mediachange",
10060
10055
  filter: ({ mode }) => includes(mode, "media"),
10061
- el: ({ target }) => target,
10062
10056
  handler(e, mediaObj) {
10063
10057
  if (mediaObj.matches ^ this.isToggled(this.target)) {
10064
10058
  this.toggle();