uikit 3.14.1 → 3.14.2-dev.731537913

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 (60) hide show
  1. package/CHANGELOG.md +13 -3
  2. package/dist/css/uikit-core-rtl.css +6 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +6 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +6 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +6 -1
  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 +6 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +6 -1
  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 +1 -1
  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 +1 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +14 -14
  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 +47 -41
  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 +47 -41
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/core/drop.js +16 -7
  44. package/src/js/core/height-viewport.js +1 -2
  45. package/src/js/core/toggle.js +4 -0
  46. package/src/js/mixin/position.js +7 -22
  47. package/src/js/mixin/togglable.js +5 -0
  48. package/src/js/util/position.js +9 -9
  49. package/src/js/util/viewport.js +2 -8
  50. package/src/less/components/drop.less +1 -0
  51. package/src/less/components/dropdown.less +1 -0
  52. package/src/less/components/navbar.less +2 -0
  53. package/src/less/components/tooltip.less +1 -0
  54. package/src/scss/components/drop.scss +1 -0
  55. package/src/scss/components/dropdown.scss +1 -0
  56. package/src/scss/components/navbar.scss +2 -0
  57. package/src/scss/components/tooltip.scss +1 -0
  58. package/tests/drop.html +20 -2
  59. package/tests/dropdown.html +6 -0
  60. package/tests/navbar.html +6 -0
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.1",
5
+ "version": "3.14.2-dev.731537913",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -8,6 +8,7 @@ import {
8
8
  apply,
9
9
  attr,
10
10
  css,
11
+ getCssVar,
11
12
  hasClass,
12
13
  includes,
13
14
  isTouch,
@@ -15,7 +16,6 @@ import {
15
16
  MouseTracker,
16
17
  observeResize,
17
18
  offset,
18
- offsetViewport,
19
19
  on,
20
20
  once,
21
21
  parent,
@@ -28,6 +28,7 @@ import {
28
28
  removeClass,
29
29
  scrollParents,
30
30
  toggleClass,
31
+ toPx,
31
32
  within,
32
33
  } from 'uikit-util';
33
34
 
@@ -378,19 +379,27 @@ export default {
378
379
  toggleClass(this.$el, `${this.clsDrop}-boundary`, this.boundaryAlign);
379
380
 
380
381
  const boundary = query(this.boundary, this.$el);
381
- const [scrollParent] = scrollParents(this.$el);
382
- const scrollParentOffset = offsetViewport(scrollParent);
382
+ const scrollParentOffset = offset(
383
+ scrollParents(boundary && this.boundaryAlign ? boundary : this.$el)[0]
384
+ );
383
385
  const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
384
386
 
385
387
  css(this.$el, 'maxWidth', '');
386
388
  const maxWidth =
387
- scrollParentOffset.width - (this.boundaryAlign ? 0 : 2 * this.viewportPadding);
389
+ scrollParentOffset.width -
390
+ 2 * toPx(getCssVar('position-viewport-offset', this.$el));
388
391
 
389
392
  if (this.pos[1] === 'justify') {
390
393
  const prop = this.axis === 'y' ? 'width' : 'height';
391
- const targetOffset = offset(this.target);
392
- const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
393
- css(this.$el, prop, alignTo[prop]);
394
+ css(
395
+ this.$el,
396
+ prop,
397
+ Math.min(
398
+ (boundary ? boundaryOffset : offset(this.target))[prop],
399
+ scrollParentOffset[prop] -
400
+ 2 * toPx(getCssVar('position-viewport-offset', this.$el))
401
+ )
402
+ );
394
403
  } else if (this.$el.offsetWidth > maxWidth) {
395
404
  addClass(this.$el, `${this.clsDrop}-stack`);
396
405
  }
@@ -1,4 +1,3 @@
1
- import Class from '../mixin/class';
2
1
  import Resize from '../mixin/resize';
3
2
  import {
4
3
  boxModelAdjust,
@@ -15,7 +14,7 @@ import {
15
14
  } from 'uikit-util';
16
15
 
17
16
  export default {
18
- mixins: [Class, Resize],
17
+ mixins: [Resize],
19
18
 
20
19
  props: {
21
20
  expand: Boolean,
@@ -156,6 +156,10 @@ export default {
156
156
  {
157
157
  name: 'click',
158
158
 
159
+ filter() {
160
+ return includes(['click', 'hover'], this.mode);
161
+ },
162
+
159
163
  handler(e) {
160
164
  let link;
161
165
  if (
@@ -1,14 +1,4 @@
1
- import {
2
- $,
3
- flipPosition,
4
- getCssVar,
5
- offset as getOffset,
6
- includes,
7
- isNumeric,
8
- isRtl,
9
- positionAt,
10
- toPx,
11
- } from 'uikit-util';
1
+ import { flipPosition, getCssVar, includes, isRtl, positionAt, toPx } from 'uikit-util';
12
2
 
13
3
  export default {
14
4
  props: {
@@ -21,7 +11,6 @@ export default {
21
11
  pos: `bottom-${isRtl ? 'right' : 'left'}`,
22
12
  flip: true,
23
13
  offset: false,
24
- viewportPadding: 10,
25
14
  },
26
15
 
27
16
  connected() {
@@ -33,15 +22,11 @@ export default {
33
22
  positionAt(element, target, boundary) {
34
23
  const [dir, align] = this.pos;
35
24
 
36
- let { offset } = this;
37
- if (!isNumeric(offset)) {
38
- const node = $(offset);
39
- offset = node
40
- ? getOffset(node)[this.axis === 'x' ? 'left' : 'top'] -
41
- getOffset(target)[this.axis === 'x' ? 'right' : 'bottom']
42
- : 0;
43
- }
44
- offset = toPx(offset) + toPx(getCssVar('position-offset', element));
25
+ let offset = toPx(
26
+ this.offset === false ? getCssVar('position-offset', element) : this.offset,
27
+ this.axis === 'x' ? 'width' : 'height',
28
+ element
29
+ );
45
30
  offset = [includes(['left', 'top'], dir) ? -offset : +offset, 0];
46
31
 
47
32
  const attach = {
@@ -60,8 +45,8 @@ export default {
60
45
  attach,
61
46
  offset,
62
47
  boundary,
63
- viewportPadding: this.boundaryAlign ? 0 : this.viewportPadding,
64
48
  flip: this.flip,
49
+ viewportOffset: toPx(getCssVar('position-viewport-offset', element)),
65
50
  });
66
51
  },
67
52
  },
@@ -81,6 +81,11 @@ export default {
81
81
  return Promise.reject();
82
82
  }
83
83
 
84
+ if (!animate) {
85
+ Animation.cancel(el);
86
+ Transition.cancel(el);
87
+ }
88
+
84
89
  const promise = (
85
90
  isFunction(animate)
86
91
  ? animate
@@ -49,6 +49,10 @@ function attachTo(element, target, options) {
49
49
  return position;
50
50
  }
51
51
 
52
+ function moveBy(start, end, dim) {
53
+ return start === 'center' ? dim / 2 : start === end ? dim : 0;
54
+ }
55
+
52
56
  function attachToWithFlip(element, target, options) {
53
57
  const position = attachTo(element, target, options);
54
58
  const targetDim = offset(target);
@@ -59,7 +63,7 @@ function attachToWithFlip(element, target, options) {
59
63
  offset: elOffset,
60
64
  boundary,
61
65
  viewport,
62
- viewportPadding,
66
+ viewportOffset,
63
67
  } = options;
64
68
 
65
69
  let viewports = scrollParents(element);
@@ -80,9 +84,9 @@ function attachToWithFlip(element, target, options) {
80
84
 
81
85
  viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
82
86
 
83
- if (viewportPadding) {
84
- viewport[start] += viewportPadding;
85
- viewport[end] -= viewportPadding;
87
+ if (viewportOffset) {
88
+ viewport[start] += viewportOffset;
89
+ viewport[end] -= viewportOffset;
86
90
  }
87
91
 
88
92
  if (boundary && !willFlip && position[prop] <= offset(boundary)[prop]) {
@@ -172,10 +176,6 @@ function attachToWithFlip(element, target, options) {
172
176
  return offsetPosition;
173
177
  }
174
178
 
175
- function moveBy(start, end, dim) {
176
- return start === 'center' ? dim / 2 : start === end ? dim : 0;
177
- }
178
-
179
179
  function getIntersectionArea(...rects) {
180
180
  let area = {};
181
181
  for (const rect of rects) {
@@ -188,7 +188,7 @@ function getIntersectionArea(...rects) {
188
188
  }
189
189
 
190
190
  function isInScrollArea(position, scrollElement, dir) {
191
- const viewport = offsetViewport(scrollElement);
191
+ const viewport = offsetViewport(scrollElement, false);
192
192
  const [prop, , start, end] = dirs[dir];
193
193
  viewport[start] -= scrollElement[`scroll${ucfirst(start)}`];
194
194
  viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`];
@@ -153,11 +153,6 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden/, scroll
153
153
  export function offsetViewport(scrollElement) {
154
154
  let viewportElement = getViewport(scrollElement);
155
155
 
156
- // iOS 12 returns <body> as scrollingElement
157
- if (viewportElement === scrollingElement(viewportElement)) {
158
- viewportElement = document.documentElement;
159
- }
160
-
161
156
  let rect = offset(viewportElement);
162
157
  for (let [prop, dir, start, end] of [
163
158
  ['width', 'x', 'left', 'right'],
@@ -166,9 +161,8 @@ export function offsetViewport(scrollElement) {
166
161
  if (!isWindow(getViewport(viewportElement))) {
167
162
  rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
168
163
  }
169
- rect[prop] = rect[dir] = (
170
- isWindow(viewportElement) ? scrollingElement(viewportElement) : viewportElement
171
- )[`client${ucfirst(prop)}`];
164
+ rect[prop] = rect[dir] =
165
+ viewportElement[(isWindow(viewportElement) ? 'inner' : 'client') + ucfirst(prop)];
172
166
  rect[end] = rect[prop] + rect[start];
173
167
  }
174
168
  return rect;
@@ -42,6 +42,7 @@
42
42
  position: absolute;
43
43
  z-index: @drop-z-index;
44
44
  --uk-position-offset: @drop-margin;
45
+ --uk-position-viewport-offset: 10;
45
46
  /* 3 */
46
47
  box-sizing: border-box;
47
48
  width: @drop-width;
@@ -55,6 +55,7 @@
55
55
  position: absolute;
56
56
  z-index: @dropdown-z-index;
57
57
  --uk-position-offset: @dropdown-margin;
58
+ --uk-position-viewport-offset: 10;
58
59
  /* 3 */
59
60
  box-sizing: border-box;
60
61
  min-width: @dropdown-min-width;
@@ -362,6 +362,7 @@
362
362
  position: absolute;
363
363
  z-index: @navbar-dropdown-z-index;
364
364
  --uk-position-offset: @navbar-dropdown-margin;
365
+ --uk-position-viewport-offset: 10;
365
366
  /* 3 */
366
367
  box-sizing: border-box;
367
368
  width: @navbar-dropdown-width;
@@ -410,6 +411,7 @@
410
411
  .uk-navbar-dropdown-dropbar {
411
412
  /* 1 */
412
413
  --uk-position-offset: @navbar-dropdown-dropbar-margin-top;
414
+ --uk-position-viewport-offset: 0;
413
415
  /* 2 */
414
416
  margin-bottom: @navbar-dropdown-dropbar-margin-bottom;
415
417
  /* 3 */
@@ -51,6 +51,7 @@
51
51
  position: absolute;
52
52
  z-index: @tooltip-z-index;
53
53
  --uk-position-offset: @tooltip-margin;
54
+ --uk-position-viewport-offset: 10;
54
55
  /* 3 */
55
56
  top: 0;
56
57
  /* 4 */
@@ -42,6 +42,7 @@ $drop-width: 300px !default;
42
42
  position: absolute;
43
43
  z-index: $drop-z-index;
44
44
  --uk-position-offset: #{$drop-margin};
45
+ --uk-position-viewport-offset: 10;
45
46
  /* 3 */
46
47
  box-sizing: border-box;
47
48
  width: $drop-width;
@@ -55,6 +55,7 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
55
55
  position: absolute;
56
56
  z-index: $dropdown-z-index;
57
57
  --uk-position-offset: #{$dropdown-margin};
58
+ --uk-position-viewport-offset: 10;
58
59
  /* 3 */
59
60
  box-sizing: border-box;
60
61
  min-width: $dropdown-min-width;
@@ -362,6 +362,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
362
362
  position: absolute;
363
363
  z-index: $navbar-dropdown-z-index;
364
364
  --uk-position-offset: #{$navbar-dropdown-margin};
365
+ --uk-position-viewport-offset: 10;
365
366
  /* 3 */
366
367
  box-sizing: border-box;
367
368
  width: $navbar-dropdown-width;
@@ -410,6 +411,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
410
411
  .uk-navbar-dropdown-dropbar {
411
412
  /* 1 */
412
413
  --uk-position-offset: #{$navbar-dropdown-dropbar-margin-top};
414
+ --uk-position-viewport-offset: 0;
413
415
  /* 2 */
414
416
  margin-bottom: $navbar-dropdown-dropbar-margin-bottom;
415
417
  /* 3 */
@@ -51,6 +51,7 @@ $tooltip-font-size: 12px !default;
51
51
  position: absolute;
52
52
  z-index: $tooltip-z-index;
53
53
  --uk-position-offset: #{$tooltip-margin};
54
+ --uk-position-viewport-offset: 10;
54
55
  /* 3 */
55
56
  top: 0;
56
57
  /* 4 */
package/tests/drop.html CHANGED
@@ -15,7 +15,7 @@
15
15
  -webkit-overflow-scrolling: touch;
16
16
  }
17
17
 
18
- .boundary-overflow { width: 200%; }
18
+ .boundary-overflow { width: 250%; }
19
19
 
20
20
  </style>
21
21
  </head>
@@ -260,7 +260,7 @@
260
260
  <div class="uk-child-width-1-2@m" uk-grid>
261
261
  <div>
262
262
 
263
- <div class="boundary uk-height-medium uk-margin uk-flex uk-flex-between uk-flex-wrap">
263
+ <div class="boundary uk-height-medium uk-margin uk-flex uk-flex-around uk-flex-wrap">
264
264
  <div>
265
265
 
266
266
  <button class="uk-button uk-button-default" type="button">Bottom Right</button>
@@ -279,6 +279,12 @@
279
279
  <div class="uk-width-medium" uk-dropdown="pos: bottom-left; boundary: !.boundary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
280
280
 
281
281
  </div>
282
+ <div>
283
+
284
+ <button class="uk-button uk-button-default" type="button">Bottom Justify</button>
285
+ <div class="uk-width-medium" uk-dropdown="pos: bottom-justify; boundary: !.boundary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
286
+
287
+ </div>
282
288
  </div>
283
289
 
284
290
  </div>
@@ -303,6 +309,12 @@
303
309
  <div class="uk-width-medium" uk-dropdown="pos: right-top; boundary: !.boundary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
304
310
 
305
311
  </div>
312
+ <div>
313
+
314
+ <button class="uk-button uk-button-default" type="button">Right Justify</button>
315
+ <div class="uk-width-medium" uk-dropdown="pos: right-justify; boundary: !.boundary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div>
316
+
317
+ </div>
306
318
  </div>
307
319
 
308
320
  </div>
@@ -473,6 +485,12 @@
473
485
  <td>200</td>
474
486
  <td>The animation duration.</td>
475
487
  </tr>
488
+ <tr>
489
+ <td><code>container</code></td>
490
+ <td>Boolean</td>
491
+ <td>false</td>
492
+ <td>Define a target container via a selector to specify where the drop should be appended in the DOM.</td>
493
+ </tr>
476
494
  </tbody>
477
495
  </table>
478
496
  </div>
@@ -431,6 +431,12 @@
431
431
  <td>200</td>
432
432
  <td>The animation duration.</td>
433
433
  </tr>
434
+ <tr>
435
+ <td><code>container</code></td>
436
+ <td>Boolean</td>
437
+ <td>false</td>
438
+ <td>Define a target container via a selector to specify where the drop should be appended in the DOM.</td>
439
+ </tr>
434
440
  </tbody>
435
441
  </table>
436
442
  </div>
package/tests/navbar.html CHANGED
@@ -2039,6 +2039,12 @@
2039
2039
  <td>200</td>
2040
2040
  <td>The dropbar transition duration.</td>
2041
2041
  </tr>
2042
+ <tr>
2043
+ <td><code>container</code></td>
2044
+ <td>Boolean</td>
2045
+ <td>false</td>
2046
+ <td>Define a target container via a selector to specify where the drops should be appended in the DOM.</td>
2047
+ </tr>
2042
2048
  </tbody>
2043
2049
  </table>
2044
2050
  </div>