uikit 3.14.4-dev.ca199f7a7 → 3.14.4-dev.e3664d0d2

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/dist/css/uikit-core-rtl.css +12 -4
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +12 -4
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +12 -4
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +12 -4
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +22 -7
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +22 -7
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +1 -1
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +22 -7
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +22 -7
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +3 -3
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +8 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +32 -35
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +79 -67
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/components/sortable.js +2 -3
  44. package/src/js/core/height-viewport.js +9 -5
  45. package/src/js/core/sticky.js +8 -9
  46. package/src/js/mixin/position.js +8 -0
  47. package/src/js/mixin/slider-drag.js +20 -8
  48. package/src/js/util/dimensions.js +6 -6
  49. package/src/js/util/position.js +1 -0
  50. package/src/js/util/viewport.js +2 -27
  51. package/src/less/components/utility.less +12 -3
  52. package/src/scss/components/utility.scss +12 -3
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.14.4-dev.ca199f7a7",
5
+ "version": "3.14.4-dev.e3664d0d2",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -26,7 +26,6 @@ import {
26
26
  remove,
27
27
  removeClass,
28
28
  scrollParents,
29
- scrollTop,
30
29
  toggleClass,
31
30
  Transition,
32
31
  trigger,
@@ -313,7 +312,7 @@ function trackScroll(pos) {
313
312
  let last = Date.now();
314
313
  trackTimer = setInterval(() => {
315
314
  let { x, y } = pos;
316
- y += scrollTop(window);
315
+ y += document.scrollingElement.scrollTop;
317
316
 
318
317
  const dist = (Date.now() - last) * 0.3;
319
318
  last = Date.now();
@@ -334,7 +333,7 @@ function trackScroll(pos) {
334
333
  }
335
334
 
336
335
  if (scroll > 0 && scroll < scrollHeight - height) {
337
- scrollTop(scrollEl, scroll);
336
+ scrollEl.scrollTop = scroll;
338
337
  return true;
339
338
  }
340
339
  });
@@ -56,14 +56,18 @@ export default {
56
56
  0
57
57
  );
58
58
  } else {
59
+ const isScrollingElement = document.scrollingElement === scrollElement;
60
+
59
61
  // on mobile devices (iOS and Android) window.innerHeight !== 100vh
60
- minHeight = `calc(${
61
- document.scrollingElement === scrollElement ? '100vh' : `${viewportHeight}px`
62
- }`;
62
+ minHeight = `calc(${isScrollingElement ? '100vh' : `${viewportHeight}px`}`;
63
63
 
64
64
  if (this.offsetTop) {
65
- const top = offsetPosition(this.$el)[0] - offsetPosition(scrollElement)[0];
66
- minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : '';
65
+ if (isScrollingElement) {
66
+ const top = offsetPosition(this.$el)[0] - offsetPosition(scrollElement)[0];
67
+ minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : '';
68
+ } else {
69
+ minHeight += ` - ${css(scrollElement, 'paddingTop')}`;
70
+ }
67
71
  }
68
72
 
69
73
  if (this.offsetBottom === true) {
@@ -23,7 +23,6 @@ import {
23
23
  remove,
24
24
  removeClass,
25
25
  replaceClass,
26
- scrollTop,
27
26
  toFloat,
28
27
  toggleClass,
29
28
  toPx,
@@ -125,7 +124,9 @@ export default {
125
124
  },
126
125
 
127
126
  handler() {
128
- if (!location.hash || scrollTop(window) === 0) {
127
+ const { scrollingElement } = document;
128
+
129
+ if (!location.hash || scrollingElement.scrollTop === 0) {
129
130
  return;
130
131
  }
131
132
 
@@ -134,13 +135,11 @@ export default {
134
135
  const elOffset = getOffset(this.$el);
135
136
 
136
137
  if (this.isFixed && intersectRect(targetOffset, elOffset)) {
137
- scrollTop(
138
- window,
138
+ scrollingElement.scrollTop =
139
139
  targetOffset.top -
140
- elOffset.height -
141
- toPx(this.targetOffset, 'height', this.placeholder) -
142
- toPx(this.offset, 'height', this.placeholder)
143
- );
140
+ elOffset.height -
141
+ toPx(this.targetOffset, 'height', this.placeholder) -
142
+ toPx(this.offset, 'height', this.placeholder);
144
143
  }
145
144
  });
146
145
  },
@@ -238,7 +237,7 @@ export default {
238
237
  start,
239
238
  end,
240
239
  }) {
241
- const scroll = scrollTop(window);
240
+ const scroll = document.scrollingElement.scrollTop;
242
241
  const dir = prevScroll <= scroll ? 'down' : 'up';
243
242
 
244
243
  return {
@@ -6,6 +6,7 @@ import {
6
6
  includes,
7
7
  isRtl,
8
8
  positionAt,
9
+ scrollParents,
9
10
  toPx,
10
11
  } from 'uikit-util';
11
12
 
@@ -44,6 +45,9 @@ export default {
44
45
  offset = offset.reverse();
45
46
  }
46
47
 
48
+ const [scrollElement] = scrollParents(element, /auto|scroll/);
49
+ const { scrollTop, scrollLeft } = scrollElement;
50
+
47
51
  // Ensure none positioned element does not generate scrollbars
48
52
  const elDim = dimensions(element);
49
53
  css(element, { top: -elDim.height, left: -elDim.width });
@@ -55,6 +59,10 @@ export default {
55
59
  flip: this.flip,
56
60
  viewportOffset: this.getViewportOffset(element),
57
61
  });
62
+
63
+ // Restore scroll position
64
+ scrollElement.scrollTop = scrollTop;
65
+ scrollElement.scrollLeft = scrollLeft;
58
66
  },
59
67
 
60
68
  getPositionOffset(element) {
@@ -5,16 +5,18 @@ import {
5
5
  includes,
6
6
  isRtl,
7
7
  isTouch,
8
+ noop,
8
9
  off,
9
10
  on,
10
- pointerCancel,
11
- pointerDown,
12
- pointerMove,
13
- pointerUp,
14
11
  selInput,
15
12
  trigger,
16
13
  } from 'uikit-util';
17
14
 
15
+ const pointerOptions = { passive: false, capture: true };
16
+ const pointerDown = 'touchstart mousedown';
17
+ const pointerMove = 'touchmove mousemove';
18
+ const pointerUp = 'touchend touchcancel mouseup click input';
19
+
18
20
  export default {
19
21
  props: {
20
22
  draggable: Boolean,
@@ -69,6 +71,16 @@ export default {
69
71
  e.preventDefault();
70
72
  },
71
73
  },
74
+
75
+ {
76
+ // iOS workaround for slider stopping if swiping fast
77
+ name: `${pointerMove} ${pointerUp}`,
78
+ el() {
79
+ return this.list;
80
+ },
81
+ handler: noop,
82
+ ...pointerOptions,
83
+ },
72
84
  ],
73
85
 
74
86
  methods: {
@@ -89,10 +101,10 @@ export default {
89
101
  this.prevIndex = this.index;
90
102
  }
91
103
 
92
- on(document, pointerMove, this.move, { passive: false });
104
+ on(document, pointerMove, this.move, pointerOptions);
93
105
 
94
106
  // 'input' event is triggered by video controls
95
- on(document, `${pointerUp} ${pointerCancel} input`, this.end, true);
107
+ on(document, pointerUp, this.end, pointerOptions);
96
108
 
97
109
  css(this.list, 'userSelect', 'none');
98
110
  },
@@ -172,8 +184,8 @@ export default {
172
184
  },
173
185
 
174
186
  end() {
175
- off(document, pointerMove, this.move, { passive: false });
176
- off(document, `${pointerUp} ${pointerCancel} input`, this.end, true);
187
+ off(document, pointerMove, this.move, pointerOptions);
188
+ off(document, pointerUp, this.end, pointerOptions);
177
189
 
178
190
  if (this.dragging) {
179
191
  this.dragging = null;
@@ -94,13 +94,13 @@ export function position(element) {
94
94
  }
95
95
 
96
96
  export function offsetPosition(element) {
97
- const offset = [0, 0];
98
-
99
97
  element = toNode(element);
100
98
 
101
- do {
102
- offset[0] += element.offsetTop;
103
- offset[1] += element.offsetLeft;
99
+ const offset = [element.offsetTop, element.offsetLeft];
100
+
101
+ while ((element = element.offsetParent)) {
102
+ offset[0] += element.offsetTop + toFloat(css(element, `borderTopWidth`));
103
+ offset[1] += element.offsetLeft + toFloat(css(element, `borderLeftWidth`));
104
104
 
105
105
  if (css(element, 'position') === 'fixed') {
106
106
  const win = toWindow(element);
@@ -108,7 +108,7 @@ export function offsetPosition(element) {
108
108
  offset[1] += win.scrollX;
109
109
  return offset;
110
110
  }
111
- } while ((element = element.offsetParent));
111
+ }
112
112
 
113
113
  return offset;
114
114
  }
@@ -159,6 +159,7 @@ function attachToWithFlip(element, target, options) {
159
159
  return newPos;
160
160
  }
161
161
  }
162
+ continue;
162
163
  }
163
164
 
164
165
  // Move
@@ -1,18 +1,7 @@
1
1
  import { css } from './style';
2
2
  import { isVisible, parents } from './filter';
3
3
  import { offset, offsetPosition } from './dimensions';
4
- import {
5
- clamp,
6
- findIndex,
7
- intersectRect,
8
- isDocument,
9
- isUndefined,
10
- isWindow,
11
- toFloat,
12
- toNode,
13
- toWindow,
14
- ucfirst,
15
- } from './lang';
4
+ import { clamp, findIndex, intersectRect, isWindow, toFloat, toWindow, ucfirst } from './lang';
16
5
 
17
6
  export function isInView(element, offsetTop = 0, offsetLeft = 0) {
18
7
  if (!isVisible(element)) {
@@ -35,20 +24,6 @@ export function isInView(element, offsetTop = 0, offsetLeft = 0) {
35
24
  );
36
25
  }
37
26
 
38
- export function scrollTop(element, top) {
39
- if (isWindow(element) || isDocument(element)) {
40
- element = scrollingElement(element);
41
- } else {
42
- element = toNode(element);
43
- }
44
-
45
- if (isUndefined(top)) {
46
- return element.scrollTop;
47
- } else {
48
- element.scrollTop = top;
49
- }
50
- }
51
-
52
27
  export function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
53
28
  const parents = isVisible(element) ? scrollParents(element) : [];
54
29
  return parents.reduce(
@@ -90,7 +65,7 @@ export function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
90
65
  (function step() {
91
66
  const percent = ease(clamp((Date.now() - start) / duration));
92
67
 
93
- scrollTop(element, scroll + top * percent);
68
+ element.scrollTop = scroll + top * percent;
94
69
 
95
70
  // scroll more if we have not reached our destination
96
71
  if (percent === 1) {
@@ -384,18 +384,27 @@
384
384
  ========================================================================== */
385
385
 
386
386
  /*
387
- * 1. Required for `a`
387
+ * 1. Style
388
+ * 2. Required for `a`
389
+ * 3. Behave like image but can be overridden through flex utility classes
388
390
  */
389
391
 
390
392
  .uk-logo {
393
+ /* 1 */
391
394
  font-size: @logo-font-size;
392
395
  font-family: @logo-font-family;
393
396
  color: @logo-color;
394
- /* 1 */
397
+ /* 2 */
395
398
  text-decoration: none;
396
399
  .hook-logo();
397
400
  }
398
401
 
402
+ /* 3 */
403
+ :where(.uk-logo) {
404
+ display: inline-block;
405
+ vertical-align: middle;
406
+ }
407
+
399
408
  /* Hover */
400
409
  .uk-logo:hover {
401
410
  color: @logo-hover-color;
@@ -404,7 +413,7 @@
404
413
  .hook-logo-hover();
405
414
  }
406
415
 
407
- .uk-logo > :where(img, svg, video) { display: inline-block; }
416
+ .uk-logo > :where(img, svg, video) { display: block; }
408
417
 
409
418
  .uk-logo-inverse { display: none; }
410
419
 
@@ -384,18 +384,27 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
384
384
  ========================================================================== */
385
385
 
386
386
  /*
387
- * 1. Required for `a`
387
+ * 1. Style
388
+ * 2. Required for `a`
389
+ * 3. Behave like image but can be overridden through flex utility classes
388
390
  */
389
391
 
390
392
  .uk-logo {
393
+ /* 1 */
391
394
  font-size: $logo-font-size;
392
395
  font-family: $logo-font-family;
393
396
  color: $logo-color;
394
- /* 1 */
397
+ /* 2 */
395
398
  text-decoration: none;
396
399
  @if(mixin-exists(hook-logo)) {@include hook-logo();}
397
400
  }
398
401
 
402
+ /* 3 */
403
+ :where(.uk-logo) {
404
+ display: inline-block;
405
+ vertical-align: middle;
406
+ }
407
+
399
408
  /* Hover */
400
409
  .uk-logo:hover {
401
410
  color: $logo-hover-color;
@@ -404,7 +413,7 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
404
413
  @if(mixin-exists(hook-logo-hover)) {@include hook-logo-hover();}
405
414
  }
406
415
 
407
- .uk-logo > :where(img, svg, video) { display: inline-block; }
416
+ .uk-logo > :where(img, svg, video) { display: block; }
408
417
 
409
418
  .uk-logo-inverse { display: none; }
410
419