uikit 3.25.28 → 3.25.29-dev.3bc1304

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 (58) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/ci-release.js +1 -4
  3. package/dist/css/uikit-core-rtl.css +1 -1
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +1 -1
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +1 -1
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +1 -1
  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 +11 -10
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +13 -12
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +13 -12
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +5 -2
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +10 -9
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +1 -1
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +11 -10
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +1 -1
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +11 -10
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +10 -9
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +1 -1
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +2 -5
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +39 -43
  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 +40 -47
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/api/component.js +1 -1
  45. package/src/js/api/computed.js +1 -1
  46. package/src/js/api/log.js +1 -1
  47. package/src/js/api/observables.js +5 -4
  48. package/src/js/api/observer.js +3 -4
  49. package/src/js/api/update.js +10 -9
  50. package/src/js/components/upload.js +1 -1
  51. package/src/js/core/alert.js +6 -3
  52. package/src/js/core/drop.js +4 -4
  53. package/src/js/core/form-custom.js +3 -8
  54. package/src/js/core/icon.js +3 -11
  55. package/src/js/core/toggle.js +0 -2
  56. package/src/js/mixin/event.js +4 -1
  57. package/src/js/mixin/modal.js +1 -1
  58. package/tests/alert.html +2 -2
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.28",
5
+ "version": "3.25.29-dev.3bc1304",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -21,7 +21,7 @@ export function component(name, options) {
21
21
 
22
22
  App[name] = (element, data) => createComponent(name, element, data);
23
23
 
24
- const opt = options.options ?? { ...options };
24
+ const opt = options.options || { ...options };
25
25
 
26
26
  opt.id = id;
27
27
  opt.name = name;
@@ -74,7 +74,7 @@ export function initComputedUpdates(instance) {
74
74
  }
75
75
 
76
76
  function resetComputed(instance) {
77
- const values = { ...instance._computed };
77
+ const values = instance._computed;
78
78
  instance._computed = {};
79
79
  return values;
80
80
  }
package/src/js/api/log.js CHANGED
@@ -5,6 +5,6 @@ export function log(instance, eventName, eventData) {
5
5
  instance._uid,
6
6
  'font-weight:bold;',
7
7
  eventName,
8
- [...(eventData ?? []), instance, instance.$el],
8
+ [...(eventData || []), instance, instance.$el],
9
9
  );
10
10
  }
@@ -83,13 +83,14 @@ export function swipe(options) {
83
83
  const pos = getEventPos(e);
84
84
  const target = 'tagName' in e.target ? e.target : parent(e.target);
85
85
  once(document, `${pointerUp} ${pointerCancel} scroll`, (e) => {
86
+ if (e.type !== pointerUp || !target) {
87
+ return;
88
+ }
89
+
86
90
  const { x, y } = getEventPos(e);
87
91
 
88
92
  // swipe
89
- if (
90
- (e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100) ||
91
- (y && Math.abs(pos.y - y) > 100)
92
- ) {
93
+ if ((x && Math.abs(pos.x - x) > 100) || (y && Math.abs(pos.y - y) > 100)) {
93
94
  setTimeout(() => {
94
95
  trigger(target, 'swipe');
95
96
  trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`);
@@ -3,19 +3,18 @@ import { registerComputed } from './computed';
3
3
  import { registerWatch } from './watch';
4
4
 
5
5
  export function initObservers(instance) {
6
- for (const observer of instance.$options.observe || []) {
7
- registerObservable(instance, observer);
6
+ for (const [index, observer] of (instance.$options.observe || []).entries()) {
7
+ registerObservable(instance, observer, `_observe${index}`);
8
8
  }
9
9
  }
10
10
 
11
- function registerObservable(instance, observable) {
11
+ function registerObservable(instance, observable, key) {
12
12
  let { observe, target = instance.$el, handler, options, filter, args } = observable;
13
13
 
14
14
  if (filter && !filter.call(instance, instance)) {
15
15
  return;
16
16
  }
17
17
 
18
- const key = `_observe${instance._disconnect.length}`;
19
18
  if (isFunction(target) && !hasOwn(instance, key)) {
20
19
  registerComputed(instance, key, () => {
21
20
  const targets = target.call(instance, instance);
@@ -20,24 +20,25 @@ export function callUpdate(instance, e = 'update') {
20
20
  return;
21
21
  }
22
22
 
23
- if (!instance._updateCount) {
24
- instance._updateCount = 0;
25
- requestAnimationFrame(() => (instance._updateCount = 0));
26
- }
27
-
28
23
  if (!instance._queued) {
29
24
  instance._queued = new Set();
30
25
  fastdom.read(() => {
31
26
  if (instance._connected) {
32
- runUpdates(instance, instance._queued);
27
+ if (!instance._updateCount) {
28
+ instance._updateCount = 0;
29
+ requestAnimationFrame(() => (instance._updateCount = 0));
30
+ }
31
+
32
+ if (instance._updateCount < 10) {
33
+ instance._updateCount++;
34
+ runUpdates(instance, instance._queued);
35
+ }
33
36
  }
34
37
  instance._queued = null;
35
38
  });
36
39
  }
37
40
 
38
- if (instance._updateCount++ < 20) {
39
- instance._queued.add(e.type || e);
40
- }
41
+ instance._queued.add(e.type || e);
41
42
  }
42
43
 
43
44
  function runUpdates(instance, types) {
@@ -171,7 +171,7 @@ export default {
171
171
  function match(pattern, path) {
172
172
  const expression = pattern.replace(
173
173
  /\*\*|[.*+?^${}()|[\]\\]/g,
174
- (s) => ({ '**': '.*', '*': '[^/]+', '?': '[^/]', '|': '|' })[s] ?? `\\${s}`,
174
+ (s) => ({ '**': '.*', '*': '[^/]+', '?': '[^/]', '|': '|' })[s] || `\\${s}`,
175
175
  );
176
176
 
177
177
  return new RegExp(`^(?:${expression})$`, 'i').test(path);
@@ -9,12 +9,11 @@ export default {
9
9
  args: 'animation',
10
10
 
11
11
  props: {
12
- animation: Boolean,
13
12
  close: String,
14
13
  },
15
14
 
16
15
  data: {
17
- animation: true,
16
+ animation: [true],
18
17
  selClose: '.uk-alert-close',
19
18
  duration: 150,
20
19
  },
@@ -32,7 +31,11 @@ export default {
32
31
 
33
32
  methods: {
34
33
  async close() {
35
- await this.toggleElement(this.$el, false, this.animation ? animate : false);
34
+ await this.toggleElement(
35
+ this.$el,
36
+ false,
37
+ this.animation[0] === true || this.animation[0] === 1 ? animate : true,
38
+ );
36
39
  this.$destroy(true);
37
40
  },
38
41
  },
@@ -114,11 +114,11 @@ export default {
114
114
  this._style = pick(this.$el.style, ['width', 'height']);
115
115
  },
116
116
 
117
+ beforeDisconnect() {
118
+ this.hide(false, false);
119
+ },
120
+
117
121
  disconnected() {
118
- if (this.isActive()) {
119
- this.hide(false);
120
- active = null;
121
- }
122
122
  css(this.$el, this._style);
123
123
  },
124
124
 
@@ -1,4 +1,4 @@
1
- import { $, $$, isInput, matches, parent, selInput } from 'uikit-util';
1
+ import { $, isInput, parent, selInput } from 'uikit-util';
2
2
  import Class from '../mixin/class';
3
3
 
4
4
  export default {
@@ -37,15 +37,10 @@ export default {
37
37
  return;
38
38
  }
39
39
 
40
- let option;
41
40
  const prop = isInput(target) ? 'value' : 'textContent';
42
41
  const prev = target[prop];
43
- const value = input.files?.[0]
44
- ? input.files[0].name
45
- : matches(input, 'select') &&
46
- (option = $$('option', input).find((el) => el.selected))
47
- ? option.textContent
48
- : input.value;
42
+ const value =
43
+ input.files?.[0]?.name ?? input.selectedOptions?.[0]?.label ?? input.value;
49
44
 
50
45
  if (prev !== value) {
51
46
  target[prop] = value;
@@ -140,17 +140,9 @@ export const Search = {
140
140
  ? 'search-medium'
141
141
  : this.$props.icon;
142
142
 
143
- if (hasAttr(this.$el, 'aria-label')) {
144
- return;
145
- }
146
-
147
- if (isToggle) {
148
- this.$el.ariaLabel = this.t('toggle');
149
- } else {
150
- const button = this.$el.closest('a,button');
151
- if (button) {
152
- button.ariaLabel = this.t('submit');
153
- }
143
+ const target = isToggle ? this.$el : this.$el.closest('a,button');
144
+ if (target && !hasAttr(target, 'aria-label')) {
145
+ target.ariaLabel = this.t(isToggle ? 'toggle' : 'submit');
154
146
  }
155
147
  },
156
148
  };
@@ -177,8 +177,6 @@ export default {
177
177
 
178
178
  filter: ({ mode }) => includes(mode, 'media'),
179
179
 
180
- el: ({ target }) => target,
181
-
182
180
  handler(e, mediaObj) {
183
181
  if (mediaObj.matches ^ this.isToggled(this.target)) {
184
182
  this.toggle();
@@ -3,7 +3,10 @@ import { on, once } from '../util/event';
3
3
  import { keyMap } from '../util/keys';
4
4
 
5
5
  export function maybeDefaultPreventClick(e) {
6
- if (e.target.closest('a[href="#"],a[href=""]')) {
6
+ if (
7
+ (e.type === 'keydown' && e.keyCode === keyMap.SPACE) ||
8
+ e.target.closest('a[href="#"],a[href=""]')
9
+ ) {
7
10
  e.preventDefault();
8
11
  }
9
12
  }
@@ -239,7 +239,7 @@ function animate(el, show, { transitionElement, _toggle }) {
239
239
  _toggle(el, show);
240
240
 
241
241
  Promise.all(
242
- (transitionElement?.getAnimations?.() ?? []).map(({ finished }) => finished),
242
+ (transitionElement?.getAnimations?.() || []).map(({ finished }) => finished),
243
243
  ).then(resolve, reject);
244
244
  }),
245
245
  ).then(() => {
package/tests/alert.html CHANGED
@@ -98,9 +98,9 @@
98
98
  <tbody>
99
99
  <tr>
100
100
  <td><code>animation</code></td>
101
- <td>Boolean</td>
101
+ <td>Boolean, String</td>
102
102
  <td>true</td>
103
- <td>On close fade out.</td>
103
+ <td>On close fade out. Set to false to disable animation or specify an animation class.</td>
104
104
  </tr>
105
105
  <tr>
106
106
  <td><code>duration</code></td>