uikit 3.15.2-dev.c376993b7 → 3.15.3-dev.8c13c92d9
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 +15 -1
- package/README.md +1 -1
- package/dist/css/uikit-core-rtl.css +2 -2
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +2 -2
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +2 -2
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +2 -2
- 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 +102 -109
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +3 -5
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +3 -5
- 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 +5 -3
- 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 +5 -3
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +90 -96
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +1 -3
- 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 +33 -25
- 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 +139 -136
- package/dist/js/uikit.min.js +2 -2
- package/package.json +7 -7
- package/src/js/api/boot.js +2 -2
- package/src/js/api/component.js +2 -2
- package/src/js/api/state.js +1 -1
- package/src/js/components/filter.js +12 -14
- package/src/js/core/accordion.js +1 -2
- package/src/js/core/cover.js +1 -1
- package/src/js/core/drop.js +16 -7
- package/src/js/core/scrollspy.js +0 -2
- package/src/js/mixin/internal/animate-fade.js +50 -51
- package/src/js/mixin/internal/animate-slide.js +52 -57
- package/src/js/mixin/slider-reactive.js +2 -0
- package/src/js/mixin/slider.js +2 -3
- package/src/js/mixin/togglable.js +0 -2
- package/src/js/util/observer.js +1 -2
- package/src/js/util/position.js +4 -1
- package/src/less/components/nav.less +1 -1
- package/src/less/components/navbar.less +2 -1
- package/src/scss/components/nav.scss +1 -1
- package/src/scss/components/navbar.scss +2 -1
- package/src/scss/variables-theme.scss +1 -0
- package/src/scss/variables.scss +1 -0
- package/tests/drop.html +36 -3
- package/tests/js/index.js +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.15.
|
|
5
|
+
"version": "3.15.3-dev.8c13c92d9",
|
|
6
6
|
"main": "dist/js/uikit.js",
|
|
7
7
|
"style": "dist/css/uikit.css",
|
|
8
8
|
"sideEffects": [
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://getuikit.com",
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@babel/core": "^7.18.
|
|
38
|
-
"@babel/preset-env": "^7.18.
|
|
37
|
+
"@babel/core": "^7.18.10",
|
|
38
|
+
"@babel/preset-env": "^7.18.10",
|
|
39
39
|
"@rollup/plugin-alias": "^3.1.9",
|
|
40
40
|
"@rollup/plugin-babel": "^5.3.1",
|
|
41
41
|
"@rollup/plugin-replace": "^4.0.0",
|
|
@@ -43,18 +43,18 @@
|
|
|
43
43
|
"camelcase": "^7.0.0",
|
|
44
44
|
"clean-css": "^5.3.1",
|
|
45
45
|
"dateformat": "^5.0.3",
|
|
46
|
-
"esbuild": "^0.14.
|
|
47
|
-
"eslint": "^8.
|
|
46
|
+
"esbuild": "^0.14.53",
|
|
47
|
+
"eslint": "^8.21.0",
|
|
48
48
|
"eslint-config-prettier": "^8.5.0",
|
|
49
49
|
"fs-extra": "^10.1.0",
|
|
50
50
|
"glob": "^8.0.3",
|
|
51
|
-
"inquirer": "^9.
|
|
51
|
+
"inquirer": "^9.1.0",
|
|
52
52
|
"less": "^4.1.3",
|
|
53
53
|
"minimist": "^1.2.6",
|
|
54
54
|
"number-precision": "^1.5.2",
|
|
55
55
|
"p-limit": "^4.0.0",
|
|
56
56
|
"prettier": "^2.7.1",
|
|
57
|
-
"rollup": "^2.77.
|
|
57
|
+
"rollup": "^2.77.2",
|
|
58
58
|
"rollup-plugin-esbuild": "^4.9.1",
|
|
59
59
|
"rollup-plugin-html": "^0.2.1",
|
|
60
60
|
"rollup-plugin-modify": "^3.0.0",
|
package/src/js/api/boot.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getComponentName } from './component';
|
|
2
|
-
import { apply,
|
|
2
|
+
import { apply, hasAttr, inBrowser } from 'uikit-util';
|
|
3
3
|
|
|
4
4
|
export default function (UIkit) {
|
|
5
5
|
const { connect, disconnect } = UIkit;
|
|
@@ -8,7 +8,7 @@ export default function (UIkit) {
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
requestAnimationFrame(function () {
|
|
12
12
|
if (document.body) {
|
|
13
13
|
apply(document.body, connect);
|
|
14
14
|
}
|
package/src/js/api/component.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $$, camelize,
|
|
1
|
+
import { $$, camelize, hyphenate, isPlainObject, memoize, startsWith } from 'uikit-util';
|
|
2
2
|
|
|
3
3
|
export default function (UIkit) {
|
|
4
4
|
const DATA = UIkit.data;
|
|
@@ -49,7 +49,7 @@ export default function (UIkit) {
|
|
|
49
49
|
opt.install?.(UIkit, opt, name);
|
|
50
50
|
|
|
51
51
|
if (UIkit._initialized && !opt.functional) {
|
|
52
|
-
|
|
52
|
+
requestAnimationFrame(() => UIkit[name](`[uk-${id}],[data-uk-${id}]`));
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
return (components[name] = isPlainObject(options) ? opt : options);
|
package/src/js/api/state.js
CHANGED
|
@@ -267,7 +267,7 @@ function normalizeData({ data = {} }, { args = [], props = {} }) {
|
|
|
267
267
|
function initChildListObserver(component) {
|
|
268
268
|
const { el } = component.$options;
|
|
269
269
|
|
|
270
|
-
const observer = new MutationObserver(() => component
|
|
270
|
+
const observer = new MutationObserver(() => component._callWatches());
|
|
271
271
|
observer.observe(el, {
|
|
272
272
|
childList: true,
|
|
273
273
|
subtree: true,
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
css,
|
|
6
6
|
data,
|
|
7
7
|
each,
|
|
8
|
-
fastdom,
|
|
9
8
|
children as getChildren,
|
|
10
9
|
hasClass,
|
|
11
10
|
includes,
|
|
@@ -43,7 +42,7 @@ export default {
|
|
|
43
42
|
},
|
|
44
43
|
|
|
45
44
|
watch() {
|
|
46
|
-
this
|
|
45
|
+
this.$emit();
|
|
47
46
|
|
|
48
47
|
if (this.selActive !== false) {
|
|
49
48
|
const actives = $$(this.selActive, this.$el);
|
|
@@ -61,7 +60,7 @@ export default {
|
|
|
61
60
|
|
|
62
61
|
watch(list, old) {
|
|
63
62
|
if (old && !isEqualList(list, old)) {
|
|
64
|
-
this
|
|
63
|
+
this.$emit();
|
|
65
64
|
}
|
|
66
65
|
},
|
|
67
66
|
|
|
@@ -69,6 +68,12 @@ export default {
|
|
|
69
68
|
},
|
|
70
69
|
},
|
|
71
70
|
|
|
71
|
+
update: {
|
|
72
|
+
write() {
|
|
73
|
+
this.setState(this.getState(), false);
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
|
|
72
77
|
events: [
|
|
73
78
|
{
|
|
74
79
|
name: 'click',
|
|
@@ -108,26 +113,19 @@ export default {
|
|
|
108
113
|
|
|
109
114
|
trigger(this.$el, 'beforeFilter', [this, state]);
|
|
110
115
|
|
|
111
|
-
this.toggles
|
|
112
|
-
toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state))
|
|
113
|
-
|
|
116
|
+
for (const el of this.toggles) {
|
|
117
|
+
toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state));
|
|
118
|
+
}
|
|
114
119
|
|
|
115
120
|
await Promise.all(
|
|
116
121
|
$$(this.target, this.$el).map((target) => {
|
|
117
|
-
const filterFn = () =>
|
|
118
|
-
applyState(state, target, getChildren(target));
|
|
119
|
-
this.$update(this.$el);
|
|
120
|
-
};
|
|
122
|
+
const filterFn = () => applyState(state, target, getChildren(target));
|
|
121
123
|
return animate ? this.animate(filterFn, target) : filterFn();
|
|
122
124
|
})
|
|
123
125
|
);
|
|
124
126
|
|
|
125
127
|
trigger(this.$el, 'afterFilter', [this]);
|
|
126
128
|
},
|
|
127
|
-
|
|
128
|
-
updateState() {
|
|
129
|
-
fastdom.write(() => this.setState(this.getState(), false));
|
|
130
|
-
},
|
|
131
129
|
},
|
|
132
130
|
};
|
|
133
131
|
|
package/src/js/core/accordion.js
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
$,
|
|
6
6
|
$$,
|
|
7
7
|
attr,
|
|
8
|
-
fastdom,
|
|
9
8
|
filter,
|
|
10
9
|
getIndex,
|
|
11
10
|
hasClass,
|
|
@@ -144,7 +143,7 @@ export default {
|
|
|
144
143
|
|
|
145
144
|
if (show) {
|
|
146
145
|
const toggle = $(this.$props.toggle, el);
|
|
147
|
-
|
|
146
|
+
requestAnimationFrame(() => {
|
|
148
147
|
if (!isInView(toggle)) {
|
|
149
148
|
scrollIntoView(toggle, { offset: this.offset });
|
|
150
149
|
}
|
package/src/js/core/cover.js
CHANGED
package/src/js/core/drop.js
CHANGED
|
@@ -43,6 +43,8 @@ export default {
|
|
|
43
43
|
mode: 'list',
|
|
44
44
|
toggle: Boolean,
|
|
45
45
|
boundary: Boolean,
|
|
46
|
+
boundaryX: Boolean,
|
|
47
|
+
boundaryY: Boolean,
|
|
46
48
|
target: Boolean,
|
|
47
49
|
targetX: Boolean,
|
|
48
50
|
targetY: Boolean,
|
|
@@ -59,6 +61,8 @@ export default {
|
|
|
59
61
|
mode: ['click', 'hover'],
|
|
60
62
|
toggle: '- *',
|
|
61
63
|
boundary: false,
|
|
64
|
+
boundaryX: false,
|
|
65
|
+
boundaryY: false,
|
|
62
66
|
target: false,
|
|
63
67
|
targetX: false,
|
|
64
68
|
targetY: false,
|
|
@@ -75,6 +79,13 @@ export default {
|
|
|
75
79
|
},
|
|
76
80
|
|
|
77
81
|
computed: {
|
|
82
|
+
boundary({ boundary, boundaryX, boundaryY }, $el) {
|
|
83
|
+
return [
|
|
84
|
+
query(boundaryX || boundary, $el) || window,
|
|
85
|
+
query(boundaryY || boundary, $el) || window,
|
|
86
|
+
];
|
|
87
|
+
},
|
|
88
|
+
|
|
78
89
|
target({ target, targetX, targetY }, $el) {
|
|
79
90
|
targetX = targetX || target || this.targetEl;
|
|
80
91
|
targetY = targetY || target || this.targetEl;
|
|
@@ -412,8 +423,6 @@ export default {
|
|
|
412
423
|
// Ensure none positioned element does not generate scrollbars
|
|
413
424
|
this.$el.hidden = true;
|
|
414
425
|
|
|
415
|
-
const boundary = query(this.boundary, this.$el);
|
|
416
|
-
const boundaryOffset = offset(boundary || window);
|
|
417
426
|
const viewports = this.target.map((target) => offsetViewport(scrollParents(target)[0]));
|
|
418
427
|
const viewportOffset = this.getViewportOffset(this.$el);
|
|
419
428
|
|
|
@@ -426,7 +435,7 @@ export default {
|
|
|
426
435
|
if (this.axis !== axis && includes([axis, true], this.stretch)) {
|
|
427
436
|
css(this.$el, {
|
|
428
437
|
[prop]: Math.min(
|
|
429
|
-
|
|
438
|
+
offset(this.boundary[i])[prop],
|
|
430
439
|
viewports[i][prop] - 2 * viewportOffset
|
|
431
440
|
),
|
|
432
441
|
[`overflow-${axis}`]: 'auto',
|
|
@@ -444,7 +453,7 @@ export default {
|
|
|
444
453
|
|
|
445
454
|
this.$el.hidden = false;
|
|
446
455
|
|
|
447
|
-
this.positionAt(this.$el, this.target, boundary);
|
|
456
|
+
this.positionAt(this.$el, this.target, this.boundary);
|
|
448
457
|
|
|
449
458
|
for (const [i, [axis, prop, start, end]] of dirs) {
|
|
450
459
|
if (this.axis === axis && includes([axis, true], this.stretch)) {
|
|
@@ -457,17 +466,17 @@ export default {
|
|
|
457
466
|
(targetOffset[start] > elOffset[start]
|
|
458
467
|
? targetOffset[start] -
|
|
459
468
|
Math.max(
|
|
460
|
-
|
|
469
|
+
offset(this.boundary[i])[start],
|
|
461
470
|
viewports[i][start] + viewportOffset
|
|
462
471
|
)
|
|
463
472
|
: Math.min(
|
|
464
|
-
|
|
473
|
+
offset(this.boundary[i])[end],
|
|
465
474
|
viewports[i][end] - viewportOffset
|
|
466
475
|
) - targetOffset[end]) - positionOffset,
|
|
467
476
|
[`overflow-${axis}`]: 'auto',
|
|
468
477
|
});
|
|
469
478
|
|
|
470
|
-
this.positionAt(this.$el, this.target, boundary);
|
|
479
|
+
this.positionAt(this.$el, this.target, this.boundary);
|
|
471
480
|
}
|
|
472
481
|
}
|
|
473
482
|
},
|
package/src/js/core/scrollspy.js
CHANGED
|
@@ -23,10 +23,10 @@ export default function fade(action, target, duration, stagger = 0) {
|
|
|
23
23
|
|
|
24
24
|
const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
|
|
25
25
|
|
|
26
|
-
const leaveFn = wrapIndexFn(() => {
|
|
26
|
+
const leaveFn = wrapIndexFn(async () => {
|
|
27
27
|
addClass(target, clsLeave);
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
await Promise.all(
|
|
30
30
|
getTransitionNodes(target).map(
|
|
31
31
|
(child, i) =>
|
|
32
32
|
new Promise((resolve) =>
|
|
@@ -39,10 +39,12 @@ export default function fade(action, target, duration, stagger = 0) {
|
|
|
39
39
|
)
|
|
40
40
|
)
|
|
41
41
|
)
|
|
42
|
-
)
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
removeClass(target, clsLeave);
|
|
43
45
|
});
|
|
44
46
|
|
|
45
|
-
const enterFn = wrapIndexFn(() => {
|
|
47
|
+
const enterFn = wrapIndexFn(async () => {
|
|
46
48
|
const oldHeight = height(target);
|
|
47
49
|
|
|
48
50
|
addClass(target, clsEnter);
|
|
@@ -51,53 +53,42 @@ export default function fade(action, target, duration, stagger = 0) {
|
|
|
51
53
|
css(children(target), { opacity: 0 });
|
|
52
54
|
|
|
53
55
|
// Ensure UIkit updates have propagated
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Promise.all(transitions).then(() => {
|
|
91
|
-
removeClass(target, clsEnter);
|
|
92
|
-
if (index === transitionIndex(target)) {
|
|
93
|
-
css(target, { height: '', alignContent: '' });
|
|
94
|
-
css(nodes, { opacity: '' });
|
|
95
|
-
delete target.dataset.transition;
|
|
96
|
-
}
|
|
97
|
-
resolve();
|
|
98
|
-
});
|
|
99
|
-
})
|
|
100
|
-
);
|
|
56
|
+
await awaitFrame();
|
|
57
|
+
|
|
58
|
+
const nodes = children(target);
|
|
59
|
+
const newHeight = height(target);
|
|
60
|
+
|
|
61
|
+
// Ensure Grid cells do not stretch when height is applied
|
|
62
|
+
css(target, 'alignContent', 'flex-start');
|
|
63
|
+
height(target, oldHeight);
|
|
64
|
+
|
|
65
|
+
const transitionNodes = getTransitionNodes(target);
|
|
66
|
+
css(nodes, propsOut);
|
|
67
|
+
|
|
68
|
+
const transitions = transitionNodes.map(async (child, i) => {
|
|
69
|
+
await awaitTimeout(i * stagger);
|
|
70
|
+
await Transition.start(child, propsIn, duration / 2, 'ease');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (oldHeight !== newHeight) {
|
|
74
|
+
transitions.push(
|
|
75
|
+
Transition.start(
|
|
76
|
+
target,
|
|
77
|
+
{ height: newHeight },
|
|
78
|
+
duration / 2 + transitionNodes.length * stagger,
|
|
79
|
+
'ease'
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
await Promise.all(transitions).then(() => {
|
|
85
|
+
removeClass(target, clsEnter);
|
|
86
|
+
if (index === transitionIndex(target)) {
|
|
87
|
+
css(target, { height: '', alignContent: '' });
|
|
88
|
+
css(nodes, { opacity: '' });
|
|
89
|
+
delete target.dataset.transition;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
101
92
|
});
|
|
102
93
|
|
|
103
94
|
return hasClass(target, clsLeave)
|
|
@@ -138,3 +129,11 @@ function getTransitionNodes(target) {
|
|
|
138
129
|
[]
|
|
139
130
|
);
|
|
140
131
|
}
|
|
132
|
+
|
|
133
|
+
function awaitFrame() {
|
|
134
|
+
return new Promise((resolve) => requestAnimationFrame(resolve));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function awaitTimeout(timeout) {
|
|
138
|
+
return new Promise((resolve) => setTimeout(resolve, timeout));
|
|
139
|
+
}
|
|
@@ -12,63 +12,54 @@ import {
|
|
|
12
12
|
Transition,
|
|
13
13
|
} from 'uikit-util';
|
|
14
14
|
|
|
15
|
-
export default function (action, target, duration) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
css(el, 'display', propsTo[i].opacity === 0 ? 'none' : '')
|
|
64
|
-
);
|
|
65
|
-
reset(target);
|
|
66
|
-
}, noop)
|
|
67
|
-
.then(resolve);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
})
|
|
71
|
-
);
|
|
15
|
+
export default async function (action, target, duration) {
|
|
16
|
+
await awaitFrame();
|
|
17
|
+
|
|
18
|
+
let nodes = children(target);
|
|
19
|
+
|
|
20
|
+
// Get current state
|
|
21
|
+
const currentProps = nodes.map((el) => getProps(el, true));
|
|
22
|
+
const targetProps = css(target, ['height', 'padding']);
|
|
23
|
+
|
|
24
|
+
// Cancel previous animations
|
|
25
|
+
Transition.cancel(target);
|
|
26
|
+
nodes.forEach(Transition.cancel);
|
|
27
|
+
reset(target);
|
|
28
|
+
|
|
29
|
+
// Adding, sorting, removing nodes
|
|
30
|
+
action();
|
|
31
|
+
|
|
32
|
+
// Find new nodes
|
|
33
|
+
nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
|
|
34
|
+
|
|
35
|
+
// Wait for update to propagate
|
|
36
|
+
await Promise.resolve();
|
|
37
|
+
|
|
38
|
+
// Force update
|
|
39
|
+
fastdom.flush();
|
|
40
|
+
|
|
41
|
+
// Get new state
|
|
42
|
+
const targetPropsTo = css(target, ['height', 'padding']);
|
|
43
|
+
const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
|
|
44
|
+
|
|
45
|
+
// Reset to previous state
|
|
46
|
+
nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
|
|
47
|
+
css(target, { display: 'block', ...targetProps });
|
|
48
|
+
|
|
49
|
+
// Start transitions on next frame
|
|
50
|
+
await awaitFrame();
|
|
51
|
+
|
|
52
|
+
const transitions = nodes
|
|
53
|
+
.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, 'ease'))
|
|
54
|
+
.concat(Transition.start(target, targetPropsTo, duration, 'ease'));
|
|
55
|
+
|
|
56
|
+
await Promise.all(transitions).then(() => {
|
|
57
|
+
nodes.forEach(
|
|
58
|
+
(el, i) =>
|
|
59
|
+
parent(el) === target && css(el, 'display', propsTo[i].opacity === 0 ? 'none' : '')
|
|
60
|
+
);
|
|
61
|
+
reset(target);
|
|
62
|
+
}, noop);
|
|
72
63
|
}
|
|
73
64
|
|
|
74
65
|
function getProps(el, opacity) {
|
|
@@ -146,3 +137,7 @@ function getPositionWithMargin(el) {
|
|
|
146
137
|
|
|
147
138
|
return { top, left, height, width, marginLeft, marginTop, transform: '' };
|
|
148
139
|
}
|
|
140
|
+
|
|
141
|
+
function awaitFrame() {
|
|
142
|
+
return new Promise((resolve) => requestAnimationFrame(resolve));
|
|
143
|
+
}
|
package/src/js/mixin/slider.js
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
$,
|
|
7
7
|
$$,
|
|
8
8
|
clamp,
|
|
9
|
-
fastdom,
|
|
10
9
|
getIndex,
|
|
11
10
|
hasClass,
|
|
12
11
|
isNumber,
|
|
@@ -74,7 +73,7 @@ export default {
|
|
|
74
73
|
},
|
|
75
74
|
|
|
76
75
|
watch() {
|
|
77
|
-
this.$
|
|
76
|
+
this.$emit('resize');
|
|
78
77
|
},
|
|
79
78
|
},
|
|
80
79
|
|
|
@@ -137,7 +136,7 @@ export default {
|
|
|
137
136
|
trigger(next, 'itemshown', [this]);
|
|
138
137
|
|
|
139
138
|
return new Promise((resolve) => {
|
|
140
|
-
|
|
139
|
+
requestAnimationFrame(() => {
|
|
141
140
|
stack.shift();
|
|
142
141
|
if (stack.length) {
|
|
143
142
|
this.show(stack.shift(), true);
|
|
@@ -82,7 +82,6 @@ export default {
|
|
|
82
82
|
const done = () => {
|
|
83
83
|
removeClass(el, cls);
|
|
84
84
|
trigger(el, show ? 'shown' : 'hidden', [this]);
|
|
85
|
-
this.$update(el);
|
|
86
85
|
};
|
|
87
86
|
|
|
88
87
|
return promise
|
|
@@ -127,7 +126,6 @@ export default {
|
|
|
127
126
|
|
|
128
127
|
if (changed) {
|
|
129
128
|
trigger(el, 'toggled', [toggled, this]);
|
|
130
|
-
this.$update(el);
|
|
131
129
|
}
|
|
132
130
|
},
|
|
133
131
|
},
|
package/src/js/util/observer.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { on } from './event';
|
|
2
2
|
import { toNodes } from './lang';
|
|
3
|
-
import { fastdom } from './fastdom';
|
|
4
3
|
import { inBrowser } from './env';
|
|
5
4
|
|
|
6
5
|
export function observeIntersection(targets, cb, options, intersecting = true) {
|
|
@@ -53,7 +52,7 @@ function initResizeListener() {
|
|
|
53
52
|
return;
|
|
54
53
|
}
|
|
55
54
|
pendingResize = true;
|
|
56
|
-
|
|
55
|
+
requestAnimationFrame(() => (pendingResize = false));
|
|
57
56
|
for (const listener of listeners) {
|
|
58
57
|
listener();
|
|
59
58
|
}
|
package/src/js/util/position.js
CHANGED
|
@@ -141,7 +141,10 @@ function getViewport(element, viewportOffset, boundary, i) {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
if (boundary) {
|
|
144
|
-
viewport = getIntersectionArea(
|
|
144
|
+
viewport = getIntersectionArea(
|
|
145
|
+
viewport,
|
|
146
|
+
offset(isArray(boundary) ? boundary[i] : boundary)
|
|
147
|
+
);
|
|
145
148
|
}
|
|
146
149
|
|
|
147
150
|
return viewport;
|
|
@@ -454,7 +454,7 @@ ul.uk-nav-sub {
|
|
|
454
454
|
* Naming is in plural to prevent conflicts with divider sub object.
|
|
455
455
|
*/
|
|
456
456
|
|
|
457
|
-
.uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
|
|
457
|
+
.uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
|
|
458
458
|
margin-top: @nav-dividers-margin-top;
|
|
459
459
|
padding-top: @nav-dividers-margin-top;
|
|
460
460
|
border-top: @nav-dividers-border-width solid @nav-dividers-border;
|
|
@@ -77,6 +77,7 @@
|
|
|
77
77
|
@navbar-dropdown-large-shift-margin: 0;
|
|
78
78
|
@navbar-dropdown-large-padding: 40px;
|
|
79
79
|
|
|
80
|
+
@navbar-dropdown-dropbar-margin: 0;
|
|
80
81
|
@navbar-dropdown-dropbar-shift-margin: 0;
|
|
81
82
|
@navbar-dropdown-dropbar-padding-top: @navbar-dropdown-padding;
|
|
82
83
|
@navbar-dropdown-dropbar-padding-bottom: @navbar-dropdown-dropbar-padding-top;
|
|
@@ -462,7 +463,7 @@
|
|
|
462
463
|
background: transparent;
|
|
463
464
|
/* 3 */
|
|
464
465
|
padding: @navbar-dropdown-dropbar-padding-top 0 @navbar-dropdown-dropbar-padding-bottom 0;
|
|
465
|
-
--uk-position-offset:
|
|
466
|
+
--uk-position-offset: @navbar-dropdown-dropbar-margin;
|
|
466
467
|
--uk-position-shift-offset: @navbar-dropdown-dropbar-shift-margin;
|
|
467
468
|
--uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin;
|
|
468
469
|
.hook-navbar-dropdown-dropbar();
|
|
@@ -454,7 +454,7 @@ ul.uk-nav-sub {
|
|
|
454
454
|
* Naming is in plural to prevent conflicts with divider sub object.
|
|
455
455
|
*/
|
|
456
456
|
|
|
457
|
-
.uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
|
|
457
|
+
.uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
|
|
458
458
|
margin-top: $nav-dividers-margin-top;
|
|
459
459
|
padding-top: $nav-dividers-margin-top;
|
|
460
460
|
border-top: $nav-dividers-border-width solid $nav-dividers-border;
|
|
@@ -77,6 +77,7 @@ $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-ho
|
|
|
77
77
|
$navbar-dropdown-large-shift-margin: 0 !default;
|
|
78
78
|
$navbar-dropdown-large-padding: 40px !default;
|
|
79
79
|
|
|
80
|
+
$navbar-dropdown-dropbar-margin: 0 !default;
|
|
80
81
|
$navbar-dropdown-dropbar-shift-margin: 0 !default;
|
|
81
82
|
$navbar-dropdown-dropbar-padding-top: $navbar-dropdown-padding !default;
|
|
82
83
|
$navbar-dropdown-dropbar-padding-bottom: $navbar-dropdown-dropbar-padding-top !default;
|
|
@@ -462,7 +463,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
|
|
|
462
463
|
background: transparent;
|
|
463
464
|
/* 3 */
|
|
464
465
|
padding: $navbar-dropdown-dropbar-padding-top 0 $navbar-dropdown-dropbar-padding-bottom 0;
|
|
465
|
-
--uk-position-offset:
|
|
466
|
+
--uk-position-offset: #{$navbar-dropdown-dropbar-margin};
|
|
466
467
|
--uk-position-shift-offset: #{$navbar-dropdown-dropbar-shift-margin};
|
|
467
468
|
--uk-position-viewport-offset: #{$navbar-dropdown-dropbar-viewport-margin};
|
|
468
469
|
@if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
|