uikit 3.23.8-dev.ff7a25595 → 3.23.9-dev.0064d7d94
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.
- package/CHANGELOG.md +18 -0
- package/dist/css/uikit-core-rtl.css +1 -1
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +1 -1
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +1 -1
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +1 -1
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +1 -1
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +1 -1
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +14 -2
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +14 -2
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +1 -1
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +1 -1
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +1 -1
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +1 -1
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +1 -1
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +1 -1
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +1 -1
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +1 -1
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +1 -1
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +48 -12
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +1 -1
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +48 -12
- package/dist/js/uikit.min.js +1 -1
- package/package.json +1 -1
- package/src/js/core/drop.js +3 -2
- package/src/js/core/dropnav.js +17 -0
- package/src/js/core/icon.js +12 -0
- package/src/js/core/navbar.js +1 -0
- package/src/js/core/scrollspy-nav.js +2 -3
- package/src/js/core/toggle.js +15 -9
- package/src/js/mixin/modal.js +18 -1
- package/src/js/mixin/svg.js +0 -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.23.
|
|
5
|
+
"version": "3.23.9-dev.0064d7d94",
|
|
6
6
|
"main": "dist/js/uikit.js",
|
|
7
7
|
"style": "dist/css/uikit.css",
|
|
8
8
|
"sideEffects": [
|
package/src/js/core/drop.js
CHANGED
|
@@ -117,6 +117,7 @@ export default {
|
|
|
117
117
|
if (this.toggle && !this.targetEl) {
|
|
118
118
|
this.targetEl = createToggleComponent(this);
|
|
119
119
|
}
|
|
120
|
+
attr(this.targetEl, 'aria-expanded', false);
|
|
120
121
|
|
|
121
122
|
this._style = pick(this.$el.style, ['width', 'height']);
|
|
122
123
|
},
|
|
@@ -297,7 +298,7 @@ export default {
|
|
|
297
298
|
|
|
298
299
|
active = this.isActive() ? null : active;
|
|
299
300
|
this.tracker.cancel();
|
|
300
|
-
attr(this.targetEl, 'aria-expanded',
|
|
301
|
+
attr(this.targetEl, 'aria-expanded', false);
|
|
301
302
|
},
|
|
302
303
|
},
|
|
303
304
|
],
|
|
@@ -460,7 +461,7 @@ function createToggleComponent(drop) {
|
|
|
460
461
|
target: drop.$el,
|
|
461
462
|
mode: drop.mode,
|
|
462
463
|
});
|
|
463
|
-
|
|
464
|
+
$el.ariaHasPopup = true;
|
|
464
465
|
|
|
465
466
|
return $el;
|
|
466
467
|
}
|
package/src/js/core/dropnav.js
CHANGED
|
@@ -15,8 +15,12 @@ import {
|
|
|
15
15
|
noop,
|
|
16
16
|
observeResize,
|
|
17
17
|
offset,
|
|
18
|
+
on,
|
|
18
19
|
once,
|
|
19
20
|
parents,
|
|
21
|
+
pointerEnter,
|
|
22
|
+
pointerLeave,
|
|
23
|
+
pointerMove,
|
|
20
24
|
query,
|
|
21
25
|
remove,
|
|
22
26
|
selFocusable,
|
|
@@ -58,6 +62,7 @@ export default {
|
|
|
58
62
|
boundary: true,
|
|
59
63
|
dropbar: false,
|
|
60
64
|
dropbarAnchor: false,
|
|
65
|
+
delayShow: 160,
|
|
61
66
|
duration: 200,
|
|
62
67
|
container: false,
|
|
63
68
|
selNavItem: '> li > a, > ul > li > a',
|
|
@@ -119,6 +124,8 @@ export default {
|
|
|
119
124
|
|
|
120
125
|
connected() {
|
|
121
126
|
this.initializeDropdowns();
|
|
127
|
+
|
|
128
|
+
preventInitialPointerEnter(this.$el);
|
|
122
129
|
},
|
|
123
130
|
|
|
124
131
|
disconnected() {
|
|
@@ -430,3 +437,13 @@ function handleNavItemNavigation(e, toggles, active) {
|
|
|
430
437
|
toggles[getIndex(next, toggles, toggles.indexOf(active.targetEl || current))].focus();
|
|
431
438
|
}
|
|
432
439
|
}
|
|
440
|
+
|
|
441
|
+
// Prevents initial pointer events from opening dropdowns on page load (Safari/Firefox)
|
|
442
|
+
function preventInitialPointerEnter(el) {
|
|
443
|
+
const off = () => handlers.forEach((handler) => handler());
|
|
444
|
+
const handlers = [
|
|
445
|
+
once(el.ownerDocument, pointerMove, (e) => el.contains(e.target) || off()),
|
|
446
|
+
on(el, `mouseenter ${pointerEnter}`, (e) => e.stopPropagation(), { capture: true }),
|
|
447
|
+
on(el, `mouseleave ${pointerLeave}`, off, { capture: true }),
|
|
448
|
+
];
|
|
449
|
+
}
|
package/src/js/core/icon.js
CHANGED
|
@@ -102,6 +102,13 @@ export const IconComponent = {
|
|
|
102
102
|
beforeConnect() {
|
|
103
103
|
addClass(this.$el, this.$options.id);
|
|
104
104
|
},
|
|
105
|
+
|
|
106
|
+
async connected() {
|
|
107
|
+
const svg = await this.svg;
|
|
108
|
+
if (svg) {
|
|
109
|
+
svg.ariaHidden = true;
|
|
110
|
+
}
|
|
111
|
+
},
|
|
105
112
|
};
|
|
106
113
|
|
|
107
114
|
export const NavParentIcon = {
|
|
@@ -195,7 +202,12 @@ export const Slidenav = {
|
|
|
195
202
|
|
|
196
203
|
export const NavbarToggleIcon = {
|
|
197
204
|
extends: ButtonComponent,
|
|
205
|
+
|
|
198
206
|
i18n: { label: 'Open menu' },
|
|
207
|
+
|
|
208
|
+
beforeConnect() {
|
|
209
|
+
this.$el.ariaExpanded = false;
|
|
210
|
+
},
|
|
199
211
|
};
|
|
200
212
|
|
|
201
213
|
export const Close = {
|
package/src/js/core/navbar.js
CHANGED
|
@@ -12,6 +12,7 @@ export default {
|
|
|
12
12
|
},
|
|
13
13
|
|
|
14
14
|
data: {
|
|
15
|
+
delayShow: 200,
|
|
15
16
|
clsDrop: 'uk-navbar-dropdown',
|
|
16
17
|
selNavItem:
|
|
17
18
|
'.uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle', // Simplify with :where() selector once browser target is Safari 14+
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
getCoveringElement,
|
|
5
5
|
getTargetedElement,
|
|
6
6
|
hasClass,
|
|
7
|
-
isSameSiteAnchor,
|
|
8
7
|
isVisible,
|
|
9
8
|
offset,
|
|
10
9
|
offsetViewport,
|
|
@@ -32,7 +31,7 @@ export default {
|
|
|
32
31
|
},
|
|
33
32
|
|
|
34
33
|
computed: {
|
|
35
|
-
links: ({ target }, $el) => $$(target, $el).filter((el) =>
|
|
34
|
+
links: ({ target }, $el) => $$(target, $el).filter((el) => getTargetedElement(el)),
|
|
36
35
|
|
|
37
36
|
elements({ closest }) {
|
|
38
37
|
return this.links.map((el) => el.closest(closest || '*'));
|
|
@@ -52,7 +51,7 @@ export default {
|
|
|
52
51
|
update: [
|
|
53
52
|
{
|
|
54
53
|
read() {
|
|
55
|
-
const targets = this.links.map(
|
|
54
|
+
const targets = this.links.map(getTargetedElement);
|
|
56
55
|
|
|
57
56
|
const { length } = targets;
|
|
58
57
|
|
package/src/js/core/toggle.js
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
includes,
|
|
5
5
|
isBoolean,
|
|
6
6
|
isFocusable,
|
|
7
|
+
isSameSiteAnchor,
|
|
7
8
|
isTag,
|
|
8
9
|
isTouch,
|
|
9
10
|
matches,
|
|
@@ -153,18 +154,23 @@ export default {
|
|
|
153
154
|
filter: ({ mode }) => ['click', 'hover'].some((m) => includes(mode, m)),
|
|
154
155
|
|
|
155
156
|
handler(e) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
157
|
+
if (e.defaultPrevented) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const link = e.target.closest('a');
|
|
162
|
+
const isButtonLike =
|
|
163
|
+
isSameSiteAnchor(link) && (!link.hash || matches(this.target, link.hash));
|
|
164
|
+
|
|
165
|
+
if (this._preventClick || isButtonLike || (link && !this.isToggled(this.target))) {
|
|
164
166
|
e.preventDefault();
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
if (
|
|
169
|
+
if (
|
|
170
|
+
!this._preventClick &&
|
|
171
|
+
includes(this.mode, 'click') &&
|
|
172
|
+
(!link || isButtonLike || e.defaultPrevented)
|
|
173
|
+
) {
|
|
168
174
|
this.toggle();
|
|
169
175
|
}
|
|
170
176
|
},
|
package/src/js/mixin/modal.js
CHANGED
|
@@ -98,13 +98,14 @@ export default {
|
|
|
98
98
|
|
|
99
99
|
self: true,
|
|
100
100
|
|
|
101
|
-
handler(e) {
|
|
101
|
+
handler(e, toggle) {
|
|
102
102
|
if (e.defaultPrevented) {
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
e.preventDefault();
|
|
107
107
|
|
|
108
|
+
this.target = toggle?.$el;
|
|
108
109
|
if (this.isToggled() === includes(active, this)) {
|
|
109
110
|
this.toggle();
|
|
110
111
|
}
|
|
@@ -155,6 +156,8 @@ export default {
|
|
|
155
156
|
);
|
|
156
157
|
|
|
157
158
|
addClass(document.documentElement, this.clsPage);
|
|
159
|
+
|
|
160
|
+
setAriaExpanded(this.target, true);
|
|
158
161
|
},
|
|
159
162
|
},
|
|
160
163
|
|
|
@@ -189,6 +192,14 @@ export default {
|
|
|
189
192
|
if (!active.some((modal) => modal.clsPage === this.clsPage)) {
|
|
190
193
|
removeClass(document.documentElement, this.clsPage);
|
|
191
194
|
}
|
|
195
|
+
|
|
196
|
+
if (isFocusable(this.target)) {
|
|
197
|
+
this.target.focus();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
setAriaExpanded(this.target, false);
|
|
201
|
+
|
|
202
|
+
this.target = null;
|
|
192
203
|
},
|
|
193
204
|
},
|
|
194
205
|
],
|
|
@@ -289,3 +300,9 @@ function listenForEscClose(modal) {
|
|
|
289
300
|
}
|
|
290
301
|
});
|
|
291
302
|
}
|
|
303
|
+
|
|
304
|
+
function setAriaExpanded(el, toggled) {
|
|
305
|
+
if (el?.ariaExpanded) {
|
|
306
|
+
el.ariaExpanded = toggled;
|
|
307
|
+
}
|
|
308
|
+
}
|
package/src/js/mixin/svg.js
CHANGED
|
@@ -112,8 +112,6 @@ const symbolRe = /<symbol([^]*?id=(['"])(.+?)\2[^]*?<\/)symbol>/g;
|
|
|
112
112
|
const parseSymbols = memoize(function (svg) {
|
|
113
113
|
const symbols = {};
|
|
114
114
|
|
|
115
|
-
symbolRe.lastIndex = 0;
|
|
116
|
-
|
|
117
115
|
let match;
|
|
118
116
|
while ((match = symbolRe.exec(svg))) {
|
|
119
117
|
symbols[match[3]] = `<svg ${match[1]}svg>`;
|