uikit 3.14.4-dev.a02c81d72 → 3.14.4-dev.ae765cd84

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 (132) hide show
  1. package/CHANGELOG.md +34 -17
  2. package/build/util.js +1 -0
  3. package/dist/css/uikit-core-rtl.css +339 -109
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +339 -109
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +359 -113
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +359 -113
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +1 -1
  12. package/dist/js/components/countdown.min.js +1 -1
  13. package/dist/js/components/filter.js +1 -1
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +78 -129
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +78 -129
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +1 -1
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +4 -5
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +4 -5
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +1 -1
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +4 -5
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +1 -1
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +1 -1
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +92 -145
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +1 -1
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +460 -446
  38. package/dist/js/uikit-core.min.js +14 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +460 -446
  42. package/dist/js/uikit.min.js +14 -1
  43. package/package.json +1 -1
  44. package/src/images/{backgrounds/nav-parent-close.svg → components/nav-parent-icon-large.svg} +0 -0
  45. package/src/images/{backgrounds/navbar-parent-close.svg → components/nav-parent-icon.svg} +0 -0
  46. package/src/images/{backgrounds/navbar-parent-open.svg → components/navbar-parent-icon.svg} +1 -1
  47. package/src/images/components/navbar-toggle-icon.svg +22 -3
  48. package/src/js/api/state.js +2 -2
  49. package/src/js/core/accordion.js +9 -17
  50. package/src/js/core/alert.js +35 -14
  51. package/src/js/core/drop.js +89 -62
  52. package/src/js/core/height-viewport.js +4 -2
  53. package/src/js/core/icon.js +16 -0
  54. package/src/js/core/index.js +2 -0
  55. package/src/js/core/leader.js +2 -2
  56. package/src/js/core/navbar.js +30 -45
  57. package/src/js/core/scroll.js +37 -10
  58. package/src/js/core/toggle.js +3 -5
  59. package/src/js/mixin/media.js +4 -5
  60. package/src/js/mixin/modal.js +9 -6
  61. package/src/js/mixin/position.js +24 -26
  62. package/src/js/mixin/style.js +11 -0
  63. package/src/js/mixin/togglable.js +80 -133
  64. package/src/js/util/animation.js +4 -3
  65. package/src/js/util/filter.js +3 -7
  66. package/src/js/util/position.js +107 -107
  67. package/src/js/util/style.js +4 -13
  68. package/src/js/util/viewport.js +3 -5
  69. package/src/less/components/_import.less +1 -0
  70. package/src/less/components/drop.less +1 -18
  71. package/src/less/components/dropbar.less +115 -0
  72. package/src/less/components/dropdown.less +11 -19
  73. package/src/less/components/leader.less +1 -1
  74. package/src/less/components/nav.less +218 -59
  75. package/src/less/components/navbar.less +54 -47
  76. package/src/less/components/utility.less +10 -2
  77. package/src/less/theme/_import.less +1 -0
  78. package/src/less/theme/dropbar.less +44 -0
  79. package/src/less/theme/dropdown.less +0 -11
  80. package/src/less/theme/nav.less +45 -7
  81. package/src/less/theme/navbar.less +1 -5
  82. package/src/scss/components/_import.scss +1 -0
  83. package/src/scss/components/drop.scss +1 -18
  84. package/src/scss/components/dropbar.scss +115 -0
  85. package/src/scss/components/dropdown.scss +11 -19
  86. package/src/scss/components/leader.scss +1 -1
  87. package/src/scss/components/nav.scss +167 -47
  88. package/src/scss/components/navbar.scss +42 -47
  89. package/src/scss/components/utility.scss +8 -1
  90. package/src/scss/mixins-theme.scss +92 -21
  91. package/src/scss/mixins.scss +89 -17
  92. package/src/scss/theme/_import.scss +1 -0
  93. package/src/scss/theme/dropbar.scss +44 -0
  94. package/src/scss/theme/dropdown.scss +0 -8
  95. package/src/scss/theme/nav.scss +43 -7
  96. package/src/scss/theme/navbar.scss +1 -5
  97. package/src/scss/variables-theme.scss +56 -19
  98. package/src/scss/variables.scss +45 -17
  99. package/tests/accordion.html +2 -2
  100. package/tests/alert.html +2 -2
  101. package/tests/countdown.html +1 -1
  102. package/tests/drop.html +442 -412
  103. package/tests/dropbar.html +456 -0
  104. package/tests/dropdown.html +8 -470
  105. package/tests/filter.html +9 -12
  106. package/tests/form.html +1 -1
  107. package/tests/index.html +126 -107
  108. package/tests/js/index.js +1 -4
  109. package/tests/lightbox.html +5 -5
  110. package/tests/list.html +8 -8
  111. package/tests/modal.html +13 -13
  112. package/tests/nav.html +117 -75
  113. package/tests/navbar.html +102 -237
  114. package/tests/offcanvas.html +17 -21
  115. package/tests/parallax.html +1 -1
  116. package/tests/position.html +18 -16
  117. package/tests/progress.html +9 -9
  118. package/tests/scroll.html +7 -10
  119. package/tests/search.html +5 -5
  120. package/tests/slider.html +6 -5
  121. package/tests/slideshow.html +8 -8
  122. package/tests/sortable.html +6 -8
  123. package/tests/sticky-navbar.html +6 -6
  124. package/tests/sticky.html +8 -8
  125. package/tests/switcher.html +1 -1
  126. package/tests/tab.html +1 -1
  127. package/tests/table.html +7 -7
  128. package/tests/toggle.html +2 -2
  129. package/tests/tooltip.html +1 -1
  130. package/tests/upload.html +11 -11
  131. package/tests/utility.html +19 -0
  132. package/src/images/backgrounds/nav-parent-open.svg +0 -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.a02c81d72",
5
+ "version": "3.14.4-dev.ae765cd84",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -1,3 +1,3 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
2
- <polyline fill="none" stroke="#000" stroke-width="1.1" points="11 8.5 6 3.5 1 8.5" />
2
+ <polyline fill="none" stroke="#000" stroke-width="1.1" points="1 3.5 6 8.5 11 3.5"/>
3
3
  </svg>
@@ -1,5 +1,24 @@
1
1
  <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
2
- <rect y="9" width="20" height="2" />
3
- <rect y="3" width="20" height="2" />
4
- <rect y="15" width="20" height="2" />
2
+ <style>
3
+
4
+ .uk-navbar-toggle svg > [class*='line-'] {
5
+ transition: 0.2s ease-in-out;
6
+ transition-property: transform, opacity,;
7
+ transform-origin: center;
8
+ opacity: 1;
9
+ }
10
+
11
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-2 { transform: rotate(45deg); }
12
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-3 { transform: rotate(-45deg); }
13
+
14
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-1,
15
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-4 { opacity: 0; }
16
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-1 { transform: translateY(6px) scaleX(0); }
17
+ .uk-navbar-toggle[aria-expanded="true"] svg > .line-4 { transform: translateY(-6px) scaleX(0); }
18
+
19
+ </style>
20
+ <rect class="line-1" y="3" width="20" height="2" />
21
+ <rect class="line-2" y="9" width="20" height="2" />
22
+ <rect class="line-3" y="9" width="20" height="2" />
23
+ <rect class="line-4" y="15" width="20" height="2" />
5
24
  </svg>
@@ -142,7 +142,7 @@ function getProps(opts, name) {
142
142
 
143
143
  value = props[key] === Boolean && value === '' ? true : coerce(props[key], value);
144
144
 
145
- if (prop === 'target' && (!value || startsWith(value, '_'))) {
145
+ if (prop === 'target' && startsWith(value, '_')) {
146
146
  continue;
147
147
  }
148
148
 
@@ -153,7 +153,7 @@ function getProps(opts, name) {
153
153
 
154
154
  for (const key in options) {
155
155
  const prop = camelize(key);
156
- if (props[prop] !== undefined) {
156
+ if (!isUndefined(props[prop])) {
157
157
  data[prop] = coerce(props[prop], options[key]);
158
158
  }
159
159
  }
@@ -1,6 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Lazyload from '../mixin/lazyload';
3
- import { slide, default as Togglable } from '../mixin/togglable';
3
+ import { default as Togglable, toggleTransition } from '../mixin/togglable';
4
4
  import {
5
5
  $,
6
6
  $$,
@@ -14,14 +14,14 @@ import {
14
14
  isInView,
15
15
  scrollIntoView,
16
16
  toggleClass,
17
- unwrap,
18
- wrapAll,
17
+ within,
19
18
  } from 'uikit-util';
20
19
 
21
20
  export default {
22
21
  mixins: [Class, Lazyload, Togglable],
23
22
 
24
23
  props: {
24
+ animation: Boolean,
25
25
  targets: String,
26
26
  active: null,
27
27
  collapsible: Boolean,
@@ -34,7 +34,7 @@ export default {
34
34
  data: {
35
35
  targets: '> *',
36
36
  active: false,
37
- animation: ['slide'],
37
+ animation: true,
38
38
  collapsible: true,
39
39
  multiple: false,
40
40
  clsOpen: 'uk-open',
@@ -80,7 +80,7 @@ export default {
80
80
  hide(
81
81
  el,
82
82
  !hasClass(
83
- this.items.find((item) => item.contains(el)),
83
+ this.items.find((item) => within(el, item)),
84
84
  this.clsOpen
85
85
  )
86
86
  );
@@ -132,23 +132,15 @@ export default {
132
132
  toggleClass(el, this.clsOpen, show);
133
133
  attr($(this.$props.toggle, el), 'aria-expanded', show);
134
134
 
135
- const content = $(`${el._wrapper ? '> * ' : ''}${this.content}`, el);
135
+ const content = $(this.content, el);
136
136
 
137
- if (animate === false || !this.hasTransition) {
137
+ if (animate === false || !this.animation) {
138
+ content.hidden = !show;
138
139
  hide(content, !show);
139
140
  return;
140
141
  }
141
142
 
142
- if (!el._wrapper) {
143
- el._wrapper = wrapAll(content, `<div${show ? ' hidden' : ''}>`);
144
- }
145
-
146
- hide(content, false);
147
- await slide(this)(el._wrapper, show);
148
- hide(content, !show);
149
-
150
- delete el._wrapper;
151
- unwrap(content);
143
+ await toggleTransition(this)(content, show);
152
144
 
153
145
  if (show) {
154
146
  const toggle = $(this.$props.toggle, el);
@@ -1,5 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Togglable from '../mixin/togglable';
3
+ import { css, toFloat, Transition } from 'uikit-util';
3
4
 
4
5
  export default {
5
6
  mixins: [Class, Togglable],
@@ -7,35 +8,55 @@ export default {
7
8
  args: 'animation',
8
9
 
9
10
  props: {
11
+ animation: Boolean,
10
12
  close: String,
11
13
  },
12
14
 
13
15
  data: {
14
- animation: ['slide'],
16
+ animation: true,
15
17
  selClose: '.uk-alert-close',
16
18
  duration: 150,
17
- hideProps: { opacity: 0, ...Togglable.data.hideProps },
18
19
  },
19
20
 
20
- events: [
21
- {
22
- name: 'click',
21
+ events: {
22
+ name: 'click',
23
23
 
24
- delegate() {
25
- return this.selClose;
26
- },
24
+ delegate() {
25
+ return this.selClose;
26
+ },
27
27
 
28
- handler(e) {
29
- e.preventDefault();
30
- this.close();
31
- },
28
+ handler(e) {
29
+ e.preventDefault();
30
+ this.close();
32
31
  },
33
- ],
32
+ },
34
33
 
35
34
  methods: {
36
35
  async close() {
37
- await this.toggleElement(this.$el);
36
+ await this.toggleElement(this.$el, false, animate(this));
38
37
  this.$destroy(true);
39
38
  },
40
39
  },
41
40
  };
41
+
42
+ function animate({ duration, transition, velocity }) {
43
+ return (el) => {
44
+ const height = toFloat(css(el, 'height'));
45
+ css(el, 'height', height);
46
+ return Transition.start(
47
+ el,
48
+ {
49
+ height: 0,
50
+ marginTop: 0,
51
+ marginBottom: 0,
52
+ paddingTop: 0,
53
+ paddingBottom: 0,
54
+ borderTop: 0,
55
+ borderBottom: 0,
56
+ opacity: 0,
57
+ },
58
+ velocity * height + duration,
59
+ transition
60
+ );
61
+ };
62
+ }
@@ -1,6 +1,7 @@
1
1
  import Container from '../mixin/container';
2
2
  import Lazyload from '../mixin/lazyload';
3
3
  import Position from '../mixin/position';
4
+ import Style from '../mixin/style';
4
5
  import Togglable from '../mixin/togglable';
5
6
  import {
6
7
  addClass,
@@ -27,7 +28,6 @@ import {
27
28
  query,
28
29
  removeClass,
29
30
  scrollParents,
30
- toggleClass,
31
31
  within,
32
32
  } from 'uikit-util';
33
33
  import { preventBackgroundScroll, preventOverscroll } from '../mixin/modal';
@@ -35,7 +35,7 @@ import { preventBackgroundScroll, preventOverscroll } from '../mixin/modal';
35
35
  export let active;
36
36
 
37
37
  export default {
38
- mixins: [Container, Lazyload, Position, Togglable],
38
+ mixins: [Container, Lazyload, Position, Style, Togglable],
39
39
 
40
40
  args: 'pos',
41
41
 
@@ -43,7 +43,10 @@ export default {
43
43
  mode: 'list',
44
44
  toggle: Boolean,
45
45
  boundary: Boolean,
46
- boundaryAlign: Boolean,
46
+ target: Boolean,
47
+ targetX: Boolean,
48
+ targetY: Boolean,
49
+ stretch: Boolean,
47
50
  delayShow: Number,
48
51
  delayHide: Number,
49
52
  display: String,
@@ -55,17 +58,32 @@ export default {
55
58
  data: {
56
59
  mode: ['click', 'hover'],
57
60
  toggle: '- *',
58
- boundary: true,
59
- boundaryAlign: false,
61
+ boundary: false,
62
+ target: false,
63
+ targetX: false,
64
+ targetY: false,
65
+ stretch: false,
60
66
  delayShow: 0,
61
67
  delayHide: 800,
62
68
  display: null,
63
69
  clsDrop: false,
70
+ animateOut: false,
71
+ bgScroll: true,
64
72
  animation: ['uk-animation-fade'],
65
73
  cls: 'uk-open',
66
74
  container: false,
67
- animateOut: false,
68
- bgScroll: true,
75
+ },
76
+
77
+ computed: {
78
+ target({ target, targetX, targetY }, $el) {
79
+ targetX = targetX || target || this.targetEl;
80
+ targetY = targetY || target || this.targetEl;
81
+
82
+ return [
83
+ targetX === true ? window : query(targetX, $el),
84
+ targetY === true ? window : query(targetY, $el),
85
+ ];
86
+ },
69
87
  },
70
88
 
71
89
  created() {
@@ -79,13 +97,13 @@ export default {
79
97
  connected() {
80
98
  addClass(this.$el, this.clsDrop);
81
99
 
82
- if (this.toggle && !this.target) {
83
- this.target = this.$create('toggle', query(this.toggle, this.$el), {
100
+ if (this.toggle && !this.targetEl) {
101
+ this.targetEl = this.$create('toggle', query(this.toggle, this.$el), {
84
102
  target: this.$el,
85
103
  mode: this.mode,
86
104
  }).$el;
87
- attr(this.target, 'aria-haspopup', true);
88
- this.lazyload(this.target);
105
+ attr(this.targetEl, 'aria-haspopup', true);
106
+ this.lazyload(this.targetEl);
89
107
  }
90
108
  },
91
109
 
@@ -238,7 +256,7 @@ export default {
238
256
  !defaultPrevented &&
239
257
  type === pointerUp &&
240
258
  target === newTarget &&
241
- !(this.target && within(target, this.target))
259
+ !(this.targetEl && within(target, this.targetEl))
242
260
  ) {
243
261
  this.hide(false);
244
262
  }
@@ -257,13 +275,13 @@ export default {
257
275
  ? []
258
276
  : [preventOverscroll(this.$el), preventBackgroundScroll()]),
259
277
 
260
- ...(this.display === 'static' && this.align !== 'stretch'
278
+ ...(this.display === 'static'
261
279
  ? []
262
280
  : (() => {
263
281
  const handler = () => this.$emit();
264
282
  return [
265
283
  on(window, 'resize', handler),
266
- on(document, 'scroll', handler, true),
284
+ on([document, scrollParents(this.$el)], 'scroll', handler),
267
285
  (() => {
268
286
  const observer = observeResize(
269
287
  scrollParents(this.$el),
@@ -316,12 +334,12 @@ export default {
316
334
  },
317
335
 
318
336
  methods: {
319
- show(target = this.target, delay = true) {
320
- if (this.isToggled() && target && this.target && target !== this.target) {
337
+ show(target = this.targetEl, delay = true) {
338
+ if (this.isToggled() && target && this.targetEl && target !== this.targetEl) {
321
339
  this.hide(false, false);
322
340
  }
323
341
 
324
- this.target = target;
342
+ this.targetEl = target;
325
343
 
326
344
  this.clearTimers();
327
345
 
@@ -384,60 +402,69 @@ export default {
384
402
 
385
403
  position() {
386
404
  removeClass(this.$el, `${this.clsDrop}-stack`);
387
- toggleClass(this.$el, `${this.clsDrop}-boundary`, this.boundaryAlign);
388
- toggleClass(this.$el, `${this.clsDrop}-stretch`, this.align === 'stretch');
405
+ attr(this.$el, 'style', this._style);
406
+
407
+ // Ensure none positioned element does not generate scrollbars
408
+ this.$el.hidden = true;
389
409
 
390
410
  const boundary = query(this.boundary, this.$el);
391
- const target = boundary && this.boundaryAlign ? boundary : this.target;
392
- const [scrollParent] = scrollParents(
393
- boundary && this.boundaryAlign ? boundary : this.$el
394
- );
395
- const scrollParentOffset = offset(scrollParent);
396
- const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
411
+ const boundaryOffset = offsetViewport(boundary || window);
412
+ const viewports = this.target.map((target) => offsetViewport(scrollParents(target)[0]));
397
413
  const viewportOffset = this.getViewportOffset(this.$el);
398
414
 
399
- css(this.$el, 'maxWidth', '');
400
- const maxWidth = scrollParentOffset.width - 2 * viewportOffset;
401
-
402
- if (this.align === 'justify') {
403
- const prop = this.axis === 'y' ? 'width' : 'height';
404
- css(
405
- this.$el,
406
- prop,
407
- Math.min(
408
- (boundary ? boundaryOffset : offset(this.target))[prop],
409
- scrollParentOffset[prop] - 2 * viewportOffset
410
- )
411
- );
412
- } else if (this.align === 'stretch') {
413
- this.flip = this.axis === 'y' ? 'x' : 'y';
414
- this.display = 'static';
415
-
416
- const viewport = offsetViewport(scrollParent);
417
- const targetDim = offset(target);
418
- const elOffset = Math.abs(this.getPositionOffset(this.$el)) + viewportOffset;
419
-
420
- css(this.$el, {
421
- width:
422
- this.axis === 'y'
423
- ? viewport.width
424
- : (this.dir === 'left'
425
- ? targetDim.left - viewport.left
426
- : viewport.right - targetDim.right) - elOffset,
427
- height:
428
- this.axis === 'x'
429
- ? viewport.height
430
- : (this.dir === 'top'
431
- ? targetDim.top - viewport.top
432
- : viewport.bottom - targetDim.bottom) - elOffset,
433
- });
434
- } else if (this.$el.offsetWidth > maxWidth) {
415
+ const dirs = [
416
+ [0, ['x', 'width', 'left', 'right']],
417
+ [1, ['y', 'height', 'top', 'bottom']],
418
+ ];
419
+
420
+ for (const [i, [axis, prop]] of dirs) {
421
+ if (this.axis !== axis && includes([axis, true], this.stretch)) {
422
+ css(this.$el, {
423
+ [prop]: Math.min(
424
+ boundaryOffset[prop],
425
+ viewports[i][prop] - 2 * viewportOffset
426
+ ),
427
+ [`overflow-${axis}`]: 'auto',
428
+ });
429
+ }
430
+ }
431
+
432
+ const maxWidth = viewports[0].width - 2 * viewportOffset;
433
+
434
+ if (this.$el.offsetWidth > maxWidth) {
435
435
  addClass(this.$el, `${this.clsDrop}-stack`);
436
436
  }
437
437
 
438
438
  css(this.$el, 'maxWidth', maxWidth);
439
439
 
440
- this.positionAt(this.$el, target, boundary);
440
+ this.$el.hidden = false;
441
+
442
+ this.positionAt(this.$el, this.target, boundary);
443
+
444
+ for (const [i, [axis, prop, start, end]] of dirs) {
445
+ if (this.axis === axis && includes([axis, true], this.stretch)) {
446
+ const positionOffset = Math.abs(this.getPositionOffset(this.$el));
447
+ const targetOffset = offset(this.target[i]);
448
+ const elOffset = offset(this.$el);
449
+
450
+ css(this.$el, {
451
+ [prop]:
452
+ (targetOffset[start] > elOffset[start]
453
+ ? targetOffset[start] -
454
+ Math.max(
455
+ boundaryOffset[start],
456
+ viewports[i][start] + viewportOffset
457
+ )
458
+ : Math.min(
459
+ boundaryOffset[end],
460
+ viewports[i][end] - viewportOffset
461
+ ) - targetOffset[end]) - positionOffset,
462
+ [`overflow-${axis}`]: 'auto',
463
+ });
464
+
465
+ this.positionAt(this.$el, this.target, boundary);
466
+ }
467
+ }
441
468
  },
442
469
  },
443
470
  };
@@ -45,8 +45,11 @@ export default {
45
45
  let minHeight = '';
46
46
  const box = boxModelAdjust(this.$el, 'height', 'content-box');
47
47
 
48
+ const { body, scrollingElement } = document;
48
49
  const [scrollElement] = scrollParents(this.$el, /auto|scroll/);
49
- const { height: viewportHeight } = offsetViewport(scrollElement);
50
+ const { height: viewportHeight } = offsetViewport(
51
+ scrollElement === body ? scrollingElement : scrollElement
52
+ );
50
53
 
51
54
  if (this.expand) {
52
55
  minHeight = Math.max(
@@ -56,7 +59,6 @@ export default {
56
59
  0
57
60
  );
58
61
  } else {
59
- const { body, scrollingElement } = document;
60
62
  const isScrollingElement =
61
63
  scrollingElement === scrollElement || body === scrollElement;
62
64
 
@@ -2,6 +2,9 @@ import SVG from './svg';
2
2
  import closeIcon from '../../images/components/close-icon.svg';
3
3
  import closeLarge from '../../images/components/close-large.svg';
4
4
  import marker from '../../images/components/marker.svg';
5
+ import navParentIcon from '../../images/components/nav-parent-icon.svg';
6
+ import navParentIconLarge from '../../images/components/nav-parent-icon-large.svg';
7
+ import navbarParentIcon from '../../images/components/navbar-parent-icon.svg';
5
8
  import navbarToggleIcon from '../../images/components/navbar-toggle-icon.svg';
6
9
  import overlayIcon from '../../images/components/overlay-icon.svg';
7
10
  import paginationNext from '../../images/components/pagination-next.svg';
@@ -19,6 +22,7 @@ import {
19
22
  $,
20
23
  addClass,
21
24
  apply,
25
+ closest,
22
26
  css,
23
27
  each,
24
28
  hasClass,
@@ -35,6 +39,9 @@ const icons = {
35
39
  marker,
36
40
  'close-icon': closeIcon,
37
41
  'close-large': closeLarge,
42
+ 'nav-parent-icon': navParentIcon,
43
+ 'nav-parent-icon-large': navParentIconLarge,
44
+ 'navbar-parent-icon': navbarParentIcon,
38
45
  'navbar-toggle-icon': navbarToggleIcon,
39
46
  'overlay-icon': overlayIcon,
40
47
  'pagination-next': paginationNext,
@@ -96,6 +103,15 @@ export const IconComponent = {
96
103
  },
97
104
  };
98
105
 
106
+ export const NavParentIcon = {
107
+ extends: IconComponent,
108
+
109
+ beforeConnect() {
110
+ const icon = this.$props.icon;
111
+ this.icon = closest(this.$el, '.uk-nav-primary') ? `${icon}-large` : icon;
112
+ },
113
+ };
114
+
99
115
  export const Slidenav = {
100
116
  extends: IconComponent,
101
117
 
@@ -29,10 +29,12 @@ export { default as Video } from './video';
29
29
  // Icon components
30
30
  export { Close } from './icon';
31
31
  export { Spinner } from './icon';
32
+ export { NavParentIcon } from './icon';
32
33
  export { Slidenav as SlidenavNext } from './icon';
33
34
  export { Slidenav as SlidenavPrevious } from './icon';
34
35
  export { Search as SearchIcon } from './icon';
35
36
  export { IconComponent as Marker } from './icon';
37
+ export { IconComponent as NavbarParentIcon } from './icon';
36
38
  export { IconComponent as NavbarToggleIcon } from './icon';
37
39
  export { IconComponent as OverlayIcon } from './icon';
38
40
  export { IconComponent as PaginationNext } from './icon';
@@ -1,6 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
- import { attr, getCssVar, toggleClass, unwrap, wrapInner } from 'uikit-util';
3
+ import { attr, css, toggleClass, unwrap, wrapInner } from 'uikit-util';
4
4
  import Resize from '../mixin/resize';
5
5
 
6
6
  export default {
@@ -19,7 +19,7 @@ export default {
19
19
 
20
20
  computed: {
21
21
  fill({ fill }) {
22
- return fill || getCssVar('leader-fill-content');
22
+ return fill || css(this.$el, '--uk-leader-fill-content');
23
23
  },
24
24
  },
25
25