uikit 3.25.29-dev.f3e1c53 → 3.25.30-dev.188f79c

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 (51) hide show
  1. package/CHANGELOG.md +10 -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 +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +8 -13
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +9 -14
  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 -15
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +11 -15
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +15 -24
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +11 -15
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +15 -24
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  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 +39 -21
  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 +47 -34
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +2 -2
  43. package/src/js/components/lightbox-panel.js +3 -3
  44. package/src/js/components/lightbox.js +1 -1
  45. package/src/js/core/grid.js +1 -3
  46. package/src/js/core/icon.js +2 -6
  47. package/src/js/core/svg.js +30 -6
  48. package/src/js/mixin/slider-nav.js +6 -11
  49. package/src/js/util/filter.js +6 -1
  50. package/src/js/util/svg.js +7 -6
  51. package/src/js/util/viewport.js +1 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.25.29-dev.f3e1c53",
5
+ "version": "3.25.30-dev.188f79c",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -30,7 +30,7 @@
30
30
  "url": "https://github.com/uikit/uikit/issues"
31
31
  },
32
32
  "homepage": "https://getuikit.com",
33
- "packageManager": "pnpm@12.9.1",
33
+ "packageManager": "pnpm@12.16.1",
34
34
  "devDependencies": {
35
35
  "@eslint/js": "^10.0.1",
36
36
  "@rollup/plugin-alias": "^6.0.0",
@@ -344,7 +344,7 @@ export default {
344
344
  try {
345
345
  const { height, width } = await (
346
346
  await fetch(
347
- `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(
347
+ `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURIComponent(
348
348
  src,
349
349
  )}`,
350
350
  { credentials: 'omit' },
@@ -463,9 +463,9 @@ function toThumbnavItem(item, videoAutoplay) {
463
463
  }
464
464
 
465
465
  function isImage(src) {
466
- return src?.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i);
466
+ return src?.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|[?#])/i);
467
467
  }
468
468
 
469
469
  function isVideo(src) {
470
- return src?.match(/\.(mp4|webm|ogv)($|\?)/i);
470
+ return src?.match(/\.(mp4|webm|ogv)($|[?#])/i);
471
471
  }
@@ -71,7 +71,7 @@ export default {
71
71
  index = findIndex(items, ({ source: src }) => source === src);
72
72
  }
73
73
 
74
- this.panel = this.panel || this.$create('lightboxPanel', { ...this.$props, items });
74
+ this.panel ||= this.$create('lightboxPanel', { ...this.$props, items });
75
75
 
76
76
  on(this.panel.$el, 'hidden', () => (this.panel = null));
77
77
 
@@ -201,8 +201,6 @@ function transpose(rows) {
201
201
  }
202
202
 
203
203
  function push(array, index, value) {
204
- if (!array[index]) {
205
- array[index] = [];
206
- }
204
+ array[index] ||= [];
207
205
  array[index].push(value);
208
206
  }
@@ -251,9 +251,7 @@ function install(UIkit) {
251
251
  if (UIkit._initialized) {
252
252
  apply(document.body, (el) =>
253
253
  each(UIkit.getComponents(el), (cmp) => {
254
- cmp.$options.isIcon &&
255
- (aliases[cmp.icon] || cmp.icon) in added &&
256
- cmp.$reset();
254
+ cmp.$options.isIcon && (aliases[cmp.icon] || cmp.icon) in added && cmp.$reset();
257
255
  }),
258
256
  );
259
257
  }
@@ -269,9 +267,7 @@ function getIcon(icon) {
269
267
  return null;
270
268
  }
271
269
 
272
- if (!parsed[icon]) {
273
- parsed[icon] = parseSVG(icons[applyRtl(icon)] || icons[icon]);
274
- }
270
+ parsed[icon] ||= parseSVG(icons[applyRtl(icon)] || icons[icon]);
275
271
 
276
272
  return parsed[icon].cloneNode(true);
277
273
  }
@@ -1,4 +1,14 @@
1
- import { addClass, attr, css, includes, isTag, memoize, once, removeAttr } from 'uikit-util';
1
+ import {
2
+ addClass,
3
+ attr,
4
+ css,
5
+ hasAttr,
6
+ includes,
7
+ isTag,
8
+ memoize,
9
+ once,
10
+ removeAttr,
11
+ } from 'uikit-util';
2
12
  import { mutation } from '../api/observables';
3
13
  import Svg, { parseSVG } from '../mixin/svg';
4
14
  import { getMaxPathLength } from '../util/svg';
@@ -51,7 +61,11 @@ export default {
51
61
  methods: {
52
62
  async getSvg() {
53
63
  if (isTag(this.$el, 'img') && !this.$el.complete && this.$el.loading === 'lazy') {
54
- await new Promise((resolve) => once(this.$el, 'load', resolve));
64
+ await new Promise((resolve, reject) =>
65
+ once(this.$el, 'load error', (event) =>
66
+ event.type === 'load' ? resolve() : reject(event),
67
+ ),
68
+ );
55
69
  }
56
70
 
57
71
  return parseSVG(await loadSVG(this.src), this.icon) || Promise.reject('SVG not found.');
@@ -60,7 +74,7 @@ export default {
60
74
  };
61
75
 
62
76
  function applyAttributes(el) {
63
- const { $el } = this;
77
+ const { $el, attributes } = this;
64
78
 
65
79
  addClass(el, attr($el, 'class'), 'uk-svg');
66
80
 
@@ -69,12 +83,22 @@ function applyAttributes(el) {
69
83
  css(el, prop, css($el, prop));
70
84
  }
71
85
 
72
- for (const attribute in this.attributes) {
73
- const [prop, value] = this.attributes[attribute].split(':', 2);
86
+ for (const attribute in attributes) {
87
+ const [prop, value] = attributes[attribute].split(':', 2);
74
88
  attr(el, prop, value);
75
89
  }
76
90
 
77
- el.ariaHidden = this.$el.ariaHidden;
91
+ el.ariaHidden ||= $el.ariaHidden;
92
+
93
+ if (!el.ariaHidden) {
94
+ el.ariaLabel ||= $el.ariaLabel || $el.alt || null;
95
+
96
+ if (el.ariaLabel) {
97
+ el.role ||= 'img';
98
+ } else if (hasAttr($el, 'alt')) {
99
+ el.ariaHidden = true;
100
+ }
101
+ }
78
102
 
79
103
  if (!this.$el.id) {
80
104
  removeAttr(el, 'id');
@@ -79,10 +79,7 @@ export default {
79
79
  const slide = this.slides[item];
80
80
 
81
81
  if (slide) {
82
- if (!slide.id) {
83
- slide.id = generateId(this, slide);
84
- }
85
- ariaControls = slide.id;
82
+ ariaControls = slide.id ||= generateId(this, slide);
86
83
  }
87
84
 
88
85
  ariaLabel = this.t('slideX', toFloat(cmd) + 1);
@@ -90,18 +87,14 @@ export default {
90
87
  button.role = 'tab';
91
88
  } else {
92
89
  if (this.list) {
93
- if (!this.list.id) {
94
- this.list.id = generateId(this, this.list);
95
- }
96
-
97
- ariaControls = this.list.id;
90
+ ariaControls = this.list.id ||= generateId(this, this.list);
98
91
  }
99
92
 
100
93
  ariaLabel = this.t(cmd);
101
94
  }
102
95
 
103
96
  attr(button, 'aria-controls', ariaControls);
104
- button.ariaLabel = button.ariaLabel || ariaLabel;
97
+ button.ariaLabel ||= ariaLabel;
105
98
  }
106
99
  },
107
100
 
@@ -126,7 +119,9 @@ export default {
126
119
  update: [
127
120
  {
128
121
  write() {
129
- this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = this.maxIndex < 1));
122
+ this.navItems
123
+ .concat(this.nav)
124
+ .forEach((el) => el && (el.hidden = this.maxIndex < 1));
130
125
  this.updateNav();
131
126
  },
132
127
 
@@ -83,7 +83,12 @@ export function isSameSiteAnchor(el) {
83
83
  export function getTargetedElement(el) {
84
84
  if (isSameSiteAnchor(el)) {
85
85
  const { hash, ownerDocument } = toNode(el);
86
- const id = decodeURIComponent(hash).slice(1);
86
+ let id = hash.slice(1);
87
+ try {
88
+ id = decodeURIComponent(id);
89
+ } catch {
90
+ // Fall back to the literal fragment for malformed encoding.
91
+ }
87
92
  return id
88
93
  ? ownerDocument.getElementById(id) || ownerDocument.getElementsByName(id)[0]
89
94
  : ownerDocument.documentElement;
@@ -1,10 +1,11 @@
1
1
  import { $$ } from './dom';
2
- import { isVisible } from './filter.js';
3
2
 
4
3
  export function getMaxPathLength(el) {
5
- return isVisible(el)
6
- ? Math.ceil(
7
- Math.max(0, ...$$('[stroke]', el).map((stroke) => stroke.getTotalLength?.() || 0)),
8
- )
9
- : 0;
4
+ try {
5
+ return Math.ceil(
6
+ Math.max(0, ...$$('[stroke]', el).map((stroke) => stroke.getTotalLength?.() || 0)),
7
+ );
8
+ } catch {
9
+ return 0;
10
+ }
10
11
  }
@@ -209,7 +209,7 @@ export function offsetViewport(scrollElement) {
209
209
 
210
210
  export function getCoveringElement(target) {
211
211
  const { document } = toWindow(target);
212
- target = target || document.body;
212
+ target ||= document.body;
213
213
  const { left, width, top } = dimensions(target);
214
214
  for (const position of top ? [0, top] : [0]) {
215
215
  let coverEl;