uikit 3.14.4-dev.e3664d0d2 → 3.14.4-dev.fea9fd466

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 (82) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/css/uikit-core-rtl.css +108 -61
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +108 -61
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +108 -62
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +108 -62
  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 +6 -14
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +6 -14
  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 +1 -1
  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 +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 +19 -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 +100 -61
  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 +106 -65
  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/core/height-viewport.js +6 -2
  48. package/src/js/core/icon.js +16 -0
  49. package/src/js/core/index.js +2 -0
  50. package/src/js/core/leader.js +2 -2
  51. package/src/js/core/navbar.js +44 -15
  52. package/src/js/mixin/media.js +4 -5
  53. package/src/js/mixin/position.js +19 -11
  54. package/src/js/mixin/togglable.js +8 -17
  55. package/src/js/util/style.js +4 -13
  56. package/src/js/util/viewport.js +2 -4
  57. package/src/less/components/dropdown.less +14 -0
  58. package/src/less/components/leader.less +1 -1
  59. package/src/less/components/nav.less +7 -37
  60. package/src/less/components/navbar.less +101 -13
  61. package/src/less/components/utility.less +10 -2
  62. package/src/less/theme/nav.less +0 -8
  63. package/src/less/theme/navbar.less +4 -6
  64. package/src/scss/components/dropdown.scss +14 -0
  65. package/src/scss/components/leader.scss +1 -1
  66. package/src/scss/components/nav.scss +7 -26
  67. package/src/scss/components/navbar.scss +89 -13
  68. package/src/scss/components/utility.scss +8 -1
  69. package/src/scss/mixins-theme.scss +15 -18
  70. package/src/scss/mixins.scss +14 -14
  71. package/src/scss/theme/nav.scss +0 -8
  72. package/src/scss/theme/navbar.scss +3 -2
  73. package/src/scss/variables-theme.scss +17 -11
  74. package/src/scss/variables.scss +17 -10
  75. package/tests/drop.html +66 -16
  76. package/tests/dropdown.html +103 -16
  77. package/tests/index.html +3 -3
  78. package/tests/nav.html +20 -87
  79. package/tests/navbar.html +283 -62
  80. package/tests/offcanvas.html +8 -8
  81. package/tests/utility.html +19 -0
  82. package/src/images/backgrounds/nav-parent-close.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.e3664d0d2",
5
+ "version": "3.14.4-dev.fea9fd466",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -0,0 +1,3 @@
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="1 3.5 6 8.5 11 3.5"/>
3
+ </svg>
@@ -0,0 +1,3 @@
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="1 3.5 6 8.5 11 3.5"/>
3
+ </svg>
@@ -103,7 +103,7 @@ export default {
103
103
  });
104
104
  },
105
105
 
106
- setState(state, animate = true) {
106
+ async setState(state, animate = true) {
107
107
  state = { filter: { '': '' }, sort: [], ...state };
108
108
 
109
109
  trigger(this.$el, 'beforeFilter', [this, state]);
@@ -112,7 +112,7 @@ export default {
112
112
  toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state))
113
113
  );
114
114
 
115
- Promise.all(
115
+ await Promise.all(
116
116
  $$(this.target, this.$el).map((target) => {
117
117
  const filterFn = () => {
118
118
  applyState(state, target, getChildren(target));
@@ -120,7 +120,9 @@ export default {
120
120
  };
121
121
  return animate ? this.animate(filterFn, target) : filterFn();
122
122
  })
123
- ).then(() => trigger(this.$el, 'afterFilter', [this]));
123
+ );
124
+
125
+ trigger(this.$el, 'afterFilter', [this]);
124
126
  },
125
127
 
126
128
  updateState() {
@@ -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,8 @@ export default {
56
59
  0
57
60
  );
58
61
  } else {
59
- const isScrollingElement = document.scrollingElement === scrollElement;
62
+ const isScrollingElement =
63
+ scrollingElement === scrollElement || body === scrollElement;
60
64
 
61
65
  // on mobile devices (iOS and Android) window.innerHeight !== 100vh
62
66
  minHeight = `calc(${isScrollingElement ? '100vh' : `${viewportHeight}px`}`;
@@ -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
 
@@ -124,7 +124,6 @@ export default {
124
124
  ...this.$props,
125
125
  boundary: this.boundary,
126
126
  pos: this.pos,
127
- offset: this.dropbar || this.offset,
128
127
  }
129
128
  );
130
129
  },
@@ -285,8 +284,8 @@ export default {
285
284
  return this.dropbar;
286
285
  },
287
286
 
288
- handler(_, { $el, align }) {
289
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
287
+ handler({ target }) {
288
+ if (!this.isDropbarDrop(target)) {
290
289
  return;
291
290
  }
292
291
 
@@ -294,7 +293,7 @@ export default {
294
293
  after(this.dropbarAnchor || this.$el, this.dropbar);
295
294
  }
296
295
 
297
- addClass($el, `${this.clsDrop}-dropbar`);
296
+ addClass(target, `${this.clsDrop}-dropbar`);
298
297
  },
299
298
  },
300
299
 
@@ -309,22 +308,47 @@ export default {
309
308
  return this.dropbar;
310
309
  },
311
310
 
312
- handler(_, { $el, align }) {
313
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
311
+ handler({ target }) {
312
+ if (!this.isDropbarDrop(target)) {
314
313
  return;
315
314
  }
316
315
 
317
- this._observer = observeResize($el, () =>
316
+ this._observer = observeResize(target, () =>
318
317
  this.transitionTo(
319
- offset($el).bottom -
318
+ offset(target).bottom -
320
319
  offset(this.dropbar).top +
321
- toFloat(css($el, 'marginBottom')),
322
- $el
320
+ toFloat(css(target, 'marginBottom')),
321
+ target
323
322
  )
324
323
  );
325
324
  },
326
325
  },
327
326
 
327
+ {
328
+ name: 'beforeposition',
329
+
330
+ el() {
331
+ return this.dropContainer;
332
+ },
333
+
334
+ filter() {
335
+ return this.dropbar;
336
+ },
337
+
338
+ handler(e, element, target, options) {
339
+ if (!this.isDropbarDrop(element)) {
340
+ return;
341
+ }
342
+
343
+ const dropbarOffset = offset(this.dropbar);
344
+
345
+ css(element, 'maxWidth', dropbarOffset.width - options.viewportOffset * 2);
346
+
347
+ options.offset[1] = dropbarOffset.top - offset(target).bottom;
348
+ options.viewportOffset += dropbarOffset.left;
349
+ },
350
+ },
351
+
328
352
  {
329
353
  name: 'beforehide',
330
354
 
@@ -336,12 +360,12 @@ export default {
336
360
  return this.dropbar;
337
361
  },
338
362
 
339
- handler(e, { $el }) {
363
+ handler(e) {
340
364
  const active = this.getActive();
341
365
 
342
366
  if (
343
367
  matches(this.dropbar, ':hover') &&
344
- active?.$el === $el &&
368
+ active?.$el === e.target &&
345
369
  !this.toggles.some((el) => active.target !== el && matches(el, ':focus'))
346
370
  ) {
347
371
  e.preventDefault();
@@ -360,8 +384,8 @@ export default {
360
384
  return this.dropbar;
361
385
  },
362
386
 
363
- handler(_, { $el, align }) {
364
- if (!hasClass($el, this.clsDrop) || align === 'stretch') {
387
+ handler({ target }) {
388
+ if (!this.isDropbarDrop(target)) {
365
389
  return;
366
390
  }
367
391
 
@@ -369,7 +393,7 @@ export default {
369
393
 
370
394
  const active = this.getActive();
371
395
 
372
- if (!active || active?.$el === $el) {
396
+ if (!active || active?.$el === target) {
373
397
  this.transitionTo(0);
374
398
  }
375
399
  },
@@ -409,6 +433,11 @@ export default {
409
433
  getDropdown(el) {
410
434
  return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');
411
435
  },
436
+
437
+ isDropbarDrop(el) {
438
+ const drop = this.getDropdown(el);
439
+ return drop && hasClass(el, this.clsDrop) && drop.align !== 'stretch';
440
+ },
412
441
  },
413
442
  };
414
443
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createEvent,
3
- getCssVar,
3
+ css,
4
4
  isNumeric,
5
5
  isString,
6
6
  on,
@@ -19,7 +19,7 @@ export default {
19
19
  },
20
20
 
21
21
  connected() {
22
- const media = toMedia(this.media);
22
+ const media = toMedia(this.media, this.$el);
23
23
  this.matchMedia = true;
24
24
  if (media) {
25
25
  this.mediaObj = window.matchMedia(media);
@@ -40,11 +40,10 @@ export default {
40
40
  },
41
41
  };
42
42
 
43
- function toMedia(value) {
43
+ function toMedia(value, element) {
44
44
  if (isString(value)) {
45
45
  if (startsWith(value, '@')) {
46
- const name = `breakpoint-${value.substr(1)}`;
47
- value = toFloat(getCssVar(name));
46
+ value = toFloat(css(element, `--uk-breakpoint-${value.substr(1)}`));
48
47
  } else if (isNaN(value)) {
49
48
  return value;
50
49
  }
@@ -2,12 +2,12 @@ import {
2
2
  css,
3
3
  dimensions,
4
4
  flipPosition,
5
- getCssVar,
6
5
  includes,
7
6
  isRtl,
8
7
  positionAt,
9
8
  scrollParents,
10
9
  toPx,
10
+ trigger,
11
11
  } from 'uikit-util';
12
12
 
13
13
  export default {
@@ -52,13 +52,21 @@ export default {
52
52
  const elDim = dimensions(element);
53
53
  css(element, { top: -elDim.height, left: -elDim.width });
54
54
 
55
- positionAt(element, target, {
56
- attach,
57
- offset,
58
- boundary,
59
- flip: this.flip,
60
- viewportOffset: this.getViewportOffset(element),
61
- });
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);
62
70
 
63
71
  // Restore scroll position
64
72
  scrollElement.scrollTop = scrollTop;
@@ -68,7 +76,7 @@ export default {
68
76
  getPositionOffset(element) {
69
77
  return (
70
78
  toPx(
71
- this.offset === false ? getCssVar('position-offset', element) : this.offset,
79
+ this.offset === false ? css(element, '--uk-position-offset') : this.offset,
72
80
  this.axis === 'x' ? 'width' : 'height',
73
81
  element
74
82
  ) * (includes(['left', 'top'], this.dir) ? -1 : 1)
@@ -79,14 +87,14 @@ export default {
79
87
  return includes(['center', 'justify', 'stretch'], this.align)
80
88
  ? 0
81
89
  : toPx(
82
- getCssVar('position-shift-offset', element),
90
+ css(element, '--uk-position-shift-offset'),
83
91
  this.axis === 'y' ? 'width' : 'height',
84
92
  element
85
93
  ) * (includes(['left', 'top'], this.align) ? 1 : -1);
86
94
  },
87
95
 
88
96
  getViewportOffset(element) {
89
- return toPx(getCssVar('position-viewport-offset', element));
97
+ return toPx(css(element, '--uk-position-viewport-offset'));
90
98
  },
91
99
  },
92
100
  };
@@ -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),
@@ -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
  }
@@ -128,12 +128,10 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden|clip/, s
128
128
  export function offsetViewport(scrollElement) {
129
129
  const window = toWindow(scrollElement);
130
130
  const {
131
- document: { body, documentElement },
131
+ document: { documentElement },
132
132
  } = window;
133
133
  let viewportElement =
134
- scrollElement === scrollingElement(scrollElement) || scrollElement === body
135
- ? window
136
- : scrollElement;
134
+ scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
137
135
 
138
136
  const { visualViewport } = window;
139
137
  if (isWindow(viewportElement) && visualViewport) {
@@ -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
@@ -3,13 +3,13 @@
3
3
  //
4
4
  // Component: `uk-nav`
5
5
  //
6
- // Sub-objects: `uk-nav-header`
6
+ // Sub-objects: `uk-nav-parent-icon`
7
+ // `uk-nav-header`
7
8
  // `uk-nav-divider`
8
9
  // `uk-nav-subtitle`
9
10
  // `uk-nav-sub`
10
11
  //
11
- // Modifiers: `uk-nav-parent-icon`
12
- // `uk-nav-default`
12
+ // Modifiers: `uk-nav-default`
13
13
  // `uk-nav-primary`
14
14
  // `uk-nav-center`,
15
15
  // `uk-nav-divider`
@@ -33,10 +33,6 @@
33
33
  @nav-sublist-deeper-padding-left: 15px;
34
34
  @nav-sublist-item-padding-vertical: 2px;
35
35
 
36
- @nav-parent-icon-width: (@global-line-height * 1em);
37
- @nav-parent-icon-height: @nav-parent-icon-width;
38
- @nav-parent-icon-color: @global-color;
39
-
40
36
  @nav-header-padding-vertical: @nav-item-padding-vertical;
41
37
  @nav-header-padding-horizontal: @nav-item-padding-horizontal;
42
38
  @nav-header-font-size: @global-small-font-size;
@@ -76,13 +72,10 @@
76
72
  @nav-primary-sublist-item-hover-color: @global-color;
77
73
  @nav-primary-sublist-item-active-color: @global-emphasis-color;
78
74
 
79
- @nav-dividers-margin-top: 0;
75
+ @nav-dividers-margin-top: 5px;
80
76
  @nav-dividers-border-width: @global-border-width;
81
77
  @nav-dividers-border: @global-border;
82
78
 
83
- @internal-nav-parent-close-image: "../../images/backgrounds/nav-parent-close.svg";
84
- @internal-nav-parent-open-image: "../../images/backgrounds/nav-parent-open.svg";
85
-
86
79
 
87
80
  /* ========================================================================
88
81
  Component: Nav
@@ -152,18 +145,9 @@ ul.uk-nav-sub {
152
145
  /* Parent icon modifier
153
146
  ========================================================================== */
154
147
 
155
- .uk-nav-parent-icon > .uk-parent > a::after {
156
- content: "";
157
- width: @nav-parent-icon-width;
158
- height: @nav-parent-icon-height;
159
- margin-left: auto;
160
- .svg-fill(@internal-nav-parent-close-image, "#000", @nav-parent-icon-color);
161
- background-repeat: no-repeat;
162
- background-position: 50% 50%;
163
- .hook-nav-parent-icon();
164
- }
148
+ .uk-nav-parent-icon { margin-left: auto; }
165
149
 
166
- .uk-nav-parent-icon > .uk-parent.uk-open > a::after { .svg-fill(@internal-nav-parent-open-image, "#000", @nav-parent-icon-color); }
150
+ .uk-nav > li > a[aria-expanded="true"] .uk-nav-parent-icon { transform: rotate(180deg); }
167
151
 
168
152
 
169
153
  /* Header
@@ -352,7 +336,7 @@ ul.uk-nav-sub {
352
336
  .uk-nav-center .uk-nav-sub ul { padding-left: 0; }
353
337
 
354
338
  /* Parent icon modifier */
355
- .uk-nav-center.uk-nav-parent-icon > .uk-parent > a::after { margin-left: 0; }
339
+ .uk-nav-center .uk-nav-parent-icon { margin-left: 0; }
356
340
 
357
341
 
358
342
  /* Style modifier
@@ -372,7 +356,6 @@ ul.uk-nav-sub {
372
356
  .hook-nav-misc();
373
357
 
374
358
  .hook-nav-sub() {}
375
- .hook-nav-parent-icon() {}
376
359
  .hook-nav-header() {}
377
360
  .hook-nav-divider() {}
378
361
  .hook-nav-default() {}
@@ -396,7 +379,6 @@ ul.uk-nav-sub {
396
379
  // Inverse
397
380
  // ========================================================================
398
381
 
399
- @inverse-nav-parent-icon-color: @inverse-global-color;
400
382
  @inverse-nav-default-item-color: @inverse-global-muted-color;
401
383
  @inverse-nav-default-item-hover-color: @inverse-global-color;
402
384
  @inverse-nav-default-item-active-color: @inverse-global-emphasis-color;
@@ -419,17 +401,6 @@ ul.uk-nav-sub {
419
401
 
420
402
  .hook-inverse() {
421
403
 
422
- //
423
- // Parent icon modifier
424
- //
425
-
426
- .uk-nav-parent-icon > .uk-parent > a::after {
427
- .svg-fill(@internal-nav-parent-close-image, "#000", @inverse-nav-parent-icon-color);
428
- .hook-inverse-nav-parent-icon();
429
- }
430
-
431
- .uk-nav-parent-icon > .uk-parent.uk-open > a::after { .svg-fill(@internal-nav-parent-open-image, "#000", @inverse-nav-parent-icon-color); }
432
-
433
404
  //
434
405
  // Default
435
406
  //
@@ -511,7 +482,6 @@ ul.uk-nav-sub {
511
482
 
512
483
  }
513
484
 
514
- .hook-inverse-nav-parent-icon() {}
515
485
  .hook-inverse-nav-default-item() {}
516
486
  .hook-inverse-nav-default-item-hover() {}
517
487
  .hook-inverse-nav-default-item-active() {}