uikit 3.14.4-dev.4bd89c5ca → 3.14.4-dev.51a1b06ef

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 (78) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/dist/css/uikit-core-rtl.css +73 -101
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +73 -101
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +73 -101
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +73 -101
  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 +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -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 +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 +4 -4
  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 +74 -39
  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 +74 -39
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/images/{backgrounds/nav-parent-close.svg → components/nav-parent-icon-large.svg} +0 -0
  44. package/src/images/{backgrounds/navbar-parent-close.svg → components/nav-parent-icon.svg} +0 -0
  45. package/src/images/{backgrounds/navbar-parent-open.svg → components/navbar-parent-icon.svg} +1 -1
  46. package/src/js/core/height-viewport.js +4 -2
  47. package/src/js/core/icon.js +16 -0
  48. package/src/js/core/index.js +2 -0
  49. package/src/js/core/leader.js +2 -2
  50. package/src/js/core/scroll.js +37 -10
  51. package/src/js/mixin/media.js +4 -5
  52. package/src/js/mixin/position.js +3 -4
  53. package/src/js/util/style.js +4 -13
  54. package/src/js/util/viewport.js +2 -4
  55. package/src/less/components/dropdown.less +6 -0
  56. package/src/less/components/leader.less +1 -1
  57. package/src/less/components/nav.less +15 -40
  58. package/src/less/components/navbar.less +27 -32
  59. package/src/less/components/utility.less +10 -2
  60. package/src/less/theme/nav.less +0 -8
  61. package/src/less/theme/navbar.less +0 -8
  62. package/src/scss/components/dropdown.scss +6 -0
  63. package/src/scss/components/leader.scss +1 -1
  64. package/src/scss/components/nav.scss +14 -28
  65. package/src/scss/components/navbar.scss +27 -20
  66. package/src/scss/components/utility.scss +8 -1
  67. package/src/scss/mixins-theme.scss +4 -27
  68. package/src/scss/mixins.scss +4 -27
  69. package/src/scss/theme/nav.scss +0 -8
  70. package/src/scss/theme/navbar.scss +0 -8
  71. package/src/scss/variables-theme.scss +4 -13
  72. package/src/scss/variables.scss +4 -13
  73. package/tests/index.html +4 -4
  74. package/tests/nav.html +22 -89
  75. package/tests/navbar.html +20 -31
  76. package/tests/offcanvas.html +16 -16
  77. package/tests/utility.html +19 -0
  78. 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.4bd89c5ca",
5
+ "version": "3.14.4-dev.51a1b06ef",
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>
@@ -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
 
@@ -1,4 +1,4 @@
1
- import { $, scrollIntoView, trigger } from 'uikit-util';
1
+ import { $, off, on, scrollIntoView, trigger, within } from 'uikit-util';
2
2
 
3
3
  export default {
4
4
  props: {
@@ -9,6 +9,14 @@ export default {
9
9
  offset: 0,
10
10
  },
11
11
 
12
+ connected() {
13
+ registerClick(this);
14
+ },
15
+
16
+ disconnected() {
17
+ unregisterClick(this);
18
+ },
19
+
12
20
  methods: {
13
21
  async scrollTo(el) {
14
22
  el = (el && $(el)) || document.body;
@@ -19,18 +27,37 @@ export default {
19
27
  }
20
28
  },
21
29
  },
30
+ };
22
31
 
23
- events: {
24
- click(e) {
25
- if (e.defaultPrevented) {
26
- return;
27
- }
32
+ const components = new Set();
33
+ function registerClick(cmp) {
34
+ if (!components.size) {
35
+ on(document, 'click', clickHandler);
36
+ }
37
+
38
+ components.add(cmp);
39
+ }
28
40
 
41
+ function unregisterClick(cmp) {
42
+ components.delete(cmp);
43
+
44
+ if (!components.length) {
45
+ off(document, 'click', clickHandler);
46
+ }
47
+ }
48
+
49
+ function clickHandler(e) {
50
+ if (e.defaultPrevented) {
51
+ return;
52
+ }
53
+
54
+ for (const component of components) {
55
+ if (within(e.target, component.$el)) {
29
56
  e.preventDefault();
30
- this.scrollTo(getTargetElement(this.$el));
31
- },
32
- },
33
- };
57
+ component.scrollTo(getTargetElement(component.$el));
58
+ }
59
+ }
60
+ }
34
61
 
35
62
  export function getTargetElement(el) {
36
63
  return document.getElementById(decodeURIComponent(el.hash).substring(1));
@@ -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,7 +2,6 @@ import {
2
2
  css,
3
3
  dimensions,
4
4
  flipPosition,
5
- getCssVar,
6
5
  includes,
7
6
  isRtl,
8
7
  positionAt,
@@ -77,7 +76,7 @@ export default {
77
76
  getPositionOffset(element) {
78
77
  return (
79
78
  toPx(
80
- this.offset === false ? getCssVar('position-offset', element) : this.offset,
79
+ this.offset === false ? css(element, '--uk-position-offset') : this.offset,
81
80
  this.axis === 'x' ? 'width' : 'height',
82
81
  element
83
82
  ) * (includes(['left', 'top'], this.dir) ? -1 : 1)
@@ -88,14 +87,14 @@ export default {
88
87
  return includes(['center', 'justify', 'stretch'], this.align)
89
88
  ? 0
90
89
  : toPx(
91
- getCssVar('position-shift-offset', element),
90
+ css(element, '--uk-position-shift-offset'),
92
91
  this.axis === 'y' ? 'width' : 'height',
93
92
  element
94
93
  ) * (includes(['left', 'top'], this.align) ? 1 : -1);
95
94
  },
96
95
 
97
96
  getViewportOffset(element) {
98
- return toPx(getCssVar('position-viewport-offset', element));
97
+ return toPx(css(element, '--uk-position-viewport-offset'));
99
98
  },
100
99
  },
101
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) {
@@ -70,6 +70,12 @@
70
70
  /* Show */
71
71
  .uk-dropdown.uk-open { display: block; }
72
72
 
73
+ /*
74
+ * Remove margin from the last-child
75
+ */
76
+
77
+ .uk-dropdown > :last-child { margin-bottom: 0; }
78
+
73
79
 
74
80
  /* Size modifier
75
81
  ========================================================================== */
@@ -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
@@ -149,21 +142,12 @@ ul.uk-nav-sub {
149
142
  .uk-nav-sub a { padding: @nav-sublist-item-padding-vertical 0; }
150
143
 
151
144
 
152
- /* Parent icon modifier
145
+ /* Parent icon
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
@@ -351,13 +335,18 @@ ul.uk-nav-sub {
351
335
  .uk-nav-center .uk-nav-sub,
352
336
  .uk-nav-center .uk-nav-sub ul { padding-left: 0; }
353
337
 
354
- /* Parent icon modifier */
355
- .uk-nav-center.uk-nav-parent-icon > .uk-parent > a::after { margin-left: 0; }
338
+ /* Parent icon */
339
+ .uk-nav-center .uk-nav-parent-icon { margin-left: 0; }
356
340
 
357
341
 
358
342
  /* Style modifier
359
343
  ========================================================================== */
360
344
 
345
+ /*
346
+ * Divider
347
+ * Naming is in plural to prevent conflicts with divider sub object.
348
+ */
349
+
361
350
  .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
362
351
  margin-top: @nav-dividers-margin-top;
363
352
  padding-top: @nav-dividers-margin-top;
@@ -372,7 +361,6 @@ ul.uk-nav-sub {
372
361
  .hook-nav-misc();
373
362
 
374
363
  .hook-nav-sub() {}
375
- .hook-nav-parent-icon() {}
376
364
  .hook-nav-header() {}
377
365
  .hook-nav-divider() {}
378
366
  .hook-nav-default() {}
@@ -396,7 +384,6 @@ ul.uk-nav-sub {
396
384
  // Inverse
397
385
  // ========================================================================
398
386
 
399
- @inverse-nav-parent-icon-color: @inverse-global-color;
400
387
  @inverse-nav-default-item-color: @inverse-global-muted-color;
401
388
  @inverse-nav-default-item-hover-color: @inverse-global-color;
402
389
  @inverse-nav-default-item-active-color: @inverse-global-emphasis-color;
@@ -419,17 +406,6 @@ ul.uk-nav-sub {
419
406
 
420
407
  .hook-inverse() {
421
408
 
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
409
  //
434
410
  // Default
435
411
  //
@@ -506,12 +482,11 @@ ul.uk-nav-sub {
506
482
 
507
483
  .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
508
484
  border-top-color: @inverse-nav-dividers-border;
509
- .hook-nav-dividers();
485
+ .hook-inverse-nav-dividers();
510
486
  }
511
487
 
512
488
  }
513
489
 
514
- .hook-inverse-nav-parent-icon() {}
515
490
  .hook-inverse-nav-default-item() {}
516
491
  .hook-inverse-nav-default-item-hover() {}
517
492
  .hook-inverse-nav-default-item-active() {}
@@ -10,6 +10,7 @@
10
10
  // `uk-navbar-center-left`
11
11
  // `uk-navbar-center-right`
12
12
  // `uk-navbar-nav`
13
+ // `uk-navbar-parent-icon`
13
14
  // `uk-navbar-item`
14
15
  // `uk-navbar-toggle`
15
16
  // `uk-navbar-subtitle`
@@ -51,10 +52,7 @@
51
52
  @navbar-nav-item-onclick-color: @global-emphasis-color;
52
53
  @navbar-nav-item-active-color: @global-emphasis-color;
53
54
 
54
- @navbar-parent-icon-width: 12px;
55
- @navbar-parent-icon-height: 12px;
56
55
  @navbar-parent-icon-margin-left: 4px;
57
- @navbar-parent-icon-color: @navbar-nav-item-color;
58
56
 
59
57
  @navbar-item-padding-horizontal: 15px;
60
58
  @navbar-item-color: @global-color;
@@ -89,6 +87,9 @@
89
87
  @navbar-dropdown-dropbar-padding-top: @navbar-dropdown-padding;
90
88
  @navbar-dropdown-dropbar-padding-bottom: @navbar-dropdown-dropbar-padding-top;
91
89
  @navbar-dropdown-dropbar-padding-horizontal: @navbar-nav-item-padding-horizontal;
90
+ @navbar-dropdown-dropbar-viewport-margin: 15px;
91
+ @navbar-dropdown-dropbar-viewport-margin-s: @global-gutter;
92
+ @navbar-dropdown-dropbar-viewport-margin-m: @global-medium-gutter;
92
93
 
93
94
  @navbar-dropdown-nav-item-color: @global-muted-color;
94
95
  @navbar-dropdown-nav-item-hover-color: @global-color;
@@ -104,9 +105,6 @@
104
105
  @navbar-dropbar-background: @navbar-dropdown-background;
105
106
  @navbar-dropbar-z-index: @global-z-index - 20;
106
107
 
107
- @internal-navbar-parent-close-image: "../../images/backgrounds/navbar-parent-close.svg";
108
- @internal-navbar-parent-open-image: "../../images/backgrounds/navbar-parent-open.svg";
109
-
110
108
 
111
109
  /* ========================================================================
112
110
  Component: Navbar
@@ -289,19 +287,9 @@
289
287
  /* Parent icon modifier
290
288
  ========================================================================== */
291
289
 
292
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent > a::after {
293
- content: "";
294
- width: @navbar-parent-icon-width;
295
- height: @navbar-parent-icon-height;
296
- margin-left: @navbar-parent-icon-margin-left;
297
- .svg-fill(@internal-navbar-parent-close-image, "#000", @navbar-parent-icon-color);
298
- background-repeat: no-repeat;
299
- background-position: 50% 50%;
300
- .hook-nav-parent-icon();
301
- }
290
+ .uk-navbar-parent-icon { margin-left: @navbar-parent-icon-margin-left; }
302
291
 
303
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent:hover > a::after,
304
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent > a[aria-expanded="true"]::after { .svg-fill(@internal-navbar-parent-open-image, "#000", @navbar-parent-icon-color); }
292
+ .uk-navbar-nav > li > a[aria-expanded="true"] .uk-navbar-parent-icon { transform: rotate(180deg); }
305
293
 
306
294
 
307
295
  /* Item
@@ -421,6 +409,12 @@
421
409
  /* Show */
422
410
  .uk-navbar-dropdown.uk-open { display: block; }
423
411
 
412
+ /*
413
+ * Remove margin from the last-child
414
+ */
415
+
416
+ .uk-navbar-dropdown > :last-child { margin-bottom: 0; }
417
+
424
418
  // Color Mode
425
419
  .uk-navbar-dropdown:extend(.uk-light all) when (@navbar-dropdown-color-mode = light) {}
426
420
  .uk-navbar-dropdown:extend(.uk-dark all) when (@navbar-dropdown-color-mode = dark) {}
@@ -512,9 +506,24 @@
512
506
  /* 3 */
513
507
  padding: @navbar-dropdown-dropbar-padding-top @navbar-dropdown-dropbar-padding-horizontal @navbar-dropdown-dropbar-padding-bottom @navbar-dropdown-dropbar-padding-horizontal;
514
508
  --uk-position-shift-offset: 0;
509
+ --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin;
515
510
  .hook-navbar-dropdown-dropbar();
516
511
  }
517
512
 
513
+ /* Phone landscape and bigger */
514
+ @media (min-width: @breakpoint-small) {
515
+
516
+ .uk-navbar-dropdown-dropbar { --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin-s; }
517
+
518
+ }
519
+
520
+ /* Tablet landscape and bigger */
521
+ @media (min-width: @breakpoint-medium) {
522
+
523
+ .uk-navbar-dropdown-dropbar { --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin-m; }
524
+
525
+ }
526
+
518
527
 
519
528
  /* Dropdown Nav
520
529
  * Adopts `uk-nav`
@@ -637,7 +646,6 @@
637
646
  @inverse-navbar-nav-item-hover-color: @inverse-global-color;
638
647
  @inverse-navbar-nav-item-onclick-color: @inverse-global-emphasis-color;
639
648
  @inverse-navbar-nav-item-active-color: @inverse-global-emphasis-color;
640
- @inverse-navbar-parent-icon-color: @inverse-navbar-nav-item-color;
641
649
  @inverse-navbar-item-color: @inverse-global-color;
642
650
  @inverse-navbar-toggle-color: @inverse-global-muted-color;
643
651
  @inverse-navbar-toggle-hover-color: @inverse-global-color;
@@ -669,18 +677,6 @@
669
677
  .hook-inverse-navbar-nav-item-active();
670
678
  }
671
679
 
672
- //
673
- // Parent icon modifier
674
- //
675
-
676
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent > a::after {
677
- .svg-fill(@internal-navbar-parent-close-image, "#000", @inverse-navbar-parent-icon-color);
678
- .hook-inverse-nav-parent-icon();
679
- }
680
-
681
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent:hover > a::after,
682
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent > a[aria-expanded="true"]::after { .svg-fill(@internal-navbar-parent-open-image, "#000", @inverse-navbar-parent-icon-color); }
683
-
684
680
  //
685
681
  // Item
686
682
  //
@@ -711,7 +707,6 @@
711
707
  .hook-inverse-navbar-nav-item-hover() {}
712
708
  .hook-inverse-navbar-nav-item-onclick() {}
713
709
  .hook-inverse-navbar-nav-item-active() {}
714
- .hook-inverse-nav-parent-icon() {}
715
710
  .hook-inverse-navbar-item() {}
716
711
  .hook-inverse-navbar-toggle() {}
717
712
  .hook-inverse-navbar-toggle-hover() {}
@@ -147,6 +147,13 @@
147
147
  .uk-overflow-auto > :last-child { margin-bottom: 0; }
148
148
 
149
149
 
150
+ /* Box Sizing
151
+ ========================================================================== */
152
+
153
+ .uk-box-sizing-content { box-sizing: content-box; }
154
+ .uk-box-sizing-border { box-sizing: border-box; }
155
+
156
+
150
157
  /* Resize
151
158
  ========================================================================== */
152
159
 
@@ -413,7 +420,7 @@
413
420
  .hook-logo-hover();
414
421
  }
415
422
 
416
- .uk-logo > :where(img, svg, video) { display: block; }
423
+ .uk-logo :where(img, svg, video) { display: block; }
417
424
 
418
425
  .uk-logo-inverse { display: none; }
419
426
 
@@ -525,7 +532,8 @@
525
532
  .hook-inverse-logo-hover();
526
533
  }
527
534
 
528
- .uk-logo > :not(.uk-logo-inverse):not(:only-of-type) { display: none; }
535
+ .uk-logo > picture:not(:only-of-type) > :not(.uk-logo-inverse),
536
+ .uk-logo > :not(picture):not(.uk-logo-inverse):not(:only-of-type) { display: none; }
529
537
  .uk-logo-inverse { display: block; }
530
538
 
531
539
  }
@@ -18,12 +18,6 @@
18
18
  .hook-nav-sub() {}
19
19
 
20
20
 
21
- // Parent icon modifier
22
- // ========================================================================
23
-
24
- .hook-nav-parent-icon() {}
25
-
26
-
27
21
  // Header
28
22
  // ========================================================================
29
23
 
@@ -87,8 +81,6 @@
87
81
  // Inverse
88
82
  // ========================================================================
89
83
 
90
- .hook-inverse-nav-parent-icon() {}
91
-
92
84
  .hook-inverse-nav-default-item() {}
93
85
  .hook-inverse-nav-default-item-hover() {}
94
86
  .hook-inverse-nav-default-item-active() {}
@@ -68,12 +68,6 @@
68
68
  .hook-navbar-nav-item-active() {}
69
69
 
70
70
 
71
- // Parent icon modifier
72
- // ========================================================================
73
-
74
- .hook-nav-parent-icon() {}
75
-
76
-
77
71
  // Item
78
72
  // ========================================================================
79
73
 
@@ -181,8 +175,6 @@
181
175
  .hook-inverse-navbar-nav-item-onclick() {}
182
176
  .hook-inverse-navbar-nav-item-active() {}
183
177
 
184
- .hook-inverse-nav-parent-icon() {}
185
-
186
178
  .hook-inverse-navbar-item() {}
187
179
 
188
180
  .hook-inverse-navbar-toggle() {}