uikit 3.14.4-dev.6a00f7fe6 → 3.14.4-dev.7db3661de

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 (91) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/css/uikit-core-rtl.css +146 -77
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +146 -77
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +143 -78
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +143 -78
  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 +7 -5
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +115 -24
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +115 -24
  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 +4 -5
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +4 -5
  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 +4 -5
  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 +26 -19
  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 +765 -647
  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 +1593 -1458
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/images/{backgrounds/nav-parent-open.svg → components/nav-parent-icon-large.svg} +0 -0
  44. package/src/images/components/nav-parent-icon.svg +3 -0
  45. package/src/images/components/navbar-parent-icon.svg +3 -0
  46. package/src/js/components/filter.js +5 -3
  47. package/src/js/components/sortable.js +2 -3
  48. package/src/js/core/drop.js +7 -0
  49. package/src/js/core/height-viewport.js +14 -6
  50. package/src/js/core/icon.js +16 -0
  51. package/src/js/core/index.js +2 -0
  52. package/src/js/core/leader.js +2 -2
  53. package/src/js/core/navbar.js +44 -15
  54. package/src/js/core/offcanvas.js +1 -47
  55. package/src/js/core/scroll.js +37 -10
  56. package/src/js/core/sticky.js +8 -9
  57. package/src/js/mixin/media.js +4 -5
  58. package/src/js/mixin/modal.js +90 -4
  59. package/src/js/mixin/position.js +27 -11
  60. package/src/js/mixin/slider-drag.js +20 -8
  61. package/src/js/mixin/togglable.js +8 -17
  62. package/src/js/util/dimensions.js +6 -6
  63. package/src/js/util/position.js +1 -0
  64. package/src/js/util/style.js +4 -13
  65. package/src/js/util/viewport.js +20 -36
  66. package/src/less/components/dropdown.less +14 -0
  67. package/src/less/components/leader.less +1 -1
  68. package/src/less/components/nav.less +37 -44
  69. package/src/less/components/navbar.less +108 -24
  70. package/src/less/components/utility.less +21 -4
  71. package/src/less/theme/nav.less +3 -15
  72. package/src/less/theme/navbar.less +7 -7
  73. package/src/scss/components/dropdown.scss +14 -0
  74. package/src/scss/components/leader.scss +1 -1
  75. package/src/scss/components/nav.scss +36 -32
  76. package/src/scss/components/navbar.scss +96 -24
  77. package/src/scss/components/utility.scss +19 -3
  78. package/src/scss/mixins-theme.scss +18 -20
  79. package/src/scss/mixins.scss +16 -15
  80. package/src/scss/theme/nav.scss +3 -15
  81. package/src/scss/theme/navbar.scss +6 -3
  82. package/src/scss/variables-theme.scss +27 -15
  83. package/src/scss/variables.scss +27 -13
  84. package/tests/drop.html +72 -16
  85. package/tests/dropdown.html +103 -16
  86. package/tests/index.html +3 -3
  87. package/tests/nav.html +20 -87
  88. package/tests/navbar.html +2128 -1133
  89. package/tests/offcanvas.html +8 -8
  90. package/tests/utility.html +19 -0
  91. package/src/images/backgrounds/nav-parent-close.svg +0 -3
@@ -2,6 +2,7 @@ import {
2
2
  $,
3
3
  addClass,
4
4
  append,
5
+ apply,
5
6
  attr,
6
7
  css,
7
8
  endsWith,
@@ -15,6 +16,7 @@ import {
15
16
  pointerDown,
16
17
  pointerUp,
17
18
  removeClass,
19
+ scrollParents,
18
20
  toFloat,
19
21
  width,
20
22
  within,
@@ -121,17 +123,26 @@ export default {
121
123
  self: true,
122
124
 
123
125
  handler() {
124
- const docEl = document.documentElement;
126
+ once(
127
+ this.$el,
128
+ 'hide',
129
+ on(document, 'focusin', (e) => {
130
+ if (last(active) === this && !within(e.target, this.$el)) {
131
+ this.$el.focus();
132
+ }
133
+ })
134
+ );
125
135
 
126
- if (width(window) > docEl.clientWidth && this.overlay) {
127
- css(document.body, 'overflowY', 'scroll');
136
+ if (this.overlay) {
137
+ once(this.$el, 'hide', preventOverscroll(this.$el));
138
+ once(this.$el, 'hide', preventBackgroundScroll());
128
139
  }
129
140
 
130
141
  if (this.stack) {
131
142
  css(this.$el, 'zIndex', toFloat(css(this.$el, 'zIndex')) + active.length);
132
143
  }
133
144
 
134
- addClass(docEl, this.clsPage);
145
+ addClass(document.documentElement, this.clsPage);
135
146
 
136
147
  if (this.bgClose) {
137
148
  once(
@@ -273,3 +284,78 @@ function animate({ transitionElement, _toggle }) {
273
284
  function toMs(time) {
274
285
  return time ? (endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000) : 0;
275
286
  }
287
+
288
+ export function preventOverscroll(el) {
289
+ if (CSS.supports('overscroll-behavior', 'contain')) {
290
+ const elements = filterChildren(el, (child) => /auto|scroll/.test(css(child, 'overflow')));
291
+ css(elements, 'overscrollBehavior', 'contain');
292
+ return () => css(elements, 'overscrollBehavior', '');
293
+ }
294
+
295
+ let startClientY;
296
+
297
+ const events = [
298
+ on(
299
+ el,
300
+ 'touchstart',
301
+ ({ targetTouches }) => {
302
+ if (targetTouches.length === 1) {
303
+ startClientY = targetTouches[0].clientY;
304
+ }
305
+ },
306
+ { passive: true }
307
+ ),
308
+
309
+ on(
310
+ el,
311
+ 'touchmove',
312
+ (e) => {
313
+ if (e.targetTouches.length !== 1) {
314
+ return;
315
+ }
316
+
317
+ let [scrollParent] = scrollParents(e.target, /auto|scroll/);
318
+ if (!within(scrollParent, el)) {
319
+ scrollParent = el;
320
+ }
321
+
322
+ const clientY = e.targetTouches[0].clientY - startClientY;
323
+ const { scrollTop, scrollHeight, clientHeight } = scrollParent;
324
+
325
+ if (
326
+ clientHeight >= scrollHeight ||
327
+ (scrollTop === 0 && clientY > 0) ||
328
+ (scrollHeight - scrollTop <= clientHeight && clientY < 0)
329
+ ) {
330
+ e.cancelable && e.preventDefault();
331
+ }
332
+ },
333
+ { passive: false }
334
+ ),
335
+ ];
336
+
337
+ return () => events.forEach((fn) => fn());
338
+ }
339
+
340
+ export function preventBackgroundScroll() {
341
+ const { body, documentElement } = document;
342
+ css(body, {
343
+ overflowY: width(window) > documentElement.clientWidth ? 'scroll' : '',
344
+ touchAction: 'none',
345
+ });
346
+ css(documentElement, 'overflowY', 'hidden');
347
+ return () => {
348
+ css(documentElement, 'overflowY', '');
349
+ css(body, { overflowY: '', touchAction: '' });
350
+ };
351
+ }
352
+
353
+ function filterChildren(el, fn) {
354
+ const children = [];
355
+ apply(el, (node) => {
356
+ if (fn(node)) {
357
+ children.push(node);
358
+ }
359
+ });
360
+ return children;
361
+ }
@@ -2,11 +2,12 @@ import {
2
2
  css,
3
3
  dimensions,
4
4
  flipPosition,
5
- getCssVar,
6
5
  includes,
7
6
  isRtl,
8
7
  positionAt,
8
+ scrollParents,
9
9
  toPx,
10
+ trigger,
10
11
  } from 'uikit-util';
11
12
 
12
13
  export default {
@@ -44,23 +45,38 @@ 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 });
50
54
 
51
- positionAt(element, target, {
52
- attach,
53
- offset,
54
- boundary,
55
- flip: this.flip,
56
- viewportOffset: this.getViewportOffset(element),
57
- });
55
+ const args = [
56
+ element,
57
+ target,
58
+ {
59
+ attach,
60
+ offset,
61
+ boundary,
62
+ flip: this.flip,
63
+ viewportOffset: this.getViewportOffset(element),
64
+ },
65
+ ];
66
+
67
+ trigger(element, 'beforeposition', args);
68
+
69
+ positionAt(...args);
70
+
71
+ // Restore scroll position
72
+ scrollElement.scrollTop = scrollTop;
73
+ scrollElement.scrollLeft = scrollLeft;
58
74
  },
59
75
 
60
76
  getPositionOffset(element) {
61
77
  return (
62
78
  toPx(
63
- this.offset === false ? getCssVar('position-offset', element) : this.offset,
79
+ this.offset === false ? css(element, '--uk-position-offset') : this.offset,
64
80
  this.axis === 'x' ? 'width' : 'height',
65
81
  element
66
82
  ) * (includes(['left', 'top'], this.dir) ? -1 : 1)
@@ -71,14 +87,14 @@ export default {
71
87
  return includes(['center', 'justify', 'stretch'], this.align)
72
88
  ? 0
73
89
  : toPx(
74
- getCssVar('position-shift-offset', element),
90
+ css(element, '--uk-position-shift-offset'),
75
91
  this.axis === 'y' ? 'width' : 'height',
76
92
  element
77
93
  ) * (includes(['left', 'top'], this.align) ? 1 : -1);
78
94
  },
79
95
 
80
96
  getViewportOffset(element) {
81
- return toPx(getCssVar('position-viewport-offset', element));
97
+ return toPx(css(element, '--uk-position-viewport-offset'));
82
98
  },
83
99
  },
84
100
  };
@@ -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;
@@ -10,7 +10,6 @@ import {
10
10
  isFunction,
11
11
  isVisible,
12
12
  noop,
13
- offset,
14
13
  removeClass,
15
14
  scrollParents,
16
15
  startsWith,
@@ -232,7 +231,7 @@ function slideHorizontal({ isToggled, duration, velocity, transition, _toggle },
232
231
 
233
232
  Transition.cancel(el);
234
233
 
235
- const [scrollElement] = scrollParents(el);
234
+ const [scrollElement] = scrollParents(el.offsetParent);
236
235
  css(scrollElement, 'overflowX', 'hidden');
237
236
 
238
237
  if (!isToggled(el)) {
@@ -243,17 +242,11 @@ function slideHorizontal({ isToggled, duration, velocity, transition, _toggle },
243
242
  duration = velocity * width + duration;
244
243
 
245
244
  const percent = visible ? ((width + marginLeft * (right ? -1 : 1)) / width) * 100 : 0;
246
- const offsetEl = offset(el);
247
- const useClipPath = right
248
- ? offsetEl.right < scrollElement.clientWidth
249
- : Math.round(offsetEl.left) > 0;
250
245
 
251
246
  css(el, {
252
- clipPath: useClipPath
253
- ? right
254
- ? `polygon(0 0,${percent}% 0,${percent}% 100%,0 100%)`
255
- : `polygon(${100 - percent}% 0,100% 0,100% 100%,${100 - percent}% 100%)`
256
- : '',
247
+ clipPath: right
248
+ ? `polygon(0 0,${percent}% 0,${percent}% 100%,0 100%)`
249
+ : `polygon(${100 - percent}% 0,100% 0,100% 100%,${100 - percent}% 100%)`,
257
250
  marginLeft: (((100 - percent) * (right ? 1 : -1)) / 100) * width,
258
251
  });
259
252
 
@@ -262,7 +255,7 @@ function slideHorizontal({ isToggled, duration, velocity, transition, _toggle },
262
255
  ? Transition.start(
263
256
  el,
264
257
  {
265
- clipPath: useClipPath ? `polygon(0 0,100% 0,100% 100%,0 100%)` : '',
258
+ clipPath: `polygon(0 0,100% 0,100% 100%,0 100%)`,
266
259
  marginLeft: 0,
267
260
  },
268
261
  duration * (1 - percent / 100),
@@ -271,11 +264,9 @@ function slideHorizontal({ isToggled, duration, velocity, transition, _toggle },
271
264
  : Transition.start(
272
265
  el,
273
266
  {
274
- clipPath: useClipPath
275
- ? right
276
- ? `polygon(0 0,0 0,0 100%,0 100%)`
277
- : `polygon(100% 0,100% 0,100% 100%,100% 100%)`
278
- : '',
267
+ clipPath: right
268
+ ? `polygon(0 0,0 0,0 100%,0 100%)`
269
+ : `polygon(100% 0,100% 0,100% 100%,100% 100%)`,
279
270
  marginLeft: (right ? 1 : -1) * width,
280
271
  },
281
272
  duration * (percent / 100),
@@ -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
@@ -8,6 +8,7 @@ import {
8
8
  isString,
9
9
  isUndefined,
10
10
  memoize,
11
+ startsWith,
11
12
  toNodes,
12
13
  } from './lang';
13
14
 
@@ -62,18 +63,11 @@ export function css(element, property, value, priority = '') {
62
63
  return elements[0];
63
64
  }
64
65
 
65
- const propertyRe = /^\s*(["'])?(.*?)\1\s*$/;
66
- export function getCssVar(name, element = document.documentElement) {
67
- return css(element, `--uk-${name}`).replace(propertyRe, '$2');
68
- }
69
-
70
66
  // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
71
67
  export const propName = memoize((name) => vendorPropName(name));
72
68
 
73
- const cssPrefixes = ['webkit', 'moz'];
74
-
75
69
  function vendorPropName(name) {
76
- if (name[0] === '-') {
70
+ if (startsWith(name, '--')) {
77
71
  return name;
78
72
  }
79
73
 
@@ -85,11 +79,8 @@ function vendorPropName(name) {
85
79
  return name;
86
80
  }
87
81
 
88
- let i = cssPrefixes.length,
89
- prefixedName;
90
-
91
- while (i--) {
92
- prefixedName = `-${cssPrefixes[i]}-${name}`;
82
+ for (const prefix of ['webkit', 'moz']) {
83
+ const prefixedName = `-${prefix}-${name}`;
93
84
  if (prefixedName in style) {
94
85
  return prefixedName;
95
86
  }
@@ -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) {
@@ -151,18 +126,31 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden|clip/, s
151
126
  }
152
127
 
153
128
  export function offsetViewport(scrollElement) {
154
- let viewportElement = getViewport(scrollElement);
129
+ const window = toWindow(scrollElement);
130
+ const {
131
+ document: { documentElement },
132
+ } = window;
133
+ let viewportElement =
134
+ scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
135
+
136
+ const { visualViewport } = window;
137
+ if (isWindow(viewportElement) && visualViewport) {
138
+ let { height, width, scale, pageTop: top, pageLeft: left } = visualViewport;
139
+ height = Math.round(height * scale);
140
+ width = Math.round(width * scale);
141
+ return { height, width, top, left, bottom: top + height, right: left + width };
142
+ }
155
143
 
156
144
  let rect = offset(viewportElement);
157
145
  for (let [prop, dir, start, end] of [
158
146
  ['width', 'x', 'left', 'right'],
159
147
  ['height', 'y', 'top', 'bottom'],
160
148
  ]) {
161
- if (!isWindow(viewportElement)) {
162
- rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
163
- } else {
149
+ if (isWindow(viewportElement)) {
164
150
  // iOS 12 returns <body> as scrollingElement
165
- viewportElement = viewportElement.document.documentElement;
151
+ viewportElement = documentElement;
152
+ } else {
153
+ rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
166
154
  }
167
155
  rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`];
168
156
  rect[end] = rect[prop] + rect[start];
@@ -173,7 +161,3 @@ export function offsetViewport(scrollElement) {
173
161
  function scrollingElement(element) {
174
162
  return toWindow(element).document.scrollingElement;
175
163
  }
176
-
177
- function getViewport(scrollElement) {
178
- return scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
179
- }
@@ -25,6 +25,8 @@
25
25
  @dropdown-background: @global-muted-background;
26
26
  @dropdown-color: @global-color;
27
27
 
28
+ @dropdown-large-padding: 40px;
29
+
28
30
  @dropdown-nav-item-color: @global-muted-color;
29
31
  @dropdown-nav-item-hover-color: @global-color;
30
32
  @dropdown-nav-subtitle-font-size: @global-small-font-size;
@@ -68,6 +70,18 @@
68
70
  /* Show */
69
71
  .uk-dropdown.uk-open { display: block; }
70
72
 
73
+ /*
74
+ * Remove margin from the last-child
75
+ */
76
+
77
+ .uk-dropdown > :last-child { margin-bottom: 0; }
78
+
79
+
80
+ /* Size modifier
81
+ ========================================================================== */
82
+
83
+ .uk-dropdown-large { padding: @dropdown-large-padding; }
84
+
71
85
 
72
86
  /* Stretch modifier
73
87
  ========================================================================== */
@@ -49,7 +49,7 @@
49
49
  * Pass fill character to JS
50
50
  */
51
51
 
52
- :root { --uk-leader-fill-content: '@{leader-fill-content}'; }
52
+ :root { --uk-leader-fill-content: @leader-fill-content; }
53
53
 
54
54
 
55
55
  // Hooks