uikit 3.11.2-dev.c2430c233 → 3.11.2-dev.c7ed3c19b
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/.eslintrc.json +4 -49
- package/.prettierignore +14 -0
- package/.prettierrc.json +13 -0
- package/.webstorm.js +3 -3
- package/CHANGELOG.md +5 -0
- package/build/.eslintrc.json +1 -3
- package/build/build.js +26 -28
- package/build/icons.js +7 -11
- package/build/less.js +48 -36
- package/build/package.json +2 -2
- package/build/prefix.js +21 -18
- package/build/publishDev.js +6 -8
- package/build/release.js +20 -17
- package/build/scope.js +21 -11
- package/build/scss.js +72 -39
- package/build/util.js +71 -62
- package/build/wrapper/icons.js +0 -2
- 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 +88 -133
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +409 -438
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1116 -1305
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1164 -1383
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +94 -114
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +294 -345
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +292 -344
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +727 -850
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +292 -344
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +615 -799
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +588 -619
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +324 -356
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +155 -167
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5356 -6705
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +7 -9
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +8116 -9909
- package/dist/js/uikit.min.js +1 -1
- package/jsconfig.json +1 -1
- package/package.json +64 -60
- package/src/js/api/boot.js +25 -32
- package/src/js/api/component.js +23 -27
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +13 -32
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +65 -82
- package/src/js/components/countdown.js +24 -50
- package/src/js/components/filter.js +71 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +11 -23
- package/src/js/components/internal/slider-transitioner.js +66 -45
- package/src/js/components/internal/slideshow-animations.js +42 -61
- package/src/js/components/lightbox-panel.js +135 -109
- package/src/js/components/lightbox.js +18 -39
- package/src/js/components/notification.js +49 -43
- package/src/js/components/parallax.js +16 -30
- package/src/js/components/slider-parallax.js +13 -23
- package/src/js/components/slider.js +75 -64
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +8 -13
- package/src/js/components/sortable.js +125 -106
- package/src/js/components/tooltip.js +41 -31
- package/src/js/components/upload.js +52 -63
- package/src/js/core/accordion.js +53 -48
- package/src/js/core/alert.js +10 -17
- package/src/js/core/core.js +74 -53
- package/src/js/core/cover.js +11 -15
- package/src/js/core/drop.js +106 -92
- package/src/js/core/form-custom.js +20 -25
- package/src/js/core/gif.js +3 -7
- package/src/js/core/grid.js +57 -58
- package/src/js/core/height-match.js +16 -29
- package/src/js/core/height-viewport.js +28 -35
- package/src/js/core/icon.js +38 -50
- package/src/js/core/img.js +59 -58
- package/src/js/core/index.js +39 -39
- package/src/js/core/leader.js +9 -18
- package/src/js/core/margin.js +21 -37
- package/src/js/core/modal.js +50 -36
- package/src/js/core/nav.js +2 -4
- package/src/js/core/navbar.js +112 -88
- package/src/js/core/offcanvas.js +49 -53
- package/src/js/core/overflow-auto.js +13 -17
- package/src/js/core/responsive.js +14 -12
- package/src/js/core/scroll.js +10 -20
- package/src/js/core/scrollspy-nav.js +34 -31
- package/src/js/core/scrollspy.js +37 -54
- package/src/js/core/sticky.js +130 -91
- package/src/js/core/svg.js +60 -79
- package/src/js/core/switcher.js +47 -46
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +64 -66
- package/src/js/core/video.js +11 -22
- package/src/js/mixin/animate.js +19 -20
- package/src/js/mixin/class.js +2 -4
- package/src/js/mixin/container.js +7 -11
- package/src/js/mixin/internal/animate-fade.js +73 -30
- package/src/js/mixin/internal/animate-slide.js +61 -41
- package/src/js/mixin/internal/slideshow-animations.js +7 -14
- package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
- package/src/js/mixin/media.js +5 -10
- package/src/js/mixin/modal.js +89 -66
- package/src/js/mixin/parallax.js +53 -48
- package/src/js/mixin/position.js +26 -20
- package/src/js/mixin/slider-autoplay.js +12 -21
- package/src/js/mixin/slider-drag.js +64 -65
- package/src/js/mixin/slider-nav.js +26 -35
- package/src/js/mixin/slider-reactive.js +2 -8
- package/src/js/mixin/slider.js +51 -50
- package/src/js/mixin/slideshow.js +13 -19
- package/src/js/mixin/togglable.js +90 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +27 -43
- package/src/js/util/animation.js +82 -75
- package/src/js/util/attr.js +17 -21
- package/src/js/util/class.js +14 -52
- package/src/js/util/dimensions.js +56 -43
- package/src/js/util/dom.js +40 -73
- package/src/js/util/env.js +7 -12
- package/src/js/util/event.js +60 -59
- package/src/js/util/fastdom.js +1 -6
- package/src/js/util/filter.js +17 -34
- package/src/js/util/index.js +0 -1
- package/src/js/util/lang.js +79 -119
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/options.js +44 -49
- package/src/js/util/player.js +40 -36
- package/src/js/util/position.js +54 -46
- package/src/js/util/selector.js +34 -49
- package/src/js/util/style.js +36 -46
- package/src/js/util/viewport.js +75 -64
- package/tests/js/index.js +114 -85
- package/src/js/mixin/flex-bug.js +0 -56
- package/src/js/util/promise.js +0 -191
package/src/js/core/toggle.js
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import Media from '../mixin/media';
|
|
2
2
|
import Togglable from '../mixin/togglable';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
attr,
|
|
5
|
+
closest,
|
|
6
|
+
hasClass,
|
|
7
|
+
includes,
|
|
8
|
+
isBoolean,
|
|
9
|
+
isFocusable,
|
|
10
|
+
isTouch,
|
|
11
|
+
matches,
|
|
12
|
+
once,
|
|
13
|
+
pointerDown,
|
|
14
|
+
pointerEnter,
|
|
15
|
+
pointerLeave,
|
|
16
|
+
queryAll,
|
|
17
|
+
trigger,
|
|
18
|
+
within,
|
|
19
|
+
} from 'uikit-util';
|
|
4
20
|
|
|
5
21
|
const KEY_SPACE = 32;
|
|
6
22
|
|
|
7
23
|
export default {
|
|
8
|
-
|
|
9
24
|
mixins: [Media, Togglable],
|
|
10
25
|
|
|
11
26
|
args: 'target',
|
|
@@ -14,14 +29,14 @@ export default {
|
|
|
14
29
|
href: String,
|
|
15
30
|
target: null,
|
|
16
31
|
mode: 'list',
|
|
17
|
-
queued: Boolean
|
|
32
|
+
queued: Boolean,
|
|
18
33
|
},
|
|
19
34
|
|
|
20
35
|
data: {
|
|
21
36
|
href: false,
|
|
22
37
|
target: false,
|
|
23
38
|
mode: 'click',
|
|
24
|
-
queued: true
|
|
39
|
+
queued: true,
|
|
25
40
|
},
|
|
26
41
|
|
|
27
42
|
connected() {
|
|
@@ -31,26 +46,21 @@ export default {
|
|
|
31
46
|
},
|
|
32
47
|
|
|
33
48
|
computed: {
|
|
34
|
-
|
|
35
49
|
target: {
|
|
36
|
-
|
|
37
|
-
get({href, target}, $el) {
|
|
50
|
+
get({ href, target }, $el) {
|
|
38
51
|
target = queryAll(target || href, $el);
|
|
39
|
-
return target.length && target || [$el];
|
|
52
|
+
return (target.length && target) || [$el];
|
|
40
53
|
},
|
|
41
54
|
|
|
42
55
|
watch() {
|
|
43
56
|
this.updateAria();
|
|
44
57
|
},
|
|
45
58
|
|
|
46
|
-
immediate: true
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
59
|
+
immediate: true,
|
|
60
|
+
},
|
|
50
61
|
},
|
|
51
62
|
|
|
52
63
|
events: [
|
|
53
|
-
|
|
54
64
|
{
|
|
55
65
|
name: pointerDown,
|
|
56
66
|
|
|
@@ -59,7 +69,6 @@ export default {
|
|
|
59
69
|
},
|
|
60
70
|
|
|
61
71
|
handler(e) {
|
|
62
|
-
|
|
63
72
|
if (!isTouch(e) || this._showState) {
|
|
64
73
|
return;
|
|
65
74
|
}
|
|
@@ -67,17 +76,22 @@ export default {
|
|
|
67
76
|
// Clicking a button does not give it focus on all browsers and platforms
|
|
68
77
|
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus
|
|
69
78
|
trigger(this.$el, 'focus');
|
|
70
|
-
once(
|
|
79
|
+
once(
|
|
80
|
+
document,
|
|
81
|
+
pointerDown,
|
|
82
|
+
() => trigger(this.$el, 'blur'),
|
|
83
|
+
true,
|
|
84
|
+
(e) => !within(e.target, this.$el)
|
|
85
|
+
);
|
|
71
86
|
|
|
72
87
|
// Prevent initial click to prevent double toggle through focus + click
|
|
73
88
|
if (includes(this.mode, 'click')) {
|
|
74
89
|
this._preventClick = true;
|
|
75
90
|
}
|
|
76
|
-
}
|
|
91
|
+
},
|
|
77
92
|
},
|
|
78
93
|
|
|
79
94
|
{
|
|
80
|
-
|
|
81
95
|
name: `${pointerEnter} ${pointerLeave} focus blur`,
|
|
82
96
|
|
|
83
97
|
filter() {
|
|
@@ -93,16 +107,16 @@ export default {
|
|
|
93
107
|
const expanded = attr(this.$el, 'aria-expanded');
|
|
94
108
|
|
|
95
109
|
// Skip hide if still hovered or focused
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
110
|
+
if (
|
|
111
|
+
!show &&
|
|
112
|
+
((e.type === pointerLeave && matches(this.$el, ':focus')) ||
|
|
113
|
+
(e.type === 'blur' && matches(this.$el, ':hover')))
|
|
114
|
+
) {
|
|
100
115
|
return;
|
|
101
116
|
}
|
|
102
117
|
|
|
103
118
|
// Skip if state does not change e.g. hover + focus received
|
|
104
119
|
if (this._showState && show === (expanded !== this._showState)) {
|
|
105
|
-
|
|
106
120
|
// Ensure reset if state has changed through click
|
|
107
121
|
if (!show) {
|
|
108
122
|
this._showState = null;
|
|
@@ -113,8 +127,7 @@ export default {
|
|
|
113
127
|
this._showState = show ? expanded : null;
|
|
114
128
|
|
|
115
129
|
this.toggle(`toggle${show ? 'show' : 'hide'}`);
|
|
116
|
-
}
|
|
117
|
-
|
|
130
|
+
},
|
|
118
131
|
},
|
|
119
132
|
|
|
120
133
|
{
|
|
@@ -129,11 +142,10 @@ export default {
|
|
|
129
142
|
e.preventDefault();
|
|
130
143
|
this.$el.click();
|
|
131
144
|
}
|
|
132
|
-
}
|
|
145
|
+
},
|
|
133
146
|
},
|
|
134
147
|
|
|
135
148
|
{
|
|
136
|
-
|
|
137
149
|
name: 'click',
|
|
138
150
|
|
|
139
151
|
filter() {
|
|
@@ -141,28 +153,25 @@ export default {
|
|
|
141
153
|
},
|
|
142
154
|
|
|
143
155
|
handler(e) {
|
|
144
|
-
|
|
145
156
|
if (this._preventClick) {
|
|
146
|
-
return this._preventClick = null;
|
|
157
|
+
return (this._preventClick = null);
|
|
147
158
|
}
|
|
148
159
|
|
|
149
160
|
let link;
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
161
|
+
if (
|
|
162
|
+
closest(e.target, 'a[href="#"], a[href=""]') ||
|
|
163
|
+
((link = closest(e.target, 'a[href]')) &&
|
|
164
|
+
(attr(this.$el, 'aria-expanded') !== 'true' ||
|
|
165
|
+
(link.hash && matches(this.target, link.hash))))
|
|
155
166
|
) {
|
|
156
167
|
e.preventDefault();
|
|
157
168
|
}
|
|
158
169
|
|
|
159
170
|
this.toggle();
|
|
160
|
-
}
|
|
161
|
-
|
|
171
|
+
},
|
|
162
172
|
},
|
|
163
173
|
|
|
164
174
|
{
|
|
165
|
-
|
|
166
175
|
name: 'toggled',
|
|
167
176
|
|
|
168
177
|
self: true,
|
|
@@ -175,36 +184,27 @@ export default {
|
|
|
175
184
|
if (e.target === this.target[0]) {
|
|
176
185
|
this.updateAria(toggled);
|
|
177
186
|
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
187
|
+
},
|
|
188
|
+
},
|
|
181
189
|
],
|
|
182
190
|
|
|
183
191
|
update: {
|
|
184
|
-
|
|
185
192
|
read() {
|
|
186
|
-
return includes(this.mode, 'media') && this.media
|
|
187
|
-
? {match: this.matchMedia}
|
|
188
|
-
: false;
|
|
193
|
+
return includes(this.mode, 'media') && this.media ? { match: this.matchMedia } : false;
|
|
189
194
|
},
|
|
190
195
|
|
|
191
|
-
write({match}) {
|
|
192
|
-
|
|
196
|
+
write({ match }) {
|
|
193
197
|
const toggled = this.isToggled(this.target);
|
|
194
198
|
if (match ? !toggled : toggled) {
|
|
195
199
|
this.toggle();
|
|
196
200
|
}
|
|
197
|
-
|
|
198
201
|
},
|
|
199
202
|
|
|
200
|
-
events: ['resize']
|
|
201
|
-
|
|
203
|
+
events: ['resize'],
|
|
202
204
|
},
|
|
203
205
|
|
|
204
206
|
methods: {
|
|
205
|
-
|
|
206
|
-
toggle(type) {
|
|
207
|
-
|
|
207
|
+
async toggle(type) {
|
|
208
208
|
if (!trigger(this.target, type || 'toggle', [this])) {
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
@@ -213,23 +213,22 @@ export default {
|
|
|
213
213
|
return this.toggleElement(this.target);
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
const leaving = this.target.filter(el => hasClass(el, this.clsLeave));
|
|
216
|
+
const leaving = this.target.filter((el) => hasClass(el, this.clsLeave));
|
|
217
217
|
|
|
218
218
|
if (leaving.length) {
|
|
219
|
-
this.target
|
|
219
|
+
for (const el of this.target) {
|
|
220
220
|
const isLeaving = includes(leaving, el);
|
|
221
221
|
this.toggleElement(el, isLeaving, isLeaving);
|
|
222
|
-
}
|
|
222
|
+
}
|
|
223
223
|
return;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
const toggled = this.target.filter(this.isToggled);
|
|
227
|
-
this.toggleElement(toggled, false)
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
227
|
+
await this.toggleElement(toggled, false);
|
|
228
|
+
await this.toggleElement(
|
|
229
|
+
this.target.filter((el) => !includes(toggled, el)),
|
|
230
|
+
true
|
|
231
231
|
);
|
|
232
|
-
|
|
233
232
|
},
|
|
234
233
|
|
|
235
234
|
updateAria(toggled) {
|
|
@@ -237,12 +236,11 @@ export default {
|
|
|
237
236
|
return;
|
|
238
237
|
}
|
|
239
238
|
|
|
240
|
-
attr(
|
|
241
|
-
|
|
242
|
-
|
|
239
|
+
attr(
|
|
240
|
+
this.$el,
|
|
241
|
+
'aria-expanded',
|
|
242
|
+
isBoolean(toggled) ? toggled : this.isToggled(this.target)
|
|
243
243
|
);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
244
|
+
},
|
|
245
|
+
},
|
|
248
246
|
};
|
package/src/js/core/video.js
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
import {css, hasAttr, isInView, isVideo, isVisible, mute, pause, play} from 'uikit-util';
|
|
1
|
+
import { css, hasAttr, isInView, isVideo, isVisible, mute, pause, play } from 'uikit-util';
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
|
|
5
4
|
args: 'autoplay',
|
|
6
5
|
|
|
7
6
|
props: {
|
|
8
7
|
automute: Boolean,
|
|
9
|
-
autoplay: Boolean
|
|
8
|
+
autoplay: Boolean,
|
|
10
9
|
},
|
|
11
10
|
|
|
12
11
|
data: {
|
|
13
12
|
automute: false,
|
|
14
|
-
autoplay: true
|
|
13
|
+
autoplay: true,
|
|
15
14
|
},
|
|
16
15
|
|
|
17
16
|
computed: {
|
|
18
|
-
|
|
19
|
-
inView({autoplay}) {
|
|
17
|
+
inView({ autoplay }) {
|
|
20
18
|
return autoplay === 'inview';
|
|
21
|
-
}
|
|
22
|
-
|
|
19
|
+
},
|
|
23
20
|
},
|
|
24
21
|
|
|
25
22
|
connected() {
|
|
26
|
-
|
|
27
23
|
if (this.inView && !hasAttr(this.$el, 'preload')) {
|
|
28
24
|
this.$el.preload = 'none';
|
|
29
25
|
}
|
|
@@ -31,35 +27,28 @@ export default {
|
|
|
31
27
|
if (this.automute) {
|
|
32
28
|
mute(this.$el);
|
|
33
29
|
}
|
|
34
|
-
|
|
35
30
|
},
|
|
36
31
|
|
|
37
32
|
update: {
|
|
38
|
-
|
|
39
33
|
read() {
|
|
40
|
-
|
|
41
34
|
if (!isVideo(this.$el)) {
|
|
42
35
|
return false;
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
return {
|
|
46
39
|
visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden',
|
|
47
|
-
inView: this.inView && isInView(this.$el)
|
|
40
|
+
inView: this.inView && isInView(this.$el),
|
|
48
41
|
};
|
|
49
42
|
},
|
|
50
43
|
|
|
51
|
-
write({visible, inView}) {
|
|
52
|
-
|
|
53
|
-
if (!visible || this.inView && !inView) {
|
|
44
|
+
write({ visible, inView }) {
|
|
45
|
+
if (!visible || (this.inView && !inView)) {
|
|
54
46
|
pause(this.$el);
|
|
55
|
-
} else if (this.autoplay === true || this.inView && inView) {
|
|
47
|
+
} else if (this.autoplay === true || (this.inView && inView)) {
|
|
56
48
|
play(this.$el);
|
|
57
49
|
}
|
|
58
|
-
|
|
59
50
|
},
|
|
60
51
|
|
|
61
|
-
events: ['resize', 'scroll']
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
52
|
+
events: ['resize', 'scroll'],
|
|
53
|
+
},
|
|
65
54
|
};
|
package/src/js/mixin/animate.js
CHANGED
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
import fade from './internal/animate-fade';
|
|
2
2
|
import slide from './internal/animate-slide';
|
|
3
|
-
import {noop
|
|
3
|
+
import { noop } from 'uikit-util';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
|
-
|
|
7
6
|
props: {
|
|
8
7
|
duration: Number,
|
|
9
|
-
animation: Boolean
|
|
8
|
+
animation: Boolean,
|
|
10
9
|
},
|
|
11
10
|
|
|
12
11
|
data: {
|
|
13
12
|
duration: 150,
|
|
14
|
-
animation: 'slide'
|
|
13
|
+
animation: 'slide',
|
|
15
14
|
},
|
|
16
15
|
|
|
17
16
|
methods: {
|
|
18
|
-
|
|
19
17
|
animate(action, target = this.$el) {
|
|
20
|
-
|
|
21
18
|
const name = this.animation;
|
|
22
|
-
const animationFn =
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const animationFn =
|
|
20
|
+
name === 'fade'
|
|
21
|
+
? fade
|
|
22
|
+
: name === 'delayed-fade'
|
|
25
23
|
? (...args) => fade(...args, 40)
|
|
26
24
|
: name
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return animationFn(action, target, this.duration)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
? slide
|
|
26
|
+
: () => {
|
|
27
|
+
action();
|
|
28
|
+
return Promise.resolve();
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return animationFn(action, target, this.duration).then(
|
|
32
|
+
() => this.$update(target, 'resize'),
|
|
33
|
+
noop
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
},
|
|
38
37
|
};
|
package/src/js/mixin/class.js
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import {$} from 'uikit-util';
|
|
1
|
+
import { $ } from 'uikit-util';
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
|
-
|
|
5
4
|
props: {
|
|
6
|
-
container: Boolean
|
|
5
|
+
container: Boolean,
|
|
7
6
|
},
|
|
8
7
|
|
|
9
8
|
data: {
|
|
10
|
-
container: true
|
|
9
|
+
container: true,
|
|
11
10
|
},
|
|
12
11
|
|
|
13
12
|
computed: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
13
|
+
container({ container }) {
|
|
14
|
+
return (container === true && this.$container) || (container && $(container));
|
|
15
|
+
},
|
|
16
|
+
},
|
|
21
17
|
};
|
|
@@ -1,43 +1,58 @@
|
|
|
1
|
-
import {getRows} from '../../core/margin';
|
|
2
|
-
import {
|
|
1
|
+
import { getRows } from '../../core/margin';
|
|
2
|
+
import {
|
|
3
|
+
addClass,
|
|
4
|
+
children,
|
|
5
|
+
css,
|
|
6
|
+
hasClass,
|
|
7
|
+
height,
|
|
8
|
+
isInView,
|
|
9
|
+
once,
|
|
10
|
+
removeClass,
|
|
11
|
+
sortBy,
|
|
12
|
+
toNumber,
|
|
13
|
+
Transition,
|
|
14
|
+
} from 'uikit-util';
|
|
3
15
|
|
|
4
16
|
const clsLeave = 'uk-transition-leave';
|
|
5
17
|
const clsEnter = 'uk-transition-enter';
|
|
6
18
|
|
|
7
19
|
export default function fade(action, target, duration, stagger = 0) {
|
|
8
|
-
|
|
9
20
|
const index = transitionIndex(target, true);
|
|
10
|
-
const propsIn = {opacity: 1};
|
|
11
|
-
const propsOut = {opacity: 0};
|
|
21
|
+
const propsIn = { opacity: 1 };
|
|
22
|
+
const propsOut = { opacity: 0 };
|
|
12
23
|
|
|
13
|
-
const wrapIndexFn = fn =>
|
|
14
|
-
() => index === transitionIndex(target) ? fn() : Promise.reject();
|
|
24
|
+
const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
|
|
15
25
|
|
|
16
26
|
const leaveFn = wrapIndexFn(() => {
|
|
17
|
-
|
|
18
27
|
addClass(target, clsLeave);
|
|
19
28
|
|
|
20
|
-
return Promise.all(
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
return Promise.all(
|
|
30
|
+
getTransitionNodes(target).map(
|
|
31
|
+
(child, i) =>
|
|
32
|
+
new Promise((resolve) =>
|
|
33
|
+
setTimeout(
|
|
34
|
+
() =>
|
|
35
|
+
Transition.start(child, propsOut, duration / 2, 'ease').then(
|
|
36
|
+
resolve
|
|
37
|
+
),
|
|
38
|
+
i * stagger
|
|
39
|
+
)
|
|
40
|
+
)
|
|
23
41
|
)
|
|
24
|
-
)
|
|
25
|
-
|
|
42
|
+
).then(() => removeClass(target, clsLeave));
|
|
26
43
|
});
|
|
27
44
|
|
|
28
45
|
const enterFn = wrapIndexFn(() => {
|
|
29
|
-
|
|
30
46
|
const oldHeight = height(target);
|
|
31
47
|
|
|
32
48
|
addClass(target, clsEnter);
|
|
33
49
|
action();
|
|
34
50
|
|
|
35
|
-
css(children(target), {opacity: 0});
|
|
51
|
+
css(children(target), { opacity: 0 });
|
|
36
52
|
|
|
37
53
|
// Ensure UIkit updates have propagated
|
|
38
|
-
return new Promise(resolve =>
|
|
54
|
+
return new Promise((resolve) =>
|
|
39
55
|
requestAnimationFrame(() => {
|
|
40
|
-
|
|
41
56
|
const nodes = children(target);
|
|
42
57
|
const newHeight = height(target);
|
|
43
58
|
|
|
@@ -48,21 +63,35 @@ export default function fade(action, target, duration, stagger = 0) {
|
|
|
48
63
|
const transitionNodes = getTransitionNodes(target);
|
|
49
64
|
css(nodes, propsOut);
|
|
50
65
|
|
|
51
|
-
const transitions = transitionNodes.map(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
66
|
+
const transitions = transitionNodes.map(
|
|
67
|
+
(child, i) =>
|
|
68
|
+
new Promise((resolve) =>
|
|
69
|
+
setTimeout(
|
|
70
|
+
() =>
|
|
71
|
+
Transition.start(child, propsIn, duration / 2, 'ease').then(
|
|
72
|
+
resolve
|
|
73
|
+
),
|
|
74
|
+
i * stagger
|
|
75
|
+
)
|
|
76
|
+
)
|
|
55
77
|
);
|
|
56
78
|
|
|
57
79
|
if (oldHeight !== newHeight) {
|
|
58
|
-
transitions.push(
|
|
80
|
+
transitions.push(
|
|
81
|
+
Transition.start(
|
|
82
|
+
target,
|
|
83
|
+
{ height: newHeight },
|
|
84
|
+
duration / 2 + transitionNodes.length * stagger,
|
|
85
|
+
'ease'
|
|
86
|
+
)
|
|
87
|
+
);
|
|
59
88
|
}
|
|
60
89
|
|
|
61
90
|
Promise.all(transitions).then(() => {
|
|
62
91
|
removeClass(target, clsEnter);
|
|
63
92
|
if (index === transitionIndex(target)) {
|
|
64
|
-
css(target, {height: '', alignContent: ''});
|
|
65
|
-
css(nodes, {opacity: ''});
|
|
93
|
+
css(target, { height: '', alignContent: '' });
|
|
94
|
+
css(nodes, { opacity: '' });
|
|
66
95
|
delete target.dataset.transition;
|
|
67
96
|
}
|
|
68
97
|
resolve();
|
|
@@ -74,8 +103,8 @@ export default function fade(action, target, duration, stagger = 0) {
|
|
|
74
103
|
return hasClass(target, clsLeave)
|
|
75
104
|
? waitTransitionend(target).then(enterFn)
|
|
76
105
|
: hasClass(target, clsEnter)
|
|
77
|
-
|
|
78
|
-
|
|
106
|
+
? waitTransitionend(target).then(leaveFn).then(enterFn)
|
|
107
|
+
: leaveFn().then(enterFn);
|
|
79
108
|
}
|
|
80
109
|
|
|
81
110
|
function transitionIndex(target, next) {
|
|
@@ -87,11 +116,25 @@ function transitionIndex(target, next) {
|
|
|
87
116
|
}
|
|
88
117
|
|
|
89
118
|
function waitTransitionend(target) {
|
|
90
|
-
return Promise.all(
|
|
91
|
-
|
|
92
|
-
|
|
119
|
+
return Promise.all(
|
|
120
|
+
children(target)
|
|
121
|
+
.filter(Transition.inProgress)
|
|
122
|
+
.map(
|
|
123
|
+
(el) =>
|
|
124
|
+
new Promise((resolve) => once(el, 'transitionend transitioncanceled', resolve))
|
|
125
|
+
)
|
|
126
|
+
);
|
|
93
127
|
}
|
|
94
128
|
|
|
95
129
|
function getTransitionNodes(target) {
|
|
96
|
-
return getRows(children(target)).reduce(
|
|
130
|
+
return getRows(children(target)).reduce(
|
|
131
|
+
(nodes, row) =>
|
|
132
|
+
nodes.concat(
|
|
133
|
+
sortBy(
|
|
134
|
+
row.filter((el) => isInView(el)),
|
|
135
|
+
'offsetLeft'
|
|
136
|
+
)
|
|
137
|
+
),
|
|
138
|
+
[]
|
|
139
|
+
);
|
|
97
140
|
}
|