uikit 3.7.3-dev.af32c46e8 → 3.7.4-dev.e74b22b13
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 +12 -0
- package/dist/css/uikit-core-rtl.css +3 -3
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +3 -3
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +3 -3
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +3 -3
- 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 +1 -1
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1 -1
- 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 +172 -15
- package/dist/js/uikit-core.min.js +2 -2
- package/dist/js/uikit-icons.js +1 -1
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +172 -15
- package/dist/js/uikit.min.js +2 -2
- package/package.json +1 -1
- package/src/js/core/navbar.js +136 -7
- package/src/js/core/overflow-auto.js +6 -4
- package/src/js/core/switcher.js +3 -1
- package/src/js/core/toggle.js +14 -1
- package/src/js/util/filter.js +2 -2
- package/src/less/components/form.less +1 -1
- package/src/less/components/navbar.less +1 -1
- package/src/scss/components/form.scss +1 -1
- package/src/scss/components/navbar.scss +1 -1
- package/src/scss/variables-theme.scss +1 -1
- package/src/scss/variables.scss +1 -1
- package/tests/switcher.html +7 -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.7.
|
|
5
|
+
"version": "3.7.4-dev.e74b22b13",
|
|
6
6
|
"main": "dist/js/uikit.js",
|
|
7
7
|
"style": "dist/css/uikit.css",
|
|
8
8
|
"sideEffects": [
|
package/src/js/core/navbar.js
CHANGED
|
@@ -2,7 +2,7 @@ import {active} from './drop';
|
|
|
2
2
|
import Class from '../mixin/class';
|
|
3
3
|
import FlexBug from '../mixin/flex-bug';
|
|
4
4
|
import Container from '../mixin/container';
|
|
5
|
-
import {$, $$, addClass, after, assign, css, hasClass, height, includes, isRtl, isVisible, matches, noop, parent, Promise, query, remove, toFloat, Transition, within} from 'uikit-util';
|
|
5
|
+
import {$, $$, addClass, after, assign, css, findIndex, hasAttr, hasClass, height, includes, isRtl, isVisible, matches, noop, once, parent, Promise, query, remove, selFocusable, toFloat, Transition, within} from 'uikit-util';
|
|
6
6
|
|
|
7
7
|
const navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle';
|
|
8
8
|
|
|
@@ -91,8 +91,13 @@ export default {
|
|
|
91
91
|
get({clsDrop}, $el) {
|
|
92
92
|
const dropdowns = $$(`.${clsDrop}`, $el);
|
|
93
93
|
|
|
94
|
-
if (this.
|
|
95
|
-
$$(`.${clsDrop}`, this.
|
|
94
|
+
if (this.dropContainer !== $el) {
|
|
95
|
+
$$(`.${clsDrop}`, this.dropContainer).forEach(el => {
|
|
96
|
+
const dropdown = this.getDropdown(el);
|
|
97
|
+
if (!includes(dropdowns, el) && dropdown && dropdown.target && within(dropdown.target, this.$el)) {
|
|
98
|
+
dropdowns.push(el);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
return dropdowns;
|
|
@@ -108,6 +113,10 @@ export default {
|
|
|
108
113
|
|
|
109
114
|
immediate: true
|
|
110
115
|
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
toggles({dropdown}, $el) {
|
|
119
|
+
return $$(dropdown, $el);
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
},
|
|
@@ -120,7 +129,7 @@ export default {
|
|
|
120
129
|
events: [
|
|
121
130
|
|
|
122
131
|
{
|
|
123
|
-
name: 'mouseover',
|
|
132
|
+
name: 'mouseover focusin',
|
|
124
133
|
|
|
125
134
|
delegate() {
|
|
126
135
|
return this.dropdown;
|
|
@@ -128,13 +137,87 @@ export default {
|
|
|
128
137
|
|
|
129
138
|
handler({current}) {
|
|
130
139
|
const active = this.getActive();
|
|
131
|
-
if (active && active.target && !within(active.target, current) && !active.tracker.movesTo(active.$el)) {
|
|
140
|
+
if (active && includes(active.mode, 'hover') && active.target && !within(active.target, current) && !active.tracker.movesTo(active.$el)) {
|
|
132
141
|
active.hide(false);
|
|
133
142
|
}
|
|
134
143
|
}
|
|
135
144
|
|
|
136
145
|
},
|
|
137
146
|
|
|
147
|
+
{
|
|
148
|
+
name: 'keydown',
|
|
149
|
+
|
|
150
|
+
delegate() {
|
|
151
|
+
return this.dropdown;
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
handler(e) {
|
|
155
|
+
|
|
156
|
+
const {current, keyCode} = e;
|
|
157
|
+
const active = this.getActive();
|
|
158
|
+
|
|
159
|
+
if (keyCode === keyMap.DOWN && hasAttr(current, 'aria-expanded')) {
|
|
160
|
+
|
|
161
|
+
e.preventDefault();
|
|
162
|
+
|
|
163
|
+
if (!active || active.target !== current) {
|
|
164
|
+
current.click();
|
|
165
|
+
once(this.dropContainer, 'show', ({target}) => focusFirstFocusableElement(target));
|
|
166
|
+
} else {
|
|
167
|
+
focusFirstFocusableElement(active.$el);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
handleNavItemNavigation(e, this.toggles, active);
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
{
|
|
177
|
+
name: 'keydown',
|
|
178
|
+
|
|
179
|
+
el() {
|
|
180
|
+
return this.dropContainer;
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
delegate() {
|
|
184
|
+
return `.${this.clsDrop}`;
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
handler(e) {
|
|
188
|
+
|
|
189
|
+
const {current, keyCode} = e;
|
|
190
|
+
|
|
191
|
+
if (!includes(this.dropdowns, current)) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const active = this.getActive();
|
|
196
|
+
const elements = $$(selFocusable, current);
|
|
197
|
+
const i = findIndex(elements, el => matches(el, ':focus'));
|
|
198
|
+
|
|
199
|
+
if (keyCode === keyMap.UP) {
|
|
200
|
+
e.preventDefault();
|
|
201
|
+
if (i > 0) {
|
|
202
|
+
elements[i - 1].focus();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (keyCode === keyMap.DOWN) {
|
|
207
|
+
e.preventDefault();
|
|
208
|
+
if (i < elements.length - 1) {
|
|
209
|
+
elements[i + 1].focus();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (keyCode === keyMap.ESC) {
|
|
214
|
+
active && active.target && active.target.focus();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
handleNavItemNavigation(e, this.toggles, active);
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
|
|
138
221
|
{
|
|
139
222
|
name: 'mouseleave',
|
|
140
223
|
|
|
@@ -142,10 +225,14 @@ export default {
|
|
|
142
225
|
return this.dropbar;
|
|
143
226
|
},
|
|
144
227
|
|
|
228
|
+
filter() {
|
|
229
|
+
return this.dropbar;
|
|
230
|
+
},
|
|
231
|
+
|
|
145
232
|
handler() {
|
|
146
233
|
const active = this.getActive();
|
|
147
234
|
|
|
148
|
-
if (active && !this.dropdowns.some(el => matches(el, ':hover'))) {
|
|
235
|
+
if (active && includes(active.mode, 'hover') && !this.dropdowns.some(el => matches(el, ':hover'))) {
|
|
149
236
|
active.hide();
|
|
150
237
|
}
|
|
151
238
|
}
|
|
@@ -249,7 +336,7 @@ export default {
|
|
|
249
336
|
methods: {
|
|
250
337
|
|
|
251
338
|
getActive() {
|
|
252
|
-
return active &&
|
|
339
|
+
return active && within(active.target, this.$el) && active;
|
|
253
340
|
},
|
|
254
341
|
|
|
255
342
|
transitionTo(newHeight, el) {
|
|
@@ -282,3 +369,45 @@ export default {
|
|
|
282
369
|
}
|
|
283
370
|
|
|
284
371
|
};
|
|
372
|
+
|
|
373
|
+
function handleNavItemNavigation(e, toggles, active) {
|
|
374
|
+
|
|
375
|
+
const {current, keyCode} = e;
|
|
376
|
+
const target = active && active.target || current;
|
|
377
|
+
const i = toggles.indexOf(target);
|
|
378
|
+
|
|
379
|
+
// Left
|
|
380
|
+
if (keyCode === keyMap.LEFT && i > 0) {
|
|
381
|
+
active && active.hide(false);
|
|
382
|
+
toggles[i - 1].focus();
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Right
|
|
386
|
+
if (keyCode === keyMap.RIGHT && i < toggles.length - 1) {
|
|
387
|
+
active && active.hide(false);
|
|
388
|
+
toggles[i + 1].focus();
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (keyCode === keyMap.TAB) {
|
|
392
|
+
target.focus();
|
|
393
|
+
active && active.hide(false);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function focusFirstFocusableElement(el) {
|
|
398
|
+
if (!$(':focus', el)) {
|
|
399
|
+
const focusEl = $(selFocusable, el);
|
|
400
|
+
if (focusEl) {
|
|
401
|
+
focusEl.focus();
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
const keyMap = {
|
|
407
|
+
TAB: 9,
|
|
408
|
+
ESC: 27,
|
|
409
|
+
LEFT: 37,
|
|
410
|
+
UP: 38,
|
|
411
|
+
RIGHT: 39,
|
|
412
|
+
DOWN: 40
|
|
413
|
+
};
|
|
@@ -7,12 +7,14 @@ export default {
|
|
|
7
7
|
|
|
8
8
|
props: {
|
|
9
9
|
selContainer: String,
|
|
10
|
-
selContent: String
|
|
10
|
+
selContent: String,
|
|
11
|
+
minHeight: Number
|
|
11
12
|
},
|
|
12
13
|
|
|
13
14
|
data: {
|
|
14
15
|
selContainer: '.uk-modal',
|
|
15
|
-
selContent: '.uk-modal-dialog'
|
|
16
|
+
selContent: '.uk-modal-dialog',
|
|
17
|
+
minHeight: 150
|
|
16
18
|
},
|
|
17
19
|
|
|
18
20
|
computed: {
|
|
@@ -28,7 +30,7 @@ export default {
|
|
|
28
30
|
},
|
|
29
31
|
|
|
30
32
|
connected() {
|
|
31
|
-
css(this.$el, 'minHeight',
|
|
33
|
+
css(this.$el, 'minHeight', this.minHeight);
|
|
32
34
|
},
|
|
33
35
|
|
|
34
36
|
update: {
|
|
@@ -41,7 +43,7 @@ export default {
|
|
|
41
43
|
|
|
42
44
|
return {
|
|
43
45
|
current: toFloat(css(this.$el, 'maxHeight')),
|
|
44
|
-
max: Math.max(
|
|
46
|
+
max: Math.max(this.minHeight, height(this.container) - (dimensions(this.content).height - height(this.$el)))
|
|
45
47
|
};
|
|
46
48
|
},
|
|
47
49
|
|
package/src/js/core/switcher.js
CHANGED
|
@@ -10,6 +10,7 @@ export default {
|
|
|
10
10
|
props: {
|
|
11
11
|
connect: String,
|
|
12
12
|
toggle: String,
|
|
13
|
+
itemNav: String,
|
|
13
14
|
active: Number,
|
|
14
15
|
swiping: Boolean
|
|
15
16
|
},
|
|
@@ -17,6 +18,7 @@ export default {
|
|
|
17
18
|
data: {
|
|
18
19
|
connect: '~.uk-switcher',
|
|
19
20
|
toggle: '> * > :first-child',
|
|
21
|
+
itemNav: false,
|
|
20
22
|
active: 0,
|
|
21
23
|
swiping: true,
|
|
22
24
|
cls: 'uk-active',
|
|
@@ -92,7 +94,7 @@ export default {
|
|
|
92
94
|
name: 'click',
|
|
93
95
|
|
|
94
96
|
el() {
|
|
95
|
-
return this.connects;
|
|
97
|
+
return this.connects.concat(this.itemNav ? queryAll(this.itemNav, this.$el) : []);
|
|
96
98
|
},
|
|
97
99
|
|
|
98
100
|
delegate() {
|
package/src/js/core/toggle.js
CHANGED
|
@@ -86,6 +86,18 @@ export default {
|
|
|
86
86
|
|
|
87
87
|
},
|
|
88
88
|
|
|
89
|
+
{
|
|
90
|
+
name: 'keydown',
|
|
91
|
+
|
|
92
|
+
handler(e) {
|
|
93
|
+
// Space
|
|
94
|
+
if (e.keyCode === 32) {
|
|
95
|
+
e.preventDefault();
|
|
96
|
+
this.$el.click();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
89
101
|
{
|
|
90
102
|
|
|
91
103
|
name: 'click',
|
|
@@ -99,7 +111,7 @@ export default {
|
|
|
99
111
|
let link;
|
|
100
112
|
if (closest(e.target, 'a[href="#"], a[href=""]')
|
|
101
113
|
|| (link = closest(e.target, 'a[href]')) && (
|
|
102
|
-
|
|
114
|
+
attr(this.$el, 'aria-expanded') !== 'true'
|
|
103
115
|
|| link.hash && matches(this.target, link.hash)
|
|
104
116
|
)
|
|
105
117
|
) {
|
|
@@ -192,3 +204,4 @@ export default {
|
|
|
192
204
|
}
|
|
193
205
|
|
|
194
206
|
};
|
|
207
|
+
|
package/src/js/util/filter.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {hasAttr} from './attr';
|
|
2
1
|
import {inBrowser} from './env';
|
|
3
2
|
import {isDocument, isElement, isString, noop, startsWith, toNode, toNodes} from './lang';
|
|
4
3
|
|
|
@@ -33,8 +32,9 @@ export function isInput(element) {
|
|
|
33
32
|
return toNodes(element).some(element => matches(element, selInput));
|
|
34
33
|
}
|
|
35
34
|
|
|
35
|
+
export const selFocusable = `${selInput},a[href],[tabindex]`;
|
|
36
36
|
export function isFocusable(element) {
|
|
37
|
-
return
|
|
37
|
+
return matches(element, selFocusable);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export function parent(element) {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
|
|
74
74
|
@form-select-padding-right: 20px;
|
|
75
75
|
@form-select-icon-color: @global-color;
|
|
76
|
-
@form-select-option-color:
|
|
76
|
+
@form-select-option-color: @global-color;
|
|
77
77
|
@form-select-disabled-icon-color: @global-muted-color;
|
|
78
78
|
|
|
79
79
|
@form-datalist-padding-right: 20px;
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
|
|
252
252
|
.uk-navbar-nav > li:hover > a,
|
|
253
253
|
.uk-navbar-nav > li > a:focus,
|
|
254
|
-
.uk-navbar-nav > li > a
|
|
254
|
+
.uk-navbar-nav > li > a[aria-expanded="true"] {
|
|
255
255
|
color: @navbar-nav-item-hover-color;
|
|
256
256
|
outline: none;
|
|
257
257
|
.hook-navbar-nav-item-hover;
|
|
@@ -73,7 +73,7 @@ $form-width-large: 500px !default;
|
|
|
73
73
|
|
|
74
74
|
$form-select-padding-right: 20px !default;
|
|
75
75
|
$form-select-icon-color: $global-color !default;
|
|
76
|
-
$form-select-option-color:
|
|
76
|
+
$form-select-option-color: $global-color !default;
|
|
77
77
|
$form-select-disabled-icon-color: $global-muted-color !default;
|
|
78
78
|
|
|
79
79
|
$form-datalist-padding-right: 20px !default;
|
|
@@ -251,7 +251,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
|
|
|
251
251
|
|
|
252
252
|
.uk-navbar-nav > li:hover > a,
|
|
253
253
|
.uk-navbar-nav > li > a:focus,
|
|
254
|
-
.uk-navbar-nav > li > a
|
|
254
|
+
.uk-navbar-nav > li > a[aria-expanded="true"] {
|
|
255
255
|
color: $navbar-nav-item-hover-color;
|
|
256
256
|
outline: none;
|
|
257
257
|
@if(mixin-exists(hook-navbar-nav-item-hover)) {@include hook-navbar-nav-item-hover();}
|
|
@@ -413,7 +413,7 @@ $form-width-medium: 200px !default;
|
|
|
413
413
|
$form-width-large: 500px !default;
|
|
414
414
|
$form-select-padding-right: 20px !default;
|
|
415
415
|
$form-select-icon-color: $global-color !default;
|
|
416
|
-
$form-select-option-color:
|
|
416
|
+
$form-select-option-color: $global-color !default;
|
|
417
417
|
$form-select-disabled-icon-color: $global-muted-color !default;
|
|
418
418
|
$form-datalist-padding-right: 20px !default;
|
|
419
419
|
$form-datalist-icon-color: $global-color !default;
|
package/src/scss/variables.scss
CHANGED
|
@@ -411,7 +411,7 @@ $form-width-medium: 200px !default;
|
|
|
411
411
|
$form-width-large: 500px !default;
|
|
412
412
|
$form-select-padding-right: 20px !default;
|
|
413
413
|
$form-select-icon-color: $global-color !default;
|
|
414
|
-
$form-select-option-color:
|
|
414
|
+
$form-select-option-color: $global-color !default;
|
|
415
415
|
$form-select-disabled-icon-color: $global-muted-color !default;
|
|
416
416
|
$form-datalist-padding-right: 20px !default;
|
|
417
417
|
$form-datalist-icon-color: $global-color !default;
|
package/tests/switcher.html
CHANGED
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
<td><code>connect</code></td>
|
|
335
335
|
<td>CSS selector</td>
|
|
336
336
|
<td>~.uk-switcher</td>
|
|
337
|
-
<td>Related items container. By default succeeding elements with class 'uk-switcher'.</td>
|
|
337
|
+
<td>Related items container. By default, succeeding elements with class 'uk-switcher'.</td>
|
|
338
338
|
</tr>
|
|
339
339
|
<tr>
|
|
340
340
|
<td><code>toggle</code></td>
|
|
@@ -342,6 +342,12 @@
|
|
|
342
342
|
<td>> * > :first-child</td>
|
|
343
343
|
<td>Toggle selector - triggers content switching on click.</td>
|
|
344
344
|
</tr>
|
|
345
|
+
<tr>
|
|
346
|
+
<td><code>itemNav</code></td>
|
|
347
|
+
<td>CSS selector</td>
|
|
348
|
+
<td>false</td>
|
|
349
|
+
<td>Related nav container. By default, nav items are found in related items container only.</td>
|
|
350
|
+
</tr>
|
|
345
351
|
<tr>
|
|
346
352
|
<td><code>active</code></td>
|
|
347
353
|
<td>Number</td>
|