uikit 3.17.12-dev.f1425d280 → 3.18.1-dev.edde0251f
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 +26 -0
- package/dist/css/uikit-core-rtl.css +577 -504
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +577 -504
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +600 -527
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +600 -527
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +2 -4
- 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 +71 -49
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +71 -49
- 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 +11 -6
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +8 -3
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +735 -37
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +8 -3
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +792 -129
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +7 -7
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +2 -8
- 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 +284 -272
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +9 -4
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +478 -352
- package/dist/js/uikit.min.js +1 -1
- package/package.json +3 -3
- package/src/images/components/navbar-toggle-icon.svg +1 -1
- package/src/images/icons/arrow-up-right.svg +4 -0
- package/src/images/icons/git-branch.svg +4 -4
- package/src/images/icons/git-fork.svg +4 -4
- package/src/images/icons/link-external.svg +5 -0
- package/src/images/icons/signal.svg +3 -0
- package/src/images/icons/telegram.svg +3 -0
- package/src/images/icons/threads.svg +3 -0
- package/src/images/icons/x.svg +3 -0
- package/src/js/components/countdown.js +1 -3
- package/src/js/components/internal/slider-preload.js +6 -0
- package/src/js/components/lightbox-panel.js +2 -6
- package/src/js/components/parallax.js +1 -20
- package/src/js/components/slider.js +38 -18
- package/src/js/components/slideshow.js +14 -46
- package/src/js/components/sortable.js +7 -6
- package/src/js/components/tooltip.js +1 -7
- package/src/js/core/accordion.js +1 -1
- package/src/js/core/drop.js +3 -5
- package/src/js/core/dropnav.js +24 -20
- package/src/js/core/height-match.js +7 -3
- package/src/js/core/height-placeholder.js +32 -0
- package/src/js/core/icon.js +12 -5
- package/src/js/core/index.js +2 -0
- package/src/js/core/inverse.js +103 -0
- package/src/js/core/modal.js +13 -0
- package/src/js/core/navbar.js +32 -172
- package/src/js/core/responsive.js +2 -29
- package/src/js/core/sticky.js +45 -29
- package/src/js/mixin/modal.js +1 -1
- package/src/js/mixin/parallax.js +19 -0
- package/src/js/mixin/slider-autoplay.js +1 -3
- package/src/js/mixin/slider-drag.js +22 -19
- package/src/js/mixin/slider-nav.js +10 -1
- package/src/js/mixin/slider-parallax.js +138 -0
- package/src/js/mixin/slider-reactive.js +1 -1
- package/src/js/mixin/slider.js +25 -3
- package/src/js/util/animation.js +14 -14
- package/src/js/util/dom.js +2 -2
- package/src/js/util/mouse.js +8 -11
- package/src/js/{mixin/internal → util}/scroll.js +2 -2
- package/src/js/util/selector.js +4 -2
- package/src/js/util/style.js +3 -3
- package/src/js/util/viewport.js +8 -4
- package/src/less/components/align.less +2 -2
- package/src/less/components/animation.less +2 -2
- package/src/less/components/article.less +2 -2
- package/src/less/components/base.less +3 -3
- package/src/less/components/card.less +13 -6
- package/src/less/components/column.less +3 -3
- package/src/less/components/container.less +3 -3
- package/src/less/components/divider.less +2 -2
- package/src/less/components/dropbar.less +1 -1
- package/src/less/components/dropdown.less +1 -1
- package/src/less/components/dropnav.less +1 -1
- package/src/less/components/form.less +1 -1
- package/src/less/components/grid.less +3 -3
- package/src/less/components/height.less +1 -1
- package/src/less/components/icon.less +3 -3
- package/src/less/components/inverse.less +12 -0
- package/src/less/components/link.less +1 -1
- package/src/less/components/modal.less +3 -3
- package/src/less/components/nav.less +66 -0
- package/src/less/components/navbar.less +7 -11
- package/src/less/components/overlay.less +5 -0
- package/src/less/components/position.less +7 -7
- package/src/less/components/section.less +6 -5
- package/src/less/components/sticky.less +1 -1
- package/src/less/components/svg.less +3 -3
- package/src/less/components/tile.less +10 -0
- package/src/less/components/transition.less +9 -9
- package/src/less/components/utility.less +4 -4
- package/src/less/components/width.less +7 -7
- package/src/less/theme/alert.less +1 -1
- package/src/less/theme/align.less +1 -1
- package/src/less/theme/animation.less +1 -1
- package/src/less/theme/article.less +1 -1
- package/src/less/theme/background.less +1 -1
- package/src/less/theme/badge.less +1 -1
- package/src/less/theme/base.less +1 -1
- package/src/less/theme/breadcrumb.less +1 -1
- package/src/less/theme/button.less +1 -1
- package/src/less/theme/card.less +1 -1
- package/src/less/theme/close.less +1 -1
- package/src/less/theme/column.less +1 -1
- package/src/less/theme/comment.less +1 -1
- package/src/less/theme/container.less +1 -1
- package/src/less/theme/description-list.less +1 -1
- package/src/less/theme/divider.less +1 -1
- package/src/less/theme/dotnav.less +1 -1
- package/src/less/theme/drop.less +1 -1
- package/src/less/theme/dropbar.less +1 -1
- package/src/less/theme/dropdown.less +1 -1
- package/src/less/theme/form-range.less +1 -1
- package/src/less/theme/height.less +1 -1
- package/src/less/theme/icon.less +1 -1
- package/src/less/theme/iconnav.less +1 -1
- package/src/less/theme/inverse.less +1 -1
- package/src/less/theme/label.less +1 -1
- package/src/less/theme/leader.less +1 -1
- package/src/less/theme/lightbox.less +1 -1
- package/src/less/theme/margin.less +1 -1
- package/src/less/theme/modal.less +1 -1
- package/src/less/theme/nav.less +1 -1
- package/src/less/theme/navbar.less +3 -3
- package/src/less/theme/notification.less +1 -1
- package/src/less/theme/offcanvas.less +1 -1
- package/src/less/theme/overlay.less +1 -1
- package/src/less/theme/padding.less +1 -1
- package/src/less/theme/pagination.less +1 -1
- package/src/less/theme/position.less +1 -1
- package/src/less/theme/search.less +1 -1
- package/src/less/theme/spinner.less +1 -1
- package/src/less/theme/sticky.less +1 -1
- package/src/less/theme/tab.less +2 -2
- package/src/less/theme/table.less +1 -1
- package/src/less/theme/thumbnav.less +1 -1
- package/src/less/theme/tile.less +1 -1
- package/src/less/theme/tooltip.less +1 -1
- package/src/less/theme/totop.less +1 -1
- package/src/less/theme/transition.less +1 -1
- package/src/less/theme/utility.less +1 -1
- package/src/less/theme/variables.less +1 -1
- package/src/less/theme/width.less +1 -1
- package/src/less/uikit.less +1 -1
- package/src/scss/components/align.scss +2 -2
- package/src/scss/components/animation.scss +2 -2
- package/src/scss/components/base.scss +2 -2
- package/src/scss/components/card.scss +12 -6
- package/src/scss/components/column.scss +3 -3
- package/src/scss/components/container.scss +3 -3
- package/src/scss/components/divider.scss +2 -2
- package/src/scss/components/dropnav.scss +1 -1
- package/src/scss/components/form.scss +1 -1
- package/src/scss/components/grid.scss +3 -3
- package/src/scss/components/height.scss +1 -1
- package/src/scss/components/icon.scss +3 -3
- package/src/scss/components/inverse.scss +12 -0
- package/src/scss/components/modal.scss +3 -3
- package/src/scss/components/nav.scss +63 -0
- package/src/scss/components/navbar.scss +5 -8
- package/src/scss/components/overlay.scss +4 -0
- package/src/scss/components/position.scss +7 -7
- package/src/scss/components/section.scss +6 -5
- package/src/scss/components/sticky.scss +1 -1
- package/src/scss/components/svg.scss +3 -3
- package/src/scss/components/tile.scss +8 -0
- package/src/scss/components/transition.scss +9 -9
- package/src/scss/components/utility.scss +4 -4
- package/src/scss/components/width.scss +7 -7
- package/src/scss/mixins-theme.scss +10 -7
- package/src/scss/mixins.scss +7 -4
- package/src/scss/theme/alert.scss +1 -0
- package/src/scss/theme/align.scss +1 -1
- package/src/scss/theme/animation.scss +1 -1
- package/src/scss/theme/article.scss +1 -1
- package/src/scss/theme/background.scss +1 -1
- package/src/scss/theme/badge.scss +1 -1
- package/src/scss/theme/base.scss +1 -1
- package/src/scss/theme/breadcrumb.scss +1 -1
- package/src/scss/theme/button.scss +1 -1
- package/src/scss/theme/card.scss +1 -0
- package/src/scss/theme/close.scss +1 -1
- package/src/scss/theme/column.scss +1 -1
- package/src/scss/theme/comment.scss +1 -1
- package/src/scss/theme/container.scss +1 -1
- package/src/scss/theme/description-list.scss +1 -1
- package/src/scss/theme/divider.scss +1 -1
- package/src/scss/theme/dotnav.scss +1 -0
- package/src/scss/theme/drop.scss +1 -1
- package/src/scss/theme/dropbar.scss +1 -1
- package/src/scss/theme/dropdown.scss +1 -1
- package/src/scss/theme/form-range.scss +1 -1
- package/src/scss/theme/height.scss +1 -1
- package/src/scss/theme/icon.scss +1 -1
- package/src/scss/theme/iconnav.scss +1 -1
- package/src/scss/theme/inverse.scss +1 -1
- package/src/scss/theme/label.scss +1 -1
- package/src/scss/theme/leader.scss +1 -1
- package/src/scss/theme/lightbox.scss +1 -1
- package/src/scss/theme/margin.scss +1 -1
- package/src/scss/theme/modal.scss +1 -0
- package/src/scss/theme/nav.scss +1 -1
- package/src/scss/theme/navbar.scss +1 -1
- package/src/scss/theme/notification.scss +1 -1
- package/src/scss/theme/offcanvas.scss +1 -1
- package/src/scss/theme/overlay.scss +1 -1
- package/src/scss/theme/padding.scss +1 -1
- package/src/scss/theme/pagination.scss +1 -1
- package/src/scss/theme/position.scss +1 -1
- package/src/scss/theme/search.scss +1 -1
- package/src/scss/theme/spinner.scss +1 -1
- package/src/scss/theme/sticky.scss +1 -1
- package/src/scss/theme/tab.scss +1 -1
- package/src/scss/theme/table.scss +1 -0
- package/src/scss/theme/thumbnav.scss +1 -1
- package/src/scss/theme/tile.scss +1 -1
- package/src/scss/theme/tooltip.scss +1 -1
- package/src/scss/theme/totop.scss +1 -1
- package/src/scss/theme/transition.scss +1 -1
- package/src/scss/theme/utility.scss +1 -1
- package/src/scss/theme/variables.scss +1 -1
- package/src/scss/theme/width.scss +1 -1
- package/src/scss/uikit.scss +1 -1
- package/src/scss/variables-theme.scss +20 -5
- package/src/scss/variables.scss +20 -5
- package/tests/height.html +58 -1
- package/tests/icon.html +38 -10
- package/tests/nav.html +42 -0
- package/tests/navbar.html +1 -1
- package/tests/offcanvas.html +8 -8
- package/tests/search.html +300 -202
- package/tests/slider.html +58 -0
- package/tests/slideshow.html +66 -0
- package/tests/sticky-navbar.html +381 -23
- package/src/images/icons/pagekit.svg +0 -3
package/src/js/core/sticky.js
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
height as getHeight,
|
|
10
10
|
offset as getOffset,
|
|
11
11
|
hasClass,
|
|
12
|
+
index,
|
|
12
13
|
intersectRect,
|
|
13
14
|
isNumeric,
|
|
14
15
|
isString,
|
|
@@ -70,7 +71,7 @@ export default {
|
|
|
70
71
|
},
|
|
71
72
|
|
|
72
73
|
computed: {
|
|
73
|
-
|
|
74
|
+
target: ({ selTarget }, $el) => (selTarget && $(selTarget, $el)) || $el,
|
|
74
75
|
},
|
|
75
76
|
|
|
76
77
|
connected() {
|
|
@@ -87,7 +88,7 @@ export default {
|
|
|
87
88
|
beforeDisconnect() {
|
|
88
89
|
if (this.isFixed) {
|
|
89
90
|
this.hide();
|
|
90
|
-
removeClass(this.
|
|
91
|
+
removeClass(this.target, this.clsInactive);
|
|
91
92
|
}
|
|
92
93
|
reset(this.$el);
|
|
93
94
|
|
|
@@ -96,9 +97,19 @@ export default {
|
|
|
96
97
|
},
|
|
97
98
|
|
|
98
99
|
observe: [
|
|
99
|
-
viewport(
|
|
100
|
+
viewport({
|
|
101
|
+
handler() {
|
|
102
|
+
if (toPx('100vh', 'height') !== this._data.viewport) {
|
|
103
|
+
this.$emit('resize');
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
}),
|
|
100
107
|
scroll({ target: () => document.scrollingElement }),
|
|
101
|
-
resize({
|
|
108
|
+
resize({
|
|
109
|
+
target: () => document.scrollingElement,
|
|
110
|
+
options: { box: 'content-box' },
|
|
111
|
+
}),
|
|
112
|
+
resize({ target: ({ $el }) => $el }),
|
|
102
113
|
],
|
|
103
114
|
|
|
104
115
|
events: [
|
|
@@ -158,7 +169,7 @@ export default {
|
|
|
158
169
|
|
|
159
170
|
const hide = this.isFixed && !this.transitionInProgress;
|
|
160
171
|
if (hide) {
|
|
161
|
-
preventTransition(this
|
|
172
|
+
preventTransition(this.target);
|
|
162
173
|
this.hide();
|
|
163
174
|
}
|
|
164
175
|
|
|
@@ -215,7 +226,7 @@ export default {
|
|
|
215
226
|
end ===
|
|
216
227
|
Math.min(
|
|
217
228
|
maxScrollHeight,
|
|
218
|
-
parseProp(
|
|
229
|
+
parseProp(true, this.$el, 0, true) - elHeight - offset + overflow,
|
|
219
230
|
) &&
|
|
220
231
|
css(parent(this.$el), 'overflowY') === 'visible';
|
|
221
232
|
|
|
@@ -224,13 +235,13 @@ export default {
|
|
|
224
235
|
end,
|
|
225
236
|
offset,
|
|
226
237
|
overflow,
|
|
227
|
-
topOffset,
|
|
228
238
|
height,
|
|
229
239
|
elHeight,
|
|
230
240
|
width,
|
|
231
241
|
margin,
|
|
232
242
|
top: offsetPosition(referenceElement)[0],
|
|
233
243
|
sticky,
|
|
244
|
+
viewport,
|
|
234
245
|
};
|
|
235
246
|
},
|
|
236
247
|
|
|
@@ -252,10 +263,13 @@ export default {
|
|
|
252
263
|
|
|
253
264
|
css(placeholder, { height, width, margin });
|
|
254
265
|
|
|
255
|
-
if (
|
|
266
|
+
if (
|
|
267
|
+
parent(placeholder) !== parent(this.$el) ||
|
|
268
|
+
sticky ^ (index(placeholder) < index(this.$el))
|
|
269
|
+
) {
|
|
270
|
+
(sticky ? before : after)(this.$el, placeholder);
|
|
256
271
|
placeholder.hidden = true;
|
|
257
272
|
}
|
|
258
|
-
(sticky ? before : after)(this.$el, placeholder);
|
|
259
273
|
},
|
|
260
274
|
|
|
261
275
|
events: ['resize'],
|
|
@@ -269,18 +283,24 @@ export default {
|
|
|
269
283
|
overflowScroll = 0,
|
|
270
284
|
start,
|
|
271
285
|
end,
|
|
286
|
+
elHeight,
|
|
287
|
+
height,
|
|
288
|
+
sticky,
|
|
272
289
|
}) {
|
|
273
290
|
const scroll = document.scrollingElement.scrollTop;
|
|
274
291
|
const dir = prevScroll <= scroll ? 'down' : 'up';
|
|
292
|
+
const referenceElement = this.isFixed ? this.placeholder : this.$el;
|
|
275
293
|
|
|
276
294
|
return {
|
|
277
295
|
dir,
|
|
278
296
|
prevDir,
|
|
279
297
|
scroll,
|
|
280
298
|
prevScroll,
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
299
|
+
below:
|
|
300
|
+
scroll >
|
|
301
|
+
getOffset(referenceElement).top +
|
|
302
|
+
(sticky ? Math.min(height, elHeight) : height),
|
|
303
|
+
offsetParentTop: getOffset(referenceElement.offsetParent).top,
|
|
284
304
|
overflowScroll: clamp(
|
|
285
305
|
overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
|
|
286
306
|
0,
|
|
@@ -299,8 +319,7 @@ export default {
|
|
|
299
319
|
prevScroll = 0,
|
|
300
320
|
top,
|
|
301
321
|
start,
|
|
302
|
-
|
|
303
|
-
height,
|
|
322
|
+
below,
|
|
304
323
|
} = data;
|
|
305
324
|
|
|
306
325
|
if (
|
|
@@ -332,7 +351,7 @@ export default {
|
|
|
332
351
|
(this.showOnUp &&
|
|
333
352
|
(scroll <= start ||
|
|
334
353
|
(dir === 'down' && isScrollUpdate) ||
|
|
335
|
-
(dir === 'up' && !this.isFixed &&
|
|
354
|
+
(dir === 'up' && !this.isFixed && !below)))
|
|
336
355
|
) {
|
|
337
356
|
if (!this.isFixed) {
|
|
338
357
|
if (Animation.inProgress(this.$el) && top > scroll) {
|
|
@@ -343,7 +362,7 @@ export default {
|
|
|
343
362
|
return;
|
|
344
363
|
}
|
|
345
364
|
|
|
346
|
-
if (this.animation &&
|
|
365
|
+
if (this.animation && below) {
|
|
347
366
|
if (hasClass(this.$el, 'uk-animation-leave')) {
|
|
348
367
|
return;
|
|
349
368
|
}
|
|
@@ -353,11 +372,11 @@ export default {
|
|
|
353
372
|
}
|
|
354
373
|
} else if (this.isFixed) {
|
|
355
374
|
this.update();
|
|
356
|
-
} else if (this.animation &&
|
|
375
|
+
} else if (this.animation && below) {
|
|
357
376
|
this.show();
|
|
358
377
|
Animation.in(this.$el, this.animation).catch(noop);
|
|
359
378
|
} else {
|
|
360
|
-
preventTransition(this.
|
|
379
|
+
preventTransition(this.target);
|
|
361
380
|
this.show();
|
|
362
381
|
}
|
|
363
382
|
},
|
|
@@ -400,11 +419,9 @@ export default {
|
|
|
400
419
|
start,
|
|
401
420
|
end,
|
|
402
421
|
offset,
|
|
403
|
-
topOffset,
|
|
404
|
-
height,
|
|
405
|
-
elHeight,
|
|
406
422
|
offsetParentTop,
|
|
407
423
|
sticky,
|
|
424
|
+
below,
|
|
408
425
|
} = this._data;
|
|
409
426
|
const active = start !== 0 || scroll > start;
|
|
410
427
|
|
|
@@ -422,11 +439,7 @@ export default {
|
|
|
422
439
|
css(this.$el, 'top', offset - overflowScroll);
|
|
423
440
|
|
|
424
441
|
this.setActive(active);
|
|
425
|
-
toggleClass(
|
|
426
|
-
this.$el,
|
|
427
|
-
this.clsBelow,
|
|
428
|
-
scroll > topOffset + (sticky ? Math.min(height, elHeight) : height),
|
|
429
|
-
);
|
|
442
|
+
toggleClass(this.$el, this.clsBelow, below);
|
|
430
443
|
addClass(this.$el, this.clsFixed);
|
|
431
444
|
},
|
|
432
445
|
|
|
@@ -434,11 +447,14 @@ export default {
|
|
|
434
447
|
const prev = this.active;
|
|
435
448
|
this.active = active;
|
|
436
449
|
if (active) {
|
|
437
|
-
replaceClass(this.
|
|
450
|
+
replaceClass(this.target, this.clsInactive, this.clsActive);
|
|
438
451
|
prev !== active && trigger(this.$el, 'active');
|
|
439
452
|
} else {
|
|
440
|
-
replaceClass(this.
|
|
441
|
-
prev !== active
|
|
453
|
+
replaceClass(this.target, this.clsActive, this.clsInactive);
|
|
454
|
+
if (prev !== active) {
|
|
455
|
+
preventTransition(this.target);
|
|
456
|
+
trigger(this.$el, 'inactive');
|
|
457
|
+
}
|
|
442
458
|
}
|
|
443
459
|
},
|
|
444
460
|
},
|
package/src/js/mixin/modal.js
CHANGED
|
@@ -19,9 +19,9 @@ import {
|
|
|
19
19
|
removeClass,
|
|
20
20
|
toFloat,
|
|
21
21
|
} from 'uikit-util';
|
|
22
|
+
import { preventBackgroundScroll } from '../util/scroll';
|
|
22
23
|
import Class from './class';
|
|
23
24
|
import Container from './container';
|
|
24
|
-
import { preventBackgroundScroll } from './internal/scroll';
|
|
25
25
|
import Togglable from './togglable';
|
|
26
26
|
|
|
27
27
|
const active = [];
|
package/src/js/mixin/parallax.js
CHANGED
|
@@ -384,3 +384,22 @@ function fillObject(keys, value) {
|
|
|
384
384
|
return data;
|
|
385
385
|
}, {});
|
|
386
386
|
}
|
|
387
|
+
|
|
388
|
+
/*
|
|
389
|
+
* Inspired by https://gist.github.com/gre/1650294?permalink_comment_id=3477425#gistcomment-3477425
|
|
390
|
+
*
|
|
391
|
+
* linear: 0
|
|
392
|
+
* easeInSine: 0.5
|
|
393
|
+
* easeOutSine: -0.5
|
|
394
|
+
* easeInQuad: 1
|
|
395
|
+
* easeOutQuad: -1
|
|
396
|
+
* easeInCubic: 2
|
|
397
|
+
* easeOutCubic: -2
|
|
398
|
+
* easeInQuart: 3
|
|
399
|
+
* easeOutQuart: -3
|
|
400
|
+
* easeInQuint: 4
|
|
401
|
+
* easeOutQuint: -4
|
|
402
|
+
*/
|
|
403
|
+
export function ease(percent, easing) {
|
|
404
|
+
return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
|
|
405
|
+
}
|
|
@@ -17,7 +17,7 @@ const pointerUpOptions = { passive: true, capture: true };
|
|
|
17
17
|
const pointerDown = 'touchstart mousedown';
|
|
18
18
|
const pointerMove = 'touchmove mousemove';
|
|
19
19
|
const pointerUp = 'touchend touchcancel mouseup click input scroll';
|
|
20
|
-
|
|
20
|
+
const preventClick = (e) => e.preventDefault();
|
|
21
21
|
export default {
|
|
22
22
|
props: {
|
|
23
23
|
draggable: Boolean,
|
|
@@ -55,6 +55,7 @@ export default {
|
|
|
55
55
|
handler(e) {
|
|
56
56
|
if (
|
|
57
57
|
!this.draggable ||
|
|
58
|
+
this.parallax ||
|
|
58
59
|
(!isTouch(e) && hasSelectableText(e.target)) ||
|
|
59
60
|
e.target.closest(selInput) ||
|
|
60
61
|
e.button > 0 ||
|
|
@@ -123,8 +124,9 @@ export default {
|
|
|
123
124
|
return;
|
|
124
125
|
}
|
|
125
126
|
|
|
126
|
-
|
|
127
|
-
|
|
127
|
+
if (!this.dragging) {
|
|
128
|
+
on(this.list, 'click', preventClick, pointerOptions);
|
|
129
|
+
}
|
|
128
130
|
|
|
129
131
|
e.cancelable && e.preventDefault();
|
|
130
132
|
|
|
@@ -134,7 +136,7 @@ export default {
|
|
|
134
136
|
let { slides, prevIndex } = this;
|
|
135
137
|
let dis = Math.abs(distance);
|
|
136
138
|
let nextIndex = this.getIndex(prevIndex + this.dir);
|
|
137
|
-
let width =
|
|
139
|
+
let width = getDistance.call(this, prevIndex, nextIndex);
|
|
138
140
|
|
|
139
141
|
while (nextIndex !== prevIndex && dis > width) {
|
|
140
142
|
this.drag -= width * this.dir;
|
|
@@ -142,7 +144,7 @@ export default {
|
|
|
142
144
|
prevIndex = nextIndex;
|
|
143
145
|
dis -= width;
|
|
144
146
|
nextIndex = this.getIndex(prevIndex + this.dir);
|
|
145
|
-
width =
|
|
147
|
+
width = getDistance.call(this, prevIndex, nextIndex);
|
|
146
148
|
}
|
|
147
149
|
|
|
148
150
|
this.percent = dis / width;
|
|
@@ -173,16 +175,16 @@ export default {
|
|
|
173
175
|
this.prevIndex = prevIndex;
|
|
174
176
|
this.index = nextIndex;
|
|
175
177
|
|
|
176
|
-
!edge
|
|
178
|
+
if (!edge) {
|
|
179
|
+
trigger(prev, 'beforeitemhide', [this]);
|
|
180
|
+
trigger(prev, 'itemhide', [this]);
|
|
181
|
+
}
|
|
182
|
+
|
|
177
183
|
trigger(next, 'beforeitemshow', [this]);
|
|
184
|
+
trigger(next, 'itemshow', [this]);
|
|
178
185
|
}
|
|
179
186
|
|
|
180
187
|
this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
|
|
181
|
-
|
|
182
|
-
if (changed) {
|
|
183
|
-
!edge && trigger(prev, 'itemhide', [this]);
|
|
184
|
-
trigger(next, 'itemshow', [this]);
|
|
185
|
-
}
|
|
186
188
|
},
|
|
187
189
|
|
|
188
190
|
end() {
|
|
@@ -216,20 +218,21 @@ export default {
|
|
|
216
218
|
}
|
|
217
219
|
}
|
|
218
220
|
|
|
219
|
-
|
|
221
|
+
setTimeout(() => off(this.list, 'click', preventClick, pointerOptions));
|
|
222
|
+
css(this.list, { userSelect: '' });
|
|
220
223
|
|
|
221
224
|
this.drag = this.percent = null;
|
|
222
225
|
},
|
|
223
|
-
|
|
224
|
-
_getDistance(prev, next) {
|
|
225
|
-
return (
|
|
226
|
-
this._getTransitioner(prev, prev !== next && next).getDistance() ||
|
|
227
|
-
this.slides[prev].offsetWidth
|
|
228
|
-
);
|
|
229
|
-
},
|
|
230
226
|
},
|
|
231
227
|
};
|
|
232
228
|
|
|
229
|
+
function getDistance(prev, next) {
|
|
230
|
+
return (
|
|
231
|
+
this._getTransitioner(prev, prev !== next && next).getDistance() ||
|
|
232
|
+
this.slides[prev].offsetWidth
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
233
236
|
function hasSelectableText(el) {
|
|
234
237
|
return (
|
|
235
238
|
css(el, 'userSelect') !== 'none' &&
|
|
@@ -148,6 +148,10 @@ export default {
|
|
|
148
148
|
return this.selNavItem;
|
|
149
149
|
},
|
|
150
150
|
|
|
151
|
+
filter() {
|
|
152
|
+
return !this.parallax;
|
|
153
|
+
},
|
|
154
|
+
|
|
151
155
|
handler(e) {
|
|
152
156
|
if (
|
|
153
157
|
e.target.closest('a,button') &&
|
|
@@ -171,6 +175,10 @@ export default {
|
|
|
171
175
|
return this.selNavItem;
|
|
172
176
|
},
|
|
173
177
|
|
|
178
|
+
filter() {
|
|
179
|
+
return !this.parallax;
|
|
180
|
+
},
|
|
181
|
+
|
|
174
182
|
handler(e) {
|
|
175
183
|
const { current, keyCode } = e;
|
|
176
184
|
const cmd = data(current, this.attrItem);
|
|
@@ -211,10 +219,11 @@ export default {
|
|
|
211
219
|
const active = item === index;
|
|
212
220
|
|
|
213
221
|
toggleClass(el, this.clsActive, active);
|
|
222
|
+
toggleClass(button, 'uk-disabled', this.parallax);
|
|
214
223
|
|
|
215
224
|
attr(button, {
|
|
216
225
|
'aria-selected': active,
|
|
217
|
-
tabindex: active ? null : -1,
|
|
226
|
+
tabindex: active && !this.parallax ? null : -1,
|
|
218
227
|
});
|
|
219
228
|
|
|
220
229
|
if (active && button && matches(parent(el), ':focus-within')) {
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { hasClass, includes, query, scrolledOver, toPx, trigger } from 'uikit-util';
|
|
2
|
+
import { resize, scroll } from '../api/observables';
|
|
3
|
+
import { ease } from './parallax';
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
props: {
|
|
7
|
+
parallax: Boolean,
|
|
8
|
+
parallaxTarget: Boolean,
|
|
9
|
+
parallaxStart: String,
|
|
10
|
+
parallaxEnd: String,
|
|
11
|
+
parallaxEasing: Number,
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
data: {
|
|
15
|
+
parallax: false,
|
|
16
|
+
parallaxTarget: false,
|
|
17
|
+
parallaxStart: 0,
|
|
18
|
+
parallaxEnd: 0,
|
|
19
|
+
parallaxEasing: 0,
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
observe: [
|
|
23
|
+
resize({
|
|
24
|
+
target: ({ $el, parallaxTarget }) => [$el, parallaxTarget],
|
|
25
|
+
filter: ({ parallax }) => parallax,
|
|
26
|
+
}),
|
|
27
|
+
scroll({ filter: ({ parallax }) => parallax }),
|
|
28
|
+
],
|
|
29
|
+
|
|
30
|
+
computed: {
|
|
31
|
+
parallaxTarget({ parallaxTarget }, $el) {
|
|
32
|
+
return (parallaxTarget && query(parallaxTarget, $el)) || this.list;
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
update: {
|
|
37
|
+
write() {
|
|
38
|
+
if (!this.parallax) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const target = this.parallaxTarget;
|
|
43
|
+
const start = toPx(this.parallaxStart, 'height', target, true);
|
|
44
|
+
const end = toPx(this.parallaxEnd, 'height', target, true);
|
|
45
|
+
const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
|
|
46
|
+
|
|
47
|
+
const [prevIndex, slidePercent] = this.getIndexAt(percent);
|
|
48
|
+
|
|
49
|
+
const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
|
|
50
|
+
|
|
51
|
+
const prev = this.slides[prevIndex];
|
|
52
|
+
const next = this.slides[nextIndex];
|
|
53
|
+
|
|
54
|
+
const { triggerShow, triggerShown, triggerHide, triggerHidden } = useTriggers(this);
|
|
55
|
+
|
|
56
|
+
if (~this.prevIndex) {
|
|
57
|
+
for (const i of new Set([this.index, this.prevIndex])) {
|
|
58
|
+
if (!includes([nextIndex, prevIndex], i)) {
|
|
59
|
+
triggerHide(this.slides[i]);
|
|
60
|
+
triggerHidden(this.slides[i]);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const changed = this.prevIndex !== prevIndex || this.index !== nextIndex;
|
|
66
|
+
|
|
67
|
+
this.dir = 1;
|
|
68
|
+
this.prevIndex = prevIndex;
|
|
69
|
+
this.index = nextIndex;
|
|
70
|
+
|
|
71
|
+
if (prev !== next) {
|
|
72
|
+
triggerHide(prev);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
triggerShow(next);
|
|
76
|
+
|
|
77
|
+
if (changed) {
|
|
78
|
+
triggerShown(prev);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
this._translate(prev === next ? 1 : slidePercent, prev, next);
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
events: ['scroll', 'resize'],
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
methods: {
|
|
88
|
+
getIndexAt(percent) {
|
|
89
|
+
const index = percent * (this.length - 1);
|
|
90
|
+
return [Math.floor(index), index % 1];
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
function useTriggers(cmp) {
|
|
96
|
+
const { clsSlideActive, clsEnter, clsLeave } = cmp;
|
|
97
|
+
|
|
98
|
+
return { triggerShow, triggerShown, triggerHide, triggerHidden };
|
|
99
|
+
|
|
100
|
+
function triggerShow(el) {
|
|
101
|
+
if (hasClass(el, clsLeave)) {
|
|
102
|
+
triggerHide(el);
|
|
103
|
+
triggerHidden(el);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!hasClass(el, clsSlideActive)) {
|
|
107
|
+
trigger(el, 'beforeitemshow', [cmp]);
|
|
108
|
+
trigger(el, 'itemshow', [cmp]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function triggerShown(el) {
|
|
113
|
+
if (hasClass(el, clsEnter)) {
|
|
114
|
+
trigger(el, 'itemshown', [cmp]);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function triggerHide(el) {
|
|
119
|
+
if (!hasClass(el, clsSlideActive)) {
|
|
120
|
+
triggerShow(el);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (hasClass(el, clsEnter)) {
|
|
124
|
+
triggerShown(el);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (!hasClass(el, clsLeave)) {
|
|
128
|
+
trigger(el, 'beforeitemhide', [cmp]);
|
|
129
|
+
trigger(el, 'itemhide', [cmp]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function triggerHidden(el) {
|
|
134
|
+
if (hasClass(el, clsLeave)) {
|
|
135
|
+
trigger(el, 'itemhidden', [cmp]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
package/src/js/mixin/slider.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
$,
|
|
3
|
+
addClass,
|
|
3
4
|
children,
|
|
4
5
|
clamp,
|
|
5
6
|
getIndex,
|
|
@@ -19,7 +20,7 @@ export default {
|
|
|
19
20
|
mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n],
|
|
20
21
|
|
|
21
22
|
props: {
|
|
22
|
-
clsActivated:
|
|
23
|
+
clsActivated: String,
|
|
23
24
|
easing: String,
|
|
24
25
|
index: Number,
|
|
25
26
|
finite: Boolean,
|
|
@@ -35,7 +36,10 @@ export default {
|
|
|
35
36
|
stack: [],
|
|
36
37
|
percent: 0,
|
|
37
38
|
clsActive: 'uk-active',
|
|
38
|
-
clsActivated:
|
|
39
|
+
clsActivated: '',
|
|
40
|
+
clsEnter: 'uk-slide-enter',
|
|
41
|
+
clsLeave: 'uk-slide-leave',
|
|
42
|
+
clsSlideActive: 'uk-slide-active',
|
|
39
43
|
Transitioner: false,
|
|
40
44
|
transitionOptions: {},
|
|
41
45
|
}),
|
|
@@ -78,9 +82,27 @@ export default {
|
|
|
78
82
|
|
|
79
83
|
observe: resize(),
|
|
80
84
|
|
|
85
|
+
events: {
|
|
86
|
+
itemshow({ target }) {
|
|
87
|
+
addClass(target, this.clsEnter, this.clsSlideActive);
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
itemshown({ target }) {
|
|
91
|
+
removeClass(target, this.clsEnter);
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
itemhide({ target }) {
|
|
95
|
+
addClass(target, this.clsLeave);
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
itemhidden({ target }) {
|
|
99
|
+
removeClass(target, this.clsLeave, this.clsSlideActive);
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
|
|
81
103
|
methods: {
|
|
82
104
|
show(index, force = false) {
|
|
83
|
-
if (this.dragging || !this.length) {
|
|
105
|
+
if (this.dragging || !this.length || this.parallax) {
|
|
84
106
|
return;
|
|
85
107
|
}
|
|
86
108
|
|
package/src/js/util/animation.js
CHANGED
|
@@ -5,8 +5,8 @@ import { startsWith, toNodes } from './lang';
|
|
|
5
5
|
import { css, propName } from './style';
|
|
6
6
|
|
|
7
7
|
const clsTransition = 'uk-transition';
|
|
8
|
-
const
|
|
9
|
-
const
|
|
8
|
+
const transitionEnd = 'transitionend';
|
|
9
|
+
const transitionCanceled = 'transitioncanceled';
|
|
10
10
|
|
|
11
11
|
function transition(element, props, duration = 400, timing = 'linear') {
|
|
12
12
|
duration = Math.round(duration);
|
|
@@ -21,11 +21,11 @@ function transition(element, props, duration = 400, timing = 'linear') {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
const timer = setTimeout(() => trigger(element,
|
|
24
|
+
const timer = setTimeout(() => trigger(element, transitionEnd), duration);
|
|
25
25
|
|
|
26
26
|
once(
|
|
27
27
|
element,
|
|
28
|
-
[
|
|
28
|
+
[transitionEnd, transitionCanceled],
|
|
29
29
|
({ type }) => {
|
|
30
30
|
clearTimeout(timer);
|
|
31
31
|
removeClass(element, clsTransition);
|
|
@@ -34,7 +34,7 @@ function transition(element, props, duration = 400, timing = 'linear') {
|
|
|
34
34
|
transitionDuration: '',
|
|
35
35
|
transitionTimingFunction: '',
|
|
36
36
|
});
|
|
37
|
-
type ===
|
|
37
|
+
type === transitionCanceled ? reject() : resolve(element);
|
|
38
38
|
},
|
|
39
39
|
{ self: true },
|
|
40
40
|
);
|
|
@@ -55,12 +55,12 @@ export const Transition = {
|
|
|
55
55
|
start: transition,
|
|
56
56
|
|
|
57
57
|
async stop(element) {
|
|
58
|
-
trigger(element,
|
|
58
|
+
trigger(element, transitionEnd);
|
|
59
59
|
await Promise.resolve();
|
|
60
60
|
},
|
|
61
61
|
|
|
62
62
|
async cancel(element) {
|
|
63
|
-
trigger(element,
|
|
63
|
+
trigger(element, transitionCanceled);
|
|
64
64
|
await Promise.resolve();
|
|
65
65
|
},
|
|
66
66
|
|
|
@@ -70,24 +70,24 @@ export const Transition = {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
const animationPrefix = 'uk-animation-';
|
|
73
|
-
const
|
|
74
|
-
const
|
|
73
|
+
const animationEnd = 'animationend';
|
|
74
|
+
const animationCanceled = 'animationcanceled';
|
|
75
75
|
|
|
76
76
|
function animate(element, animation, duration = 200, origin, out) {
|
|
77
77
|
return Promise.all(
|
|
78
78
|
toNodes(element).map(
|
|
79
79
|
(element) =>
|
|
80
80
|
new Promise((resolve, reject) => {
|
|
81
|
-
trigger(element,
|
|
82
|
-
const timer = setTimeout(() => trigger(element,
|
|
81
|
+
trigger(element, animationCanceled);
|
|
82
|
+
const timer = setTimeout(() => trigger(element, animationEnd), duration);
|
|
83
83
|
|
|
84
84
|
once(
|
|
85
85
|
element,
|
|
86
|
-
[
|
|
86
|
+
[animationEnd, animationCanceled],
|
|
87
87
|
({ type }) => {
|
|
88
88
|
clearTimeout(timer);
|
|
89
89
|
|
|
90
|
-
type ===
|
|
90
|
+
type === animationCanceled ? reject() : resolve(element);
|
|
91
91
|
|
|
92
92
|
css(element, 'animationDuration', '');
|
|
93
93
|
removeClasses(element, `${animationPrefix}\\S*`);
|
|
@@ -121,6 +121,6 @@ export const Animation = {
|
|
|
121
121
|
},
|
|
122
122
|
|
|
123
123
|
cancel(element) {
|
|
124
|
-
trigger(element,
|
|
124
|
+
trigger(element, animationCanceled);
|
|
125
125
|
},
|
|
126
126
|
};
|
package/src/js/util/dom.js
CHANGED
|
@@ -46,8 +46,8 @@ export function remove(element) {
|
|
|
46
46
|
export function wrapAll(element, structure) {
|
|
47
47
|
structure = toNode(before(element, structure));
|
|
48
48
|
|
|
49
|
-
while (structure.
|
|
50
|
-
structure = structure.
|
|
49
|
+
while (structure.firstElementChild) {
|
|
50
|
+
structure = structure.firstElementChild;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
append(structure, element);
|