uikit 3.11.1 → 3.11.2-dev.03e47c2ff
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 +59 -17
- 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 +127 -201
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +127 -201
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +129 -207
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +129 -207
- 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 +408 -439
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1098 -1316
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1144 -1393
- 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 +345 -362
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +343 -350
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +768 -843
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +343 -350
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +645 -793
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +587 -621
- 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 +5430 -6690
- 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 +8143 -9784
- 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 +15 -28
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +14 -33
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +79 -100
- package/src/js/components/countdown.js +24 -50
- package/src/js/components/filter.js +70 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +14 -25
- package/src/js/components/internal/slider-preload.js +37 -0
- package/src/js/components/internal/slider-transitioner.js +66 -45
- package/src/js/components/internal/slideshow-animations.js +46 -64
- package/src/js/components/lightbox-panel.js +107 -105
- package/src/js/components/lightbox.js +17 -39
- package/src/js/components/notification.js +49 -43
- package/src/js/components/parallax.js +21 -46
- package/src/js/components/slider-parallax.js +13 -23
- package/src/js/components/slider.js +95 -64
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +15 -13
- package/src/js/components/sortable.js +126 -108
- 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 +9 -17
- package/src/js/core/core.js +74 -53
- package/src/js/core/cover.js +11 -15
- package/src/js/core/drop.js +107 -93
- 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 +29 -36
- package/src/js/core/icon.js +47 -52
- package/src/js/core/img.js +156 -138
- 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 +49 -36
- package/src/js/core/nav.js +2 -4
- package/src/js/core/navbar.js +113 -85
- 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 +194 -123
- package/src/js/core/svg.js +68 -83
- package/src/js/core/switcher.js +47 -46
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +66 -67
- 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 +58 -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 +175 -121
- 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 +48 -55
- package/src/js/mixin/slideshow.js +13 -19
- package/src/js/mixin/togglable.js +89 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +25 -40
- package/src/js/util/animation.js +77 -75
- package/src/js/util/attr.js +17 -21
- package/src/js/util/class.js +14 -52
- package/src/js/util/dimensions.js +78 -49
- package/src/js/util/dom.js +39 -66
- package/src/js/util/env.js +7 -12
- package/src/js/util/event.js +60 -59
- package/src/js/util/fastdom.js +3 -8
- package/src/js/util/filter.js +17 -34
- package/src/js/util/index.js +0 -1
- package/src/js/util/lang.js +82 -121
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/options.js +35 -49
- package/src/js/util/player.js +41 -36
- package/src/js/util/position.js +54 -46
- package/src/js/util/selector.js +43 -58
- package/src/js/util/style.js +39 -49
- package/src/js/util/viewport.js +81 -66
- package/src/less/components/base.less +10 -33
- package/src/less/components/flex.less +0 -9
- package/src/less/components/form-range.less +48 -95
- package/src/less/components/form.less +0 -1
- package/src/less/components/height.less +3 -0
- package/src/less/components/leader.less +0 -1
- package/src/less/components/lightbox.less +0 -1
- package/src/less/components/modal.less +3 -7
- package/src/less/components/navbar.less +0 -7
- package/src/less/components/progress.less +14 -36
- package/src/less/components/slider.less +0 -3
- package/src/less/components/slideshow.less +0 -3
- package/src/less/components/text.less +16 -32
- package/src/less/components/utility.less +22 -0
- package/src/scss/components/base.scss +10 -33
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form-range.scss +48 -95
- package/src/scss/components/form.scss +3 -4
- package/src/scss/components/height.scss +3 -0
- package/src/scss/components/icon.scss +2 -2
- package/src/scss/components/leader.scss +0 -1
- package/src/scss/components/lightbox.scss +0 -1
- package/src/scss/components/modal.scss +3 -7
- package/src/scss/components/navbar.scss +0 -7
- package/src/scss/components/progress.scss +14 -36
- package/src/scss/components/search.scss +1 -1
- package/src/scss/components/slider.scss +0 -3
- package/src/scss/components/slideshow.scss +0 -3
- package/src/scss/components/text.scss +16 -32
- package/src/scss/components/utility.scss +22 -0
- package/src/scss/mixins-theme.scss +1 -1
- package/src/scss/mixins.scss +1 -1
- package/src/scss/variables-theme.scss +9 -9
- package/src/scss/variables.scss +9 -9
- package/tests/align.html +10 -10
- package/tests/animation.html +2 -2
- package/tests/article.html +2 -2
- package/tests/base.html +3 -3
- package/tests/card.html +10 -10
- package/tests/column.html +3 -3
- package/tests/comment.html +9 -9
- package/tests/dotnav.html +3 -3
- package/tests/image.html +296 -64
- package/tests/images/image-type.avif +0 -0
- package/tests/images/image-type.jpeg +0 -0
- package/tests/images/image-type.webp +0 -0
- package/tests/index.html +8 -8
- package/tests/js/index.js +114 -85
- package/tests/lightbox.html +10 -10
- package/tests/marker.html +2 -2
- package/tests/modal.html +8 -9
- package/tests/navbar.html +2 -2
- package/tests/overlay.html +7 -7
- package/tests/parallax.html +14 -5
- package/tests/position.html +12 -12
- package/tests/slidenav.html +12 -12
- package/tests/slider.html +20 -20
- package/tests/sortable.html +1 -1
- package/tests/sticky-parallax.html +86 -98
- package/tests/sticky.html +56 -24
- package/tests/svg.html +6 -6
- package/tests/table.html +11 -11
- package/tests/thumbnav.html +12 -12
- package/tests/transition.html +30 -30
- package/tests/utility.html +33 -33
- package/tests/video.html +1 -1
- package/tests/width.html +1 -1
- package/src/js/mixin/flex-bug.js +0 -56
- package/src/js/util/promise.js +0 -191
- package/tests/images/animated.gif +0 -0
package/src/js/util/selector.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {attr} from './attr';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {isDocument, isString, memoize, toNode, toNodes} from './lang';
|
|
1
|
+
import { attr } from './attr';
|
|
2
|
+
import { closest, index, matches, parent } from './filter';
|
|
3
|
+
import { isDocument, isString, memoize, toNode, toNodes } from './lang';
|
|
5
4
|
|
|
6
5
|
export function query(selector, context) {
|
|
7
6
|
return find(selector, getContext(selector, context));
|
|
@@ -11,12 +10,6 @@ export function queryAll(selector, context) {
|
|
|
11
10
|
return findAll(selector, getContext(selector, context));
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
function getContext(selector, context = document) {
|
|
15
|
-
return isString(selector) && isContextSelector(selector) || isDocument(context)
|
|
16
|
-
? context
|
|
17
|
-
: context.ownerDocument;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
13
|
export function find(selector, context) {
|
|
21
14
|
return toNode(_query(selector, context, 'querySelector'));
|
|
22
15
|
}
|
|
@@ -25,8 +18,18 @@ export function findAll(selector, context) {
|
|
|
25
18
|
return toNodes(_query(selector, context, 'querySelectorAll'));
|
|
26
19
|
}
|
|
27
20
|
|
|
28
|
-
|
|
21
|
+
const contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/;
|
|
22
|
+
const isContextSelector = memoize((selector) => selector.match(contextSelectorRe));
|
|
23
|
+
|
|
24
|
+
function getContext(selector, context = document) {
|
|
25
|
+
return (isString(selector) && isContextSelector(selector)) || isDocument(context)
|
|
26
|
+
? context
|
|
27
|
+
: context.ownerDocument;
|
|
28
|
+
}
|
|
29
29
|
|
|
30
|
+
const contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
|
|
31
|
+
|
|
32
|
+
function _query(selector, context = document, queryFn) {
|
|
30
33
|
if (!selector || !isString(selector)) {
|
|
31
34
|
return selector;
|
|
32
35
|
}
|
|
@@ -34,63 +37,46 @@ function _query(selector, context = document, queryFn) {
|
|
|
34
37
|
selector = selector.replace(contextSanitizeRe, '$1 *');
|
|
35
38
|
|
|
36
39
|
if (isContextSelector(selector)) {
|
|
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
|
-
return `${domPath(ctx)} ${selector}`;
|
|
64
|
-
|
|
65
|
-
}).filter(Boolean).join(',');
|
|
40
|
+
selector = splitSelector(selector)
|
|
41
|
+
.map((selector) => {
|
|
42
|
+
let ctx = context;
|
|
43
|
+
|
|
44
|
+
if (selector[0] === '!') {
|
|
45
|
+
const selectors = selector.substr(1).trim().split(' ');
|
|
46
|
+
ctx = closest(parent(context), selectors[0]);
|
|
47
|
+
selector = selectors.slice(1).join(' ').trim();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (selector[0] === '-') {
|
|
51
|
+
const selectors = selector.substr(1).trim().split(' ');
|
|
52
|
+
const prev = (ctx || context).previousElementSibling;
|
|
53
|
+
ctx = matches(prev, selector.substr(1)) ? prev : null;
|
|
54
|
+
selector = selectors.slice(1).join(' ');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (!ctx) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return `${domPath(ctx)} ${selector}`;
|
|
62
|
+
})
|
|
63
|
+
.filter(Boolean)
|
|
64
|
+
.join(',');
|
|
66
65
|
|
|
67
66
|
context = document;
|
|
68
|
-
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
try {
|
|
72
|
-
|
|
73
70
|
return context[queryFn](selector);
|
|
74
|
-
|
|
75
71
|
} catch (e) {
|
|
76
|
-
|
|
77
72
|
return null;
|
|
78
|
-
|
|
79
73
|
}
|
|
80
|
-
|
|
81
74
|
}
|
|
82
75
|
|
|
83
|
-
const contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/;
|
|
84
|
-
const contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
|
|
85
|
-
|
|
86
|
-
const isContextSelector = memoize(selector => selector.match(contextSelectorRe));
|
|
87
|
-
|
|
88
76
|
const selectorRe = /.*?[^\\](?:,|$)/g;
|
|
89
77
|
|
|
90
|
-
const splitSelector = memoize(selector =>
|
|
91
|
-
selector.match(selectorRe).map(selector =>
|
|
92
|
-
selector.replace(/,$/, '').trim()
|
|
93
|
-
)
|
|
78
|
+
const splitSelector = memoize((selector) =>
|
|
79
|
+
selector.match(selectorRe).map((selector) => selector.replace(/,$/, '').trim())
|
|
94
80
|
);
|
|
95
81
|
|
|
96
82
|
function domPath(element) {
|
|
@@ -101,7 +87,7 @@ function domPath(element) {
|
|
|
101
87
|
names.unshift(`#${escape(id)}`);
|
|
102
88
|
break;
|
|
103
89
|
} else {
|
|
104
|
-
let {tagName} = element;
|
|
90
|
+
let { tagName } = element;
|
|
105
91
|
if (tagName !== 'HTML') {
|
|
106
92
|
tagName += `:nth-child(${index(element) + 1})`;
|
|
107
93
|
}
|
|
@@ -112,7 +98,6 @@ function domPath(element) {
|
|
|
112
98
|
return names.join(' > ');
|
|
113
99
|
}
|
|
114
100
|
|
|
115
|
-
const escapeFn = inBrowser && window.CSS && CSS.escape || function (css) { return css.replace(/([^\x7f-\uFFFF\w-])/g, match => `\\${match}`); };
|
|
116
101
|
export function escape(css) {
|
|
117
|
-
return isString(css) ?
|
|
102
|
+
return isString(css) ? CSS.escape(css) : '';
|
|
118
103
|
}
|
package/src/js/util/style.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
each,
|
|
3
|
+
hyphenate,
|
|
4
|
+
isArray,
|
|
5
|
+
isNumber,
|
|
6
|
+
isNumeric,
|
|
7
|
+
isObject,
|
|
8
|
+
isString,
|
|
9
|
+
isUndefined,
|
|
10
|
+
memoize,
|
|
11
|
+
toNodes,
|
|
12
|
+
toWindow,
|
|
13
|
+
} from './lang';
|
|
5
14
|
|
|
6
15
|
const cssNumber = {
|
|
7
16
|
'animation-iteration-count': true,
|
|
@@ -11,22 +20,20 @@ const cssNumber = {
|
|
|
11
20
|
'flex-shrink': true,
|
|
12
21
|
'font-weight': true,
|
|
13
22
|
'line-height': true,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
opacity: true,
|
|
24
|
+
order: true,
|
|
25
|
+
orphans: true,
|
|
17
26
|
'stroke-dasharray': true,
|
|
18
27
|
'stroke-dashoffset': true,
|
|
19
|
-
|
|
28
|
+
widows: true,
|
|
20
29
|
'z-index': true,
|
|
21
|
-
|
|
30
|
+
zoom: true,
|
|
22
31
|
};
|
|
23
32
|
|
|
24
33
|
export function css(element, property, value, priority = '') {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
34
|
+
const elements = toNodes(element);
|
|
35
|
+
for (const element of elements) {
|
|
28
36
|
if (isString(property)) {
|
|
29
|
-
|
|
30
37
|
property = propName(property);
|
|
31
38
|
|
|
32
39
|
if (isUndefined(value)) {
|
|
@@ -34,27 +41,25 @@ export function css(element, property, value, priority = '') {
|
|
|
34
41
|
} else if (!value && !isNumber(value)) {
|
|
35
42
|
element.style.removeProperty(property);
|
|
36
43
|
} else {
|
|
37
|
-
element.style.setProperty(
|
|
44
|
+
element.style.setProperty(
|
|
45
|
+
property,
|
|
46
|
+
isNumeric(value) && !cssNumber[property] ? `${value}px` : value,
|
|
47
|
+
priority
|
|
48
|
+
);
|
|
38
49
|
}
|
|
39
|
-
|
|
40
50
|
} else if (isArray(property)) {
|
|
41
|
-
|
|
42
51
|
const styles = getStyles(element);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
props[
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
const props = {};
|
|
53
|
+
for (const prop of property) {
|
|
54
|
+
props[prop] = styles[propName(prop)];
|
|
55
|
+
}
|
|
56
|
+
return props;
|
|
49
57
|
} else if (isObject(property)) {
|
|
50
58
|
priority = value;
|
|
51
59
|
each(property, (value, property) => css(element, property, value, priority));
|
|
52
60
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
})[0];
|
|
57
|
-
|
|
61
|
+
}
|
|
62
|
+
return elements[0];
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
function getStyles(element, pseudoElt) {
|
|
@@ -65,44 +70,29 @@ function getStyle(element, property, pseudoElt) {
|
|
|
65
70
|
return getStyles(element, pseudoElt)[property];
|
|
66
71
|
}
|
|
67
72
|
|
|
68
|
-
const parseCssVar = memoize(name => {
|
|
69
|
-
/* usage in css: .uk-name:before { content:"xyz" } */
|
|
70
|
-
|
|
71
|
-
const element = append(document.documentElement, fragment('<div>'));
|
|
72
|
-
|
|
73
|
-
addClass(element, `uk-${name}`);
|
|
74
|
-
|
|
75
|
-
const value = getStyle(element, 'content', ':before');
|
|
76
|
-
|
|
77
|
-
remove(element);
|
|
78
|
-
|
|
79
|
-
return value;
|
|
80
|
-
});
|
|
81
|
-
|
|
82
73
|
const propertyRe = /^\s*(["'])?(.*?)\1\s*$/;
|
|
83
74
|
export function getCssVar(name) {
|
|
84
|
-
return (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
).replace(propertyRe, '$2');
|
|
75
|
+
return getStyles(document.documentElement)
|
|
76
|
+
.getPropertyValue(`--uk-${name}`)
|
|
77
|
+
.replace(propertyRe, '$2');
|
|
88
78
|
}
|
|
89
79
|
|
|
90
80
|
// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
|
|
91
|
-
export const propName = memoize(name => vendorPropName(name));
|
|
81
|
+
export const propName = memoize((name) => vendorPropName(name));
|
|
92
82
|
|
|
93
83
|
const cssPrefixes = ['webkit', 'moz', 'ms'];
|
|
94
84
|
|
|
95
85
|
function vendorPropName(name) {
|
|
96
|
-
|
|
97
86
|
name = hyphenate(name);
|
|
98
87
|
|
|
99
|
-
const {style} = document.documentElement;
|
|
88
|
+
const { style } = document.documentElement;
|
|
100
89
|
|
|
101
90
|
if (name in style) {
|
|
102
91
|
return name;
|
|
103
92
|
}
|
|
104
93
|
|
|
105
|
-
let i = cssPrefixes.length,
|
|
94
|
+
let i = cssPrefixes.length,
|
|
95
|
+
prefixedName;
|
|
106
96
|
|
|
107
97
|
while (i--) {
|
|
108
98
|
prefixedName = `-${cssPrefixes[i]}-${name}`;
|
package/src/js/util/viewport.js
CHANGED
|
@@ -1,82 +1,90 @@
|
|
|
1
|
-
import {css} from './style';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import { css } from './style';
|
|
2
|
+
import { isVisible, parents } from './filter';
|
|
3
|
+
import { offset, offsetPosition } from './dimensions';
|
|
4
|
+
import {
|
|
5
|
+
clamp,
|
|
6
|
+
findIndex,
|
|
7
|
+
intersectRect,
|
|
8
|
+
isDocument,
|
|
9
|
+
isUndefined,
|
|
10
|
+
isWindow,
|
|
11
|
+
toNode,
|
|
12
|
+
toWindow,
|
|
13
|
+
} from './lang';
|
|
6
14
|
|
|
7
15
|
export function isInView(element, offsetTop = 0, offsetLeft = 0) {
|
|
8
|
-
|
|
9
16
|
if (!isVisible(element)) {
|
|
10
17
|
return false;
|
|
11
18
|
}
|
|
12
19
|
|
|
13
|
-
return intersectRect(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
return intersectRect(
|
|
21
|
+
...scrollParents(element)
|
|
22
|
+
.map((parent) => {
|
|
23
|
+
const { top, left, bottom, right } = offset(getViewport(parent));
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
top: top - offsetTop,
|
|
27
|
+
left: left - offsetLeft,
|
|
28
|
+
bottom: bottom + offsetTop,
|
|
29
|
+
right: right + offsetLeft,
|
|
30
|
+
};
|
|
31
|
+
})
|
|
32
|
+
.concat(offset(element))
|
|
33
|
+
);
|
|
24
34
|
}
|
|
25
35
|
|
|
26
36
|
export function scrollTop(element, top) {
|
|
27
|
-
|
|
28
37
|
if (isWindow(element) || isDocument(element)) {
|
|
29
38
|
element = getScrollingElement(element);
|
|
30
39
|
} else {
|
|
31
40
|
element = toNode(element);
|
|
32
41
|
}
|
|
33
42
|
|
|
34
|
-
|
|
43
|
+
if (isUndefined(top)) {
|
|
44
|
+
return element.scrollTop;
|
|
45
|
+
} else {
|
|
46
|
+
element.scrollTop = top;
|
|
47
|
+
}
|
|
35
48
|
}
|
|
36
49
|
|
|
37
|
-
export function scrollIntoView(element, {offset: offsetBy = 0} = {}) {
|
|
38
|
-
|
|
50
|
+
export function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
|
|
39
51
|
const parents = isVisible(element) ? scrollParents(element) : [];
|
|
40
|
-
return parents.reduce(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
+
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
top
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}, () => Promise.resolve())();
|
|
52
|
+
return parents.reduce(
|
|
53
|
+
(fn, scrollElement, i) => {
|
|
54
|
+
const { scrollTop, scrollHeight, offsetHeight } = scrollElement;
|
|
55
|
+
const maxScroll = scrollHeight - getViewportClientHeight(scrollElement);
|
|
56
|
+
const { height: elHeight, top: elTop } = offset(parents[i - 1] || element);
|
|
57
|
+
|
|
58
|
+
let top = Math.ceil(
|
|
59
|
+
elTop - offset(getViewport(scrollElement)).top - offsetBy + scrollTop
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) {
|
|
63
|
+
top += offsetBy;
|
|
64
|
+
} else {
|
|
65
|
+
offsetBy = 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (top > maxScroll) {
|
|
69
|
+
offsetBy -= top - maxScroll;
|
|
70
|
+
top = maxScroll;
|
|
71
|
+
} else if (top < 0) {
|
|
72
|
+
offsetBy -= top;
|
|
73
|
+
top = 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return () => scrollTo(scrollElement, top - scrollTop).then(fn);
|
|
77
|
+
},
|
|
78
|
+
() => Promise.resolve()
|
|
79
|
+
)();
|
|
70
80
|
|
|
71
81
|
function scrollTo(element, top) {
|
|
72
|
-
return new Promise(resolve => {
|
|
73
|
-
|
|
82
|
+
return new Promise((resolve) => {
|
|
74
83
|
const scroll = element.scrollTop;
|
|
75
84
|
const duration = getDuration(Math.abs(top));
|
|
76
85
|
const start = Date.now();
|
|
77
86
|
|
|
78
87
|
(function step() {
|
|
79
|
-
|
|
80
88
|
const percent = ease(clamp((Date.now() - start) / duration));
|
|
81
89
|
|
|
82
90
|
scrollTop(element, scroll + top * percent);
|
|
@@ -87,29 +95,26 @@ export function scrollIntoView(element, {offset: offsetBy = 0} = {}) {
|
|
|
87
95
|
} else {
|
|
88
96
|
requestAnimationFrame(step);
|
|
89
97
|
}
|
|
90
|
-
|
|
91
98
|
})();
|
|
92
99
|
});
|
|
93
100
|
}
|
|
94
101
|
|
|
95
102
|
function getDuration(dist) {
|
|
96
|
-
return 40 * Math.pow(dist, .375);
|
|
103
|
+
return 40 * Math.pow(dist, 0.375);
|
|
97
104
|
}
|
|
98
105
|
|
|
99
106
|
function ease(k) {
|
|
100
107
|
return 0.5 * (1 - Math.cos(Math.PI * k));
|
|
101
108
|
}
|
|
102
|
-
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
export function scrolledOver(element, startOffset = 0, endOffset = 0) {
|
|
106
|
-
|
|
107
112
|
if (!isVisible(element)) {
|
|
108
113
|
return 0;
|
|
109
114
|
}
|
|
110
115
|
|
|
111
116
|
const [scrollElement] = scrollParents(element, /auto|scroll/, true);
|
|
112
|
-
const {scrollHeight, scrollTop} = scrollElement;
|
|
117
|
+
const { scrollHeight, scrollTop } = scrollElement;
|
|
113
118
|
const viewportHeight = getViewportClientHeight(scrollElement);
|
|
114
119
|
const maxScroll = scrollHeight - viewportHeight;
|
|
115
120
|
const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
|
|
@@ -126,14 +131,20 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden/, scroll
|
|
|
126
131
|
let ancestors = parents(element).reverse();
|
|
127
132
|
ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);
|
|
128
133
|
|
|
129
|
-
const fixedIndex = findIndex(ancestors, el => css(el, 'position') === 'fixed');
|
|
134
|
+
const fixedIndex = findIndex(ancestors, (el) => css(el, 'position') === 'fixed');
|
|
130
135
|
if (~fixedIndex) {
|
|
131
136
|
ancestors = ancestors.slice(fixedIndex);
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
return [scrollEl]
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
return [scrollEl]
|
|
140
|
+
.concat(
|
|
141
|
+
ancestors.filter(
|
|
142
|
+
(parent) =>
|
|
143
|
+
overflowRe.test(css(parent, 'overflow')) &&
|
|
144
|
+
(!scrollable || parent.scrollHeight > getViewportClientHeight(parent))
|
|
145
|
+
)
|
|
146
|
+
)
|
|
147
|
+
.reverse();
|
|
137
148
|
}
|
|
138
149
|
|
|
139
150
|
export function getViewport(scrollElement) {
|
|
@@ -142,10 +153,14 @@ export function getViewport(scrollElement) {
|
|
|
142
153
|
|
|
143
154
|
// iOS 12 returns <body> as scrollingElement
|
|
144
155
|
export function getViewportClientHeight(scrollElement) {
|
|
145
|
-
return (
|
|
156
|
+
return (
|
|
157
|
+
scrollElement === getScrollingElement(scrollElement)
|
|
158
|
+
? document.documentElement
|
|
159
|
+
: scrollElement
|
|
160
|
+
).clientHeight;
|
|
146
161
|
}
|
|
147
162
|
|
|
148
|
-
function getScrollingElement(element) {
|
|
149
|
-
const {document} = toWindow(element);
|
|
163
|
+
export function getScrollingElement(element) {
|
|
164
|
+
const { document } = toWindow(element);
|
|
150
165
|
return document.scrollingElement || document.documentElement;
|
|
151
166
|
}
|
|
@@ -91,7 +91,6 @@
|
|
|
91
91
|
|
|
92
92
|
/*
|
|
93
93
|
* 1. Set `font-size` to support `rem` units
|
|
94
|
-
* Not using `font` property because a leading hyphen (e.g. -apple-system) causes the font to break in IE11 and Edge
|
|
95
94
|
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
|
96
95
|
* 3. Style
|
|
97
96
|
*/
|
|
@@ -239,7 +238,7 @@ sub { bottom: -0.25em; }
|
|
|
239
238
|
========================================================================== */
|
|
240
239
|
|
|
241
240
|
/*
|
|
242
|
-
* Remove the gap between
|
|
241
|
+
* Remove the gap between the element and the bottom of its parent container.
|
|
243
242
|
*/
|
|
244
243
|
|
|
245
244
|
audio,
|
|
@@ -250,14 +249,14 @@ svg,
|
|
|
250
249
|
video { vertical-align: middle; }
|
|
251
250
|
|
|
252
251
|
/*
|
|
253
|
-
* 1.
|
|
254
|
-
* 2.
|
|
255
|
-
* 3.
|
|
256
|
-
* 4. Exclude SVGs for IE11 because they don't preserve their aspect ratio.
|
|
252
|
+
* 1. Constrain the element to its parent width.
|
|
253
|
+
* 2. Preserve the intrinsic aspect ratio and auto-scale the height of an image if the `height` attribute is present.
|
|
254
|
+
* 3. Take border and padding into account.
|
|
257
255
|
*/
|
|
258
256
|
|
|
259
257
|
canvas,
|
|
260
258
|
img,
|
|
259
|
+
svg,
|
|
261
260
|
video {
|
|
262
261
|
/* 1 */
|
|
263
262
|
max-width: 100%;
|
|
@@ -267,34 +266,17 @@ video {
|
|
|
267
266
|
box-sizing: border-box;
|
|
268
267
|
}
|
|
269
268
|
|
|
270
|
-
/* 4 */
|
|
271
|
-
@supports (display: block) {
|
|
272
|
-
|
|
273
|
-
svg {
|
|
274
|
-
max-width: 100%;
|
|
275
|
-
height: auto;
|
|
276
|
-
box-sizing: border-box;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
/*
|
|
282
|
-
* Hide the overflow in IE.
|
|
283
|
-
*/
|
|
284
|
-
|
|
285
|
-
svg:not(:root) { overflow: hidden; }
|
|
286
|
-
|
|
287
269
|
/*
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
270
|
+
* Deprecated: only needed for `img` elements with `uk-img`
|
|
271
|
+
* 1. Hide `alt` text for lazy load images.
|
|
272
|
+
* 2. Fix lazy loading images if parent element is set to `display: inline` and has `overflow: hidden`.
|
|
291
273
|
*/
|
|
292
274
|
|
|
293
275
|
img:not([src]) {
|
|
294
276
|
/* 1 */
|
|
295
|
-
min-width: 1px;
|
|
296
|
-
/* 2 */
|
|
297
277
|
visibility: hidden;
|
|
278
|
+
/* 2 */
|
|
279
|
+
min-width: 1px;
|
|
298
280
|
}
|
|
299
281
|
|
|
300
282
|
/*
|
|
@@ -589,11 +571,6 @@ template { display: none; }
|
|
|
589
571
|
* Breakpoints
|
|
590
572
|
*/
|
|
591
573
|
|
|
592
|
-
.uk-breakpoint-s::before { content: '@{breakpoint-small}'; }
|
|
593
|
-
.uk-breakpoint-m::before { content: '@{breakpoint-medium}'; }
|
|
594
|
-
.uk-breakpoint-l::before { content: '@{breakpoint-large}'; }
|
|
595
|
-
.uk-breakpoint-xl::before { content: '@{breakpoint-xlarge}'; }
|
|
596
|
-
|
|
597
574
|
:root {
|
|
598
575
|
--uk-breakpoint-s: @breakpoint-small;
|
|
599
576
|
--uk-breakpoint-m: @breakpoint-medium;
|
|
@@ -13,15 +13,6 @@
|
|
|
13
13
|
.uk-flex { display: flex; }
|
|
14
14
|
.uk-flex-inline { display: inline-flex; }
|
|
15
15
|
|
|
16
|
-
/*
|
|
17
|
-
* Remove pseudo elements created by micro clearfix as precaution
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
.uk-flex::before,
|
|
21
|
-
.uk-flex::after,
|
|
22
|
-
.uk-flex-inline::before,
|
|
23
|
-
.uk-flex-inline::after { display: none; }
|
|
24
|
-
|
|
25
16
|
|
|
26
17
|
/* Alignment
|
|
27
18
|
========================================================================== */
|