uikit 3.13.8-dev.bd666a112 → 3.13.8-dev.efe195e41
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 +4 -0
- 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 +1 -1
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +1 -1
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1 -1
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1 -1
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +1 -1
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +13 -10
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +13 -10
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +1 -1
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +13 -10
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +1 -1
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +1 -1
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +41 -49
- 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 +79 -106
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +1 -1
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +115 -109
- package/dist/js/uikit.min.js +1 -1
- package/package.json +1 -1
- package/src/js/api/hooks.js +1 -1
- package/src/js/components/tooltip.js +38 -3
- package/src/js/core/accordion.js +1 -1
- package/src/js/core/drop.js +6 -5
- package/src/js/core/height-match.js +7 -15
- package/src/js/core/navbar.js +1 -1
- package/src/js/core/scrollspy.js +45 -26
- package/src/js/core/sticky.js +2 -2
- package/src/js/mixin/media.js +12 -9
- package/src/js/mixin/position.js +4 -43
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.13.8-dev.
|
|
5
|
+
"version": "3.13.8-dev.efe195e41",
|
|
6
6
|
"main": "dist/js/uikit.js",
|
|
7
7
|
"style": "dist/css/uikit.css",
|
|
8
8
|
"sideEffects": [
|
package/src/js/api/hooks.js
CHANGED
|
@@ -6,9 +6,11 @@ import {
|
|
|
6
6
|
attr,
|
|
7
7
|
flipPosition,
|
|
8
8
|
hasAttr,
|
|
9
|
+
includes,
|
|
9
10
|
isFocusable,
|
|
10
11
|
isTouch,
|
|
11
12
|
matches,
|
|
13
|
+
offset,
|
|
12
14
|
on,
|
|
13
15
|
once,
|
|
14
16
|
pointerDown,
|
|
@@ -104,10 +106,12 @@ export default {
|
|
|
104
106
|
|
|
105
107
|
this.positionAt(this.tooltip, this.$el);
|
|
106
108
|
|
|
109
|
+
const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos);
|
|
110
|
+
|
|
107
111
|
this.origin =
|
|
108
|
-
this.
|
|
109
|
-
? `${flipPosition(
|
|
110
|
-
: `${
|
|
112
|
+
this.axis === 'y'
|
|
113
|
+
? `${flipPosition(dir)}-${align}`
|
|
114
|
+
: `${align}-${flipPosition(dir)}`;
|
|
111
115
|
});
|
|
112
116
|
|
|
113
117
|
this.toggleElement(this.tooltip, true);
|
|
@@ -143,3 +147,34 @@ function makeFocusable(el) {
|
|
|
143
147
|
attr(el, 'tabindex', '0');
|
|
144
148
|
}
|
|
145
149
|
}
|
|
150
|
+
|
|
151
|
+
function getAlignment(el, target, [dir, align]) {
|
|
152
|
+
const elOffset = offset(el);
|
|
153
|
+
const targetOffset = offset(target);
|
|
154
|
+
const properties = [
|
|
155
|
+
['left', 'right'],
|
|
156
|
+
['top', 'bottom'],
|
|
157
|
+
];
|
|
158
|
+
|
|
159
|
+
for (const props of properties) {
|
|
160
|
+
if (elOffset[props[0]] >= targetOffset[props[1]]) {
|
|
161
|
+
dir = props[1];
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
if (elOffset[props[1]] <= targetOffset[props[0]]) {
|
|
165
|
+
dir = props[0];
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const props = includes(properties[0], dir) ? properties[1] : properties[0];
|
|
171
|
+
if (elOffset[props[0]] === targetOffset[props[0]]) {
|
|
172
|
+
align = props[0];
|
|
173
|
+
} else if (elOffset[props[1]] === targetOffset[props[1]]) {
|
|
174
|
+
align = props[1];
|
|
175
|
+
} else {
|
|
176
|
+
align = 'center';
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return [dir, align];
|
|
180
|
+
}
|
package/src/js/core/accordion.js
CHANGED
package/src/js/core/drop.js
CHANGED
|
@@ -362,17 +362,18 @@ export default {
|
|
|
362
362
|
const boundaryOffset = offset(boundary);
|
|
363
363
|
const targetOffset = offset(this.target);
|
|
364
364
|
const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
|
|
365
|
+
const prop = this.axis === 'y' ? 'width' : 'height';
|
|
366
|
+
|
|
367
|
+
css(this.$el, `max-${prop}`, '');
|
|
365
368
|
|
|
366
369
|
if (this.pos[1] === 'justify') {
|
|
367
|
-
const prop = this.getAxis() === 'y' ? 'width' : 'height';
|
|
368
370
|
css(this.$el, prop, alignTo[prop]);
|
|
369
|
-
} else if (
|
|
370
|
-
this.$el.offsetWidth >
|
|
371
|
-
Math.max(boundaryOffset.right - alignTo.left, alignTo.right - boundaryOffset.left)
|
|
372
|
-
) {
|
|
371
|
+
} else if (this.$el.offsetWidth > boundaryOffset.width) {
|
|
373
372
|
addClass(this.$el, `${this.clsDrop}-stack`);
|
|
374
373
|
}
|
|
375
374
|
|
|
375
|
+
css(this.$el, `max-${prop}`, boundaryOffset[prop]);
|
|
376
|
+
|
|
376
377
|
this.positionAt(this.$el, this.boundaryAlign ? boundary : this.target, boundary);
|
|
377
378
|
},
|
|
378
379
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Resize from '../mixin/resize';
|
|
2
2
|
import { getRows } from './margin';
|
|
3
|
-
import { $$, boxModelAdjust, css, dimensions, isVisible
|
|
3
|
+
import { $$, boxModelAdjust, css, dimensions, isVisible } from 'uikit-util';
|
|
4
4
|
|
|
5
5
|
export default {
|
|
6
6
|
mixins: [Resize],
|
|
@@ -56,22 +56,14 @@ function match(elements) {
|
|
|
56
56
|
return { heights: [''], elements };
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
css(elements, 'minHeight', '');
|
|
59
60
|
let heights = elements.map(getHeight);
|
|
60
|
-
|
|
61
|
-
const hasMinHeight = elements.some((el) => el.style.minHeight);
|
|
62
|
-
const hasShrunk = elements.some((el, i) => !el.style.minHeight && heights[i] < max);
|
|
63
|
-
|
|
64
|
-
if (hasMinHeight && hasShrunk) {
|
|
65
|
-
css(elements, 'minHeight', '');
|
|
66
|
-
heights = elements.map(getHeight);
|
|
67
|
-
max = Math.max(...heights);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
heights = elements.map((el, i) =>
|
|
71
|
-
heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max
|
|
72
|
-
);
|
|
61
|
+
const max = Math.max(...heights);
|
|
73
62
|
|
|
74
|
-
return {
|
|
63
|
+
return {
|
|
64
|
+
heights: elements.map((el, i) => (heights[i].toFixed(2) === max.toFixed(2) ? '' : max)),
|
|
65
|
+
elements,
|
|
66
|
+
};
|
|
75
67
|
}
|
|
76
68
|
|
|
77
69
|
function getHeight(element) {
|
package/src/js/core/navbar.js
CHANGED
package/src/js/core/scrollspy.js
CHANGED
|
@@ -4,15 +4,15 @@ import {
|
|
|
4
4
|
css,
|
|
5
5
|
filter,
|
|
6
6
|
data as getData,
|
|
7
|
-
|
|
7
|
+
observeIntersection,
|
|
8
8
|
once,
|
|
9
9
|
removeClass,
|
|
10
10
|
removeClasses,
|
|
11
11
|
toggleClass,
|
|
12
|
+
toPx,
|
|
12
13
|
trigger,
|
|
13
14
|
} from 'uikit-util';
|
|
14
15
|
|
|
15
|
-
const stateKey = '_ukScrollspy';
|
|
16
16
|
export default {
|
|
17
17
|
mixins: [Scroll],
|
|
18
18
|
|
|
@@ -45,43 +45,64 @@ export default {
|
|
|
45
45
|
return target ? $$(target, $el) : [$el];
|
|
46
46
|
},
|
|
47
47
|
|
|
48
|
-
watch(elements) {
|
|
48
|
+
watch(elements, prev) {
|
|
49
49
|
if (this.hidden) {
|
|
50
50
|
css(filter(elements, `:not(.${this.inViewClass})`), 'visibility', 'hidden');
|
|
51
51
|
}
|
|
52
|
+
|
|
53
|
+
if (prev) {
|
|
54
|
+
this.$reset();
|
|
55
|
+
}
|
|
52
56
|
},
|
|
53
57
|
|
|
54
58
|
immediate: true,
|
|
55
59
|
},
|
|
56
60
|
},
|
|
57
61
|
|
|
62
|
+
connected() {
|
|
63
|
+
this._data.elements = new Map();
|
|
64
|
+
this.registerObserver(
|
|
65
|
+
observeIntersection(
|
|
66
|
+
this.elements,
|
|
67
|
+
(records) => {
|
|
68
|
+
const elements = this._data.elements;
|
|
69
|
+
for (const { target: el, isIntersecting } of records) {
|
|
70
|
+
if (!elements.has(el)) {
|
|
71
|
+
elements.set(el, {
|
|
72
|
+
cls: getData(el, 'uk-scrollspy-class') || this.cls,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const state = elements.get(el);
|
|
77
|
+
if (!this.repeat && state.show) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
state.show = isIntersecting;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
this.$emit();
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
rootMargin: `${toPx(this.offsetTop, 'height') - 1}px ${
|
|
88
|
+
toPx(this.offsetLeft, 'width') - 1
|
|
89
|
+
}px`,
|
|
90
|
+
},
|
|
91
|
+
false
|
|
92
|
+
)
|
|
93
|
+
);
|
|
94
|
+
},
|
|
95
|
+
|
|
58
96
|
disconnected() {
|
|
59
|
-
for (const el of this.elements) {
|
|
60
|
-
removeClass(el, this.inViewClass,
|
|
61
|
-
delete el[stateKey];
|
|
97
|
+
for (const [el, state] of this._data.elements.entries()) {
|
|
98
|
+
removeClass(el, this.inViewClass, state?.cls || '');
|
|
62
99
|
}
|
|
63
100
|
},
|
|
64
101
|
|
|
65
102
|
update: [
|
|
66
103
|
{
|
|
67
|
-
read() {
|
|
68
|
-
for (const el of this.elements) {
|
|
69
|
-
if (!el[stateKey]) {
|
|
70
|
-
el[stateKey] = { cls: getData(el, 'uk-scrollspy-class') || this.cls };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (!this.repeat && el[stateKey].show) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
el[stateKey].show = isInView(el, this.offsetTop, this.offsetLeft);
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
|
|
81
104
|
write(data) {
|
|
82
|
-
for (const el of
|
|
83
|
-
const state = el[stateKey];
|
|
84
|
-
|
|
105
|
+
for (const [el, state] of data.elements.entries()) {
|
|
85
106
|
if (state.show && !state.inview && !state.queued) {
|
|
86
107
|
state.queued = true;
|
|
87
108
|
|
|
@@ -99,14 +120,12 @@ export default {
|
|
|
99
120
|
}
|
|
100
121
|
}
|
|
101
122
|
},
|
|
102
|
-
|
|
103
|
-
events: ['scroll', 'resize'],
|
|
104
123
|
},
|
|
105
124
|
],
|
|
106
125
|
|
|
107
126
|
methods: {
|
|
108
127
|
toggle(el, inview) {
|
|
109
|
-
const state = el
|
|
128
|
+
const state = this._data.elements.get(el);
|
|
110
129
|
|
|
111
130
|
state.off?.();
|
|
112
131
|
|
package/src/js/core/sticky.js
CHANGED
|
@@ -137,13 +137,13 @@ export default {
|
|
|
137
137
|
return false;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
const hide = this.
|
|
140
|
+
const hide = this.active && types.has('resize');
|
|
141
141
|
if (hide) {
|
|
142
142
|
css(this.selTarget, 'transition', '0s');
|
|
143
143
|
this.hide();
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
if (!this.
|
|
146
|
+
if (!this.active) {
|
|
147
147
|
height = getOffset(this.$el).height;
|
|
148
148
|
margin = css(this.$el, 'margin');
|
|
149
149
|
}
|
package/src/js/mixin/media.js
CHANGED
|
@@ -20,16 +20,19 @@ export default {
|
|
|
20
20
|
|
|
21
21
|
connected() {
|
|
22
22
|
const media = toMedia(this.media);
|
|
23
|
-
this.
|
|
24
|
-
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
this.matchMedia = true;
|
|
24
|
+
if (media) {
|
|
25
|
+
this.mediaObj = window.matchMedia(media);
|
|
26
|
+
const handler = () => {
|
|
27
|
+
this.matchMedia = this.mediaObj.matches;
|
|
28
|
+
trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
|
|
29
|
+
};
|
|
30
|
+
this.offMediaObj = on(this.mediaObj, 'change', () => {
|
|
31
|
+
handler();
|
|
32
|
+
this.$emit('resize');
|
|
33
|
+
});
|
|
29
34
|
handler();
|
|
30
|
-
|
|
31
|
-
});
|
|
32
|
-
handler();
|
|
35
|
+
}
|
|
33
36
|
},
|
|
34
37
|
|
|
35
38
|
disconnected() {
|
package/src/js/mixin/position.js
CHANGED
|
@@ -25,21 +25,19 @@ export default {
|
|
|
25
25
|
|
|
26
26
|
connected() {
|
|
27
27
|
this.pos = this.$props.pos.split('-').concat('center').slice(0, 2);
|
|
28
|
-
this.
|
|
29
|
-
this.align = this.pos[1];
|
|
28
|
+
this.axis = includes(['top', 'bottom'], this.pos[0]) ? 'y' : 'x';
|
|
30
29
|
},
|
|
31
30
|
|
|
32
31
|
methods: {
|
|
33
32
|
positionAt(element, target, boundary) {
|
|
34
33
|
const [dir, align] = this.pos;
|
|
35
|
-
const axis = this.getAxis(dir);
|
|
36
34
|
|
|
37
35
|
let { offset } = this;
|
|
38
36
|
if (!isNumeric(offset)) {
|
|
39
37
|
const node = $(offset);
|
|
40
38
|
offset = node
|
|
41
|
-
? getOffset(node)[axis === 'x' ? 'left' : 'top'] -
|
|
42
|
-
getOffset(target)[axis === 'x' ? 'right' : 'bottom']
|
|
39
|
+
? getOffset(node)[this.axis === 'x' ? 'left' : 'top'] -
|
|
40
|
+
getOffset(target)[this.axis === 'x' ? 'right' : 'bottom']
|
|
43
41
|
: 0;
|
|
44
42
|
}
|
|
45
43
|
offset = toPx(offset) + toPx(getCssVar('position-offset', element));
|
|
@@ -50,7 +48,7 @@ export default {
|
|
|
50
48
|
target: [dir, align],
|
|
51
49
|
};
|
|
52
50
|
|
|
53
|
-
if (axis === 'y') {
|
|
51
|
+
if (this.axis === 'y') {
|
|
54
52
|
for (const prop in attach) {
|
|
55
53
|
attach[prop] = attach[prop].reverse();
|
|
56
54
|
}
|
|
@@ -63,43 +61,6 @@ export default {
|
|
|
63
61
|
boundary,
|
|
64
62
|
flip: this.flip,
|
|
65
63
|
});
|
|
66
|
-
|
|
67
|
-
[this.dir, this.align] = getAlignment(element, target, this.pos);
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
getAxis(dir = this.dir) {
|
|
71
|
-
return includes(['top', 'bottom'], dir) ? 'y' : 'x';
|
|
72
64
|
},
|
|
73
65
|
},
|
|
74
66
|
};
|
|
75
|
-
|
|
76
|
-
function getAlignment(el, target, [dir, align]) {
|
|
77
|
-
const elOffset = getOffset(el);
|
|
78
|
-
const targetOffset = getOffset(target);
|
|
79
|
-
const properties = [
|
|
80
|
-
['left', 'right'],
|
|
81
|
-
['top', 'bottom'],
|
|
82
|
-
];
|
|
83
|
-
|
|
84
|
-
for (const props of properties) {
|
|
85
|
-
if (elOffset[props[0]] >= targetOffset[props[1]]) {
|
|
86
|
-
dir = props[1];
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
if (elOffset[props[1]] <= targetOffset[props[0]]) {
|
|
90
|
-
dir = props[0];
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const props = includes(properties[0], dir) ? properties[1] : properties[0];
|
|
96
|
-
if (elOffset[props[0]] === targetOffset[props[0]]) {
|
|
97
|
-
align = props[0];
|
|
98
|
-
} else if (elOffset[props[1]] === targetOffset[props[1]]) {
|
|
99
|
-
align = props[1];
|
|
100
|
-
} else {
|
|
101
|
-
align = 'center';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return [dir, align];
|
|
105
|
-
}
|