uikit 3.15.6-dev.fb448ac28 → 3.15.7-dev.a12865820

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 (48) hide show
  1. package/CHANGELOG.md +10 -1
  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 +35 -9
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +35 -9
  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 +1 -1
  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 +6 -5
  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 +6 -5
  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 +65 -49
  37. package/dist/js/uikit-core.min.js +2 -2
  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 +70 -53
  41. package/dist/js/uikit.min.js +2 -2
  42. package/package.json +2 -2
  43. package/src/js/core/accordion.js +24 -26
  44. package/src/js/core/drop.js +10 -4
  45. package/src/js/core/offcanvas.js +0 -14
  46. package/src/js/core/scrollspy-nav.js +2 -1
  47. package/src/js/mixin/modal.js +25 -0
  48. package/src/js/mixin/slider-drag.js +5 -4
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.15.6-dev.fb448ac28",
5
+ "version": "3.15.7-dev.a12865820",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -20,7 +20,7 @@
20
20
  "prefix": "node build/prefix",
21
21
  "scope": "node build/scope",
22
22
  "release": "node build/release",
23
- "watch": "watch-run -i -p '**/*.less' yarn compile-less",
23
+ "watch": "watch-run -i -p \"**/*.less\" -- node build/less",
24
24
  "eslint": "eslint src/js",
25
25
  "eslint-fix": "eslint --fix src/js"
26
26
  },
@@ -12,7 +12,6 @@ import {
12
12
  includes,
13
13
  index,
14
14
  isInView,
15
- noop,
16
15
  scrollIntoView,
17
16
  toFloat,
18
17
  toggleClass,
@@ -116,42 +115,41 @@ export default {
116
115
  ],
117
116
 
118
117
  methods: {
119
- toggle(item, animate) {
120
- let items = [this.items[getIndex(item, this.items)]];
118
+ async toggle(item, animate) {
119
+ item = this.items[getIndex(item, this.items)];
120
+ let items = [item];
121
121
  const activeItems = filter(this.items, `.${this.clsOpen}`);
122
122
 
123
123
  if (!this.multiple && !includes(activeItems, items[0])) {
124
124
  items = items.concat(activeItems);
125
125
  }
126
126
 
127
- if (
128
- !this.collapsible &&
129
- activeItems.length < 2 &&
130
- !filter(items, `:not(.${this.clsOpen})`).length
131
- ) {
127
+ if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {
132
128
  return;
133
129
  }
134
130
 
135
- for (const el of items) {
136
- this.toggleElement(el, !hasClass(el, this.clsOpen), (el, show) => {
137
- toggleClass(el, this.clsOpen, show);
138
- attr($(this.$props.toggle, el), 'aria-expanded', show);
131
+ await Promise.all(
132
+ items.map((el) =>
133
+ this.toggleElement(el, !includes(activeItems, el), (el, show) => {
134
+ toggleClass(el, this.clsOpen, show);
135
+ attr($(this.$props.toggle, el), 'aria-expanded', show);
139
136
 
140
- if (animate === false || !this.animation) {
141
- hide($(this.content, el), !show);
142
- return;
143
- }
144
-
145
- return transition(el, show, this).then(() => {
146
- if (show) {
147
- const toggle = $(this.$props.toggle, el);
148
- requestAnimationFrame(() => {
149
- if (!isInView(toggle)) {
150
- scrollIntoView(toggle, { offset: this.offset });
151
- }
152
- });
137
+ if (animate === false || !this.animation) {
138
+ hide($(this.content, el), !show);
139
+ return;
153
140
  }
154
- }, noop);
141
+
142
+ return transition(el, show, this);
143
+ })
144
+ )
145
+ );
146
+
147
+ if (animate !== false && this.animation && !includes(activeItems, item)) {
148
+ const toggle = $(this.$props.toggle, item);
149
+ requestAnimationFrame(() => {
150
+ if (!isInView(toggle)) {
151
+ scrollIntoView(toggle, { offset: this.offset });
152
+ }
155
153
  });
156
154
  }
157
155
  },
@@ -30,7 +30,7 @@ import {
30
30
  scrollParents,
31
31
  within,
32
32
  } from 'uikit-util';
33
- import { preventBackgroundScroll, preventOverscroll } from '../mixin/modal';
33
+ import { isSameSiteAnchor, preventBackgroundScroll, preventOverscroll } from '../mixin/modal';
34
34
 
35
35
  export let active;
36
36
 
@@ -143,11 +143,17 @@ export default {
143
143
  name: 'click',
144
144
 
145
145
  delegate() {
146
- return 'a[href^="#"]';
146
+ return 'a[href*="#"]';
147
147
  },
148
148
 
149
- handler({ defaultPrevented, current: { hash } }) {
150
- if (!defaultPrevented && hash && !within(hash, this.$el)) {
149
+ handler({ defaultPrevented, current }) {
150
+ const { hash } = current;
151
+ if (
152
+ !defaultPrevented &&
153
+ hash &&
154
+ isSameSiteAnchor(current) &&
155
+ !within(hash, this.$el)
156
+ ) {
151
157
  this.hide(false);
152
158
  }
153
159
  },
@@ -79,20 +79,6 @@ export default {
79
79
  },
80
80
 
81
81
  events: [
82
- {
83
- name: 'click',
84
-
85
- delegate() {
86
- return 'a[href^="#"]';
87
- },
88
-
89
- handler({ current: { hash }, defaultPrevented }) {
90
- if (!defaultPrevented && hash && $(hash, document.body)) {
91
- this.hide();
92
- }
93
- },
94
- },
95
-
96
82
  {
97
83
  name: 'touchmove',
98
84
 
@@ -11,6 +11,7 @@ import {
11
11
  trigger,
12
12
  } from 'uikit-util';
13
13
  import { getTargetElement } from './scroll';
14
+ import { isSameSiteAnchor } from '../mixin/modal';
14
15
 
15
16
  export default {
16
17
  mixins: [Scroll],
@@ -34,7 +35,7 @@ export default {
34
35
  computed: {
35
36
  links: {
36
37
  get(_, $el) {
37
- return $$('a[href^="#"]', $el).filter((el) => el.hash);
38
+ return $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));
38
39
  },
39
40
 
40
41
  watch(links) {
@@ -81,6 +81,27 @@ export default {
81
81
  },
82
82
  },
83
83
 
84
+ {
85
+ name: 'click',
86
+
87
+ delegate() {
88
+ return 'a[href*="#"]';
89
+ },
90
+
91
+ handler({ current, defaultPrevented }) {
92
+ const { hash } = current;
93
+ if (
94
+ !defaultPrevented &&
95
+ hash &&
96
+ isSameSiteAnchor(current) &&
97
+ !within(hash, this.$el) &&
98
+ $(hash, document.body)
99
+ ) {
100
+ this.hide();
101
+ }
102
+ },
103
+ },
104
+
84
105
  {
85
106
  name: 'toggle',
86
107
 
@@ -361,3 +382,7 @@ function filterChildren(el, fn) {
361
382
  });
362
383
  return children;
363
384
  }
385
+
386
+ export function isSameSiteAnchor(a) {
387
+ return ['origin', 'pathname', 'search'].every((part) => a[part] === location[part]);
388
+ }
@@ -14,9 +14,10 @@ import {
14
14
  } from 'uikit-util';
15
15
 
16
16
  const pointerOptions = { passive: false, capture: true };
17
+ const pointerUpOptions = { passive: true, capture: true };
17
18
  const pointerDown = 'touchstart mousedown';
18
19
  const pointerMove = 'touchmove mousemove';
19
- const pointerUp = 'touchend touchcancel mouseup click input';
20
+ const pointerUp = 'touchend touchcancel mouseup click input scroll';
20
21
 
21
22
  export default {
22
23
  props: {
@@ -75,7 +76,7 @@ export default {
75
76
 
76
77
  {
77
78
  // iOS workaround for slider stopping if swiping fast
78
- name: `${pointerMove} ${pointerUp}`,
79
+ name: pointerMove,
79
80
  el() {
80
81
  return this.list;
81
82
  },
@@ -105,7 +106,7 @@ export default {
105
106
  on(document, pointerMove, this.move, pointerOptions);
106
107
 
107
108
  // 'input' event is triggered by video controls
108
- on(document, pointerUp, this.end, pointerOptions);
109
+ on(document, pointerUp, this.end, pointerUpOptions);
109
110
 
110
111
  css(this.list, 'userSelect', 'none');
111
112
  },
@@ -186,7 +187,7 @@ export default {
186
187
 
187
188
  end() {
188
189
  off(document, pointerMove, this.move, pointerOptions);
189
- off(document, pointerUp, this.end, pointerOptions);
190
+ off(document, pointerUp, this.end, pointerUpOptions);
190
191
 
191
192
  if (this.dragging) {
192
193
  this.dragging = null;