uikit 3.14.4-dev.f2e3be255 → 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 (77) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/dist/css/uikit-core-rtl.css +84 -64
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +84 -64
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +83 -63
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +83 -63
  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 +9 -17
  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 +45 -43
  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 +51 -47
  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/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/mixin/media.js +4 -5
  52. package/src/js/mixin/position.js +3 -4
  53. package/src/js/mixin/togglable.js +8 -17
  54. package/src/js/util/style.js +4 -13
  55. package/src/js/util/viewport.js +2 -4
  56. package/src/less/components/dropdown.less +6 -0
  57. package/src/less/components/leader.less +1 -1
  58. package/src/less/components/nav.less +7 -37
  59. package/src/less/components/navbar.less +70 -21
  60. package/src/less/components/utility.less +10 -2
  61. package/src/less/theme/nav.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 +7 -26
  65. package/src/scss/components/navbar.scss +58 -21
  66. package/src/scss/components/utility.scss +8 -1
  67. package/src/scss/mixins-theme.scss +14 -14
  68. package/src/scss/mixins.scss +14 -14
  69. package/src/scss/theme/nav.scss +0 -8
  70. package/src/scss/variables-theme.scss +9 -13
  71. package/src/scss/variables.scss +9 -13
  72. package/tests/index.html +3 -3
  73. package/tests/nav.html +20 -87
  74. package/tests/navbar.html +15 -26
  75. package/tests/offcanvas.html +8 -8
  76. package/tests/utility.html +19 -0
  77. 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.f2e3be255",
5
+ "version": "3.14.4-dev.fea9fd466",
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>
@@ -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
 
@@ -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
  };
@@ -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) {
@@ -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
@@ -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() {}
@@ -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,9 +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
- @navbar-parent-icon-color: @navbar-nav-item-color;
55
+ @navbar-parent-icon-margin-left: 4px;
57
56
 
58
57
  @navbar-item-padding-horizontal: 15px;
59
58
  @navbar-item-color: @global-color;
@@ -75,16 +74,22 @@
75
74
  @navbar-dropdown-grid-gutter-horizontal: @global-gutter;
76
75
  @navbar-dropdown-grid-gutter-vertical: @navbar-dropdown-grid-gutter-horizontal;
77
76
 
77
+ @navbar-dropdown-large-shift-margin: 0;
78
78
  @navbar-dropdown-large-padding: 40px;
79
79
 
80
80
  @navbar-dropdown-stretch-padding-top: 15px;
81
81
  @navbar-dropdown-stretch-padding-bottom: @navbar-dropdown-stretch-padding-top;
82
82
  @navbar-dropdown-stretch-padding-horizontal: 15px;
83
- @navbar-dropdown-stretch-background: @global-background;
83
+ @navbar-dropdown-stretch-padding-horizontal-s: @global-gutter;
84
+ @navbar-dropdown-stretch-padding-horizontal-m: @global-medium-gutter;
85
+ @navbar-dropdown-stretch-background: @navbar-dropdown-background;
84
86
 
85
87
  @navbar-dropdown-dropbar-padding-top: @navbar-dropdown-padding;
86
88
  @navbar-dropdown-dropbar-padding-bottom: @navbar-dropdown-dropbar-padding-top;
87
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;
88
93
 
89
94
  @navbar-dropdown-nav-item-color: @global-muted-color;
90
95
  @navbar-dropdown-nav-item-hover-color: @global-color;
@@ -100,9 +105,6 @@
100
105
  @navbar-dropbar-background: @navbar-dropdown-background;
101
106
  @navbar-dropbar-z-index: @global-z-index - 20;
102
107
 
103
- @internal-navbar-parent-close-image: "../../images/backgrounds/navbar-parent-close.svg";
104
- @internal-navbar-parent-open-image: "../../images/backgrounds/navbar-parent-open.svg";
105
-
106
108
 
107
109
  /* ========================================================================
108
110
  Component: Navbar
@@ -285,19 +287,9 @@
285
287
  /* Parent icon modifier
286
288
  ========================================================================== */
287
289
 
288
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent > a::after {
289
- content: "";
290
- width: @navbar-parent-icon-width;
291
- height: @navbar-parent-icon-height;
292
- margin-left: auto;
293
- .svg-fill(@internal-navbar-parent-close-image, "#000", @navbar-parent-icon-color);
294
- background-repeat: no-repeat;
295
- background-position: 50% 50%;
296
- .hook-nav-parent-icon();
297
- }
290
+ .uk-navbar-parent-icon { margin-left: @navbar-parent-icon-margin-left; }
298
291
 
299
- .uk-navbar-parent-icon .uk-navbar-nav > .uk-parent:hover > a::after,
300
- .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); }
301
293
 
302
294
 
303
295
  /* Item
@@ -417,6 +409,12 @@
417
409
  /* Show */
418
410
  .uk-navbar-dropdown.uk-open { display: block; }
419
411
 
412
+ /*
413
+ * Remove margin from the last-child
414
+ */
415
+
416
+ .uk-navbar-dropdown > :last-child { margin-bottom: 0; }
417
+
420
418
  // Color Mode
421
419
  .uk-navbar-dropdown:extend(.uk-light all) when (@navbar-dropdown-color-mode = light) {}
422
420
  .uk-navbar-dropdown:extend(.uk-dark all) when (@navbar-dropdown-color-mode = dark) {}
@@ -449,7 +447,10 @@
449
447
  * Size modifier
450
448
  */
451
449
 
452
- .uk-navbar-dropdown-large { padding: @navbar-dropdown-large-padding; }
450
+ .uk-navbar-dropdown-large {
451
+ --uk-position-shift-offset: @navbar-dropdown-large-shift-margin;
452
+ padding: @navbar-dropdown-large-padding;
453
+ }
453
454
 
454
455
  /*
455
456
  * Stretch modifier
@@ -457,7 +458,7 @@
457
458
  * 2. Style
458
459
  */
459
460
 
460
- .uk-navbar-dropdown-stretch {
461
+ .uk-navbar-dropdown-stretch {
461
462
  --uk-position-offset: 0;
462
463
  --uk-position-shift-offset: 0;
463
464
  --uk-position-viewport-offset: 0;
@@ -470,6 +471,26 @@
470
471
  .hook-navbar-dropdown-stretch();
471
472
  }
472
473
 
474
+ /* Phone landscape and bigger */
475
+ @media (min-width: @breakpoint-small) {
476
+
477
+ .uk-navbar-dropdown-stretch {
478
+ padding-left: @navbar-dropdown-stretch-padding-horizontal-s;
479
+ padding-right: @navbar-dropdown-stretch-padding-horizontal-s;
480
+ }
481
+
482
+ }
483
+
484
+ /* Tablet landscape and bigger */
485
+ @media (min-width: @breakpoint-medium) {
486
+
487
+ .uk-navbar-dropdown-stretch {
488
+ padding-left: @navbar-dropdown-stretch-padding-horizontal-m;
489
+ padding-right: @navbar-dropdown-stretch-padding-horizontal-m;
490
+ }
491
+
492
+ }
493
+
473
494
  /*
474
495
  * Dropbar modifier
475
496
  * 1. Reset dropdown width to prevent to early shifting
@@ -485,9 +506,25 @@
485
506
  /* 3 */
486
507
  padding: @navbar-dropdown-dropbar-padding-top @navbar-dropdown-dropbar-padding-horizontal @navbar-dropdown-dropbar-padding-bottom @navbar-dropdown-dropbar-padding-horizontal;
487
508
  --uk-position-shift-offset: 0;
509
+ --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin;
488
510
  .hook-navbar-dropdown-dropbar();
489
511
  }
490
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
+
527
+
491
528
 
492
529
  /* Dropdown Nav
493
530
  * Adopts `uk-nav`
@@ -616,6 +653,10 @@
616
653
 
617
654
  .hook-inverse() {
618
655
 
656
+ //
657
+ // Nav Item
658
+ //
659
+
619
660
  .uk-navbar-nav > li > a {
620
661
  color: @inverse-navbar-nav-item-color;
621
662
  .hook-inverse-navbar-nav-item();
@@ -637,11 +678,19 @@
637
678
  .hook-inverse-navbar-nav-item-active();
638
679
  }
639
680
 
681
+ //
682
+ // Item
683
+ //
684
+
640
685
  .uk-navbar-item {
641
686
  color: @inverse-navbar-item-color;
642
687
  .hook-inverse-navbar-item();
643
688
  }
644
689
 
690
+ //
691
+ // Toggle
692
+ //
693
+
645
694
  .uk-navbar-toggle {
646
695
  color: @inverse-navbar-toggle-color;
647
696
  .hook-inverse-navbar-toggle();