uikit 3.14.2-dev.e270e98f7 → 3.14.2-dev.f917389f5

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 (72) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/build/util.js +8 -2
  3. package/dist/css/uikit-core-rtl.css +46 -19
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +46 -19
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +48 -31
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +48 -31
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +1 -1
  12. package/dist/js/components/countdown.min.js +1 -1
  13. package/dist/js/components/filter.js +1 -1
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +6 -1
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +6 -1
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +1 -1
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +2 -2
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +1 -1
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +1 -1
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +1 -1
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +1 -1
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +1 -1
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +25 -15
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +1 -1
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +73 -50
  38. package/dist/js/uikit-core.min.js +1 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +74 -51
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +11 -11
  44. package/src/js/components/parallax.js +1 -1
  45. package/src/js/core/drop.js +16 -7
  46. package/src/js/core/height-viewport.js +1 -2
  47. package/src/js/core/toggle.js +4 -0
  48. package/src/js/mixin/position.js +18 -23
  49. package/src/js/mixin/togglable.js +5 -0
  50. package/src/js/util/position.js +24 -22
  51. package/src/js/util/viewport.js +6 -7
  52. package/src/less/components/drop.less +2 -0
  53. package/src/less/components/dropdown.less +2 -0
  54. package/src/less/components/modal.less +19 -4
  55. package/src/less/components/navbar.less +28 -8
  56. package/src/less/components/offcanvas.less +21 -21
  57. package/src/less/components/tooltip.less +1 -0
  58. package/src/less/theme/navbar.less +3 -10
  59. package/src/scss/components/drop.scss +2 -0
  60. package/src/scss/components/dropdown.scss +2 -0
  61. package/src/scss/components/modal.scss +19 -4
  62. package/src/scss/components/navbar.scss +28 -8
  63. package/src/scss/components/offcanvas.scss +21 -21
  64. package/src/scss/components/tooltip.scss +1 -0
  65. package/src/scss/mixins-theme.scss +0 -10
  66. package/src/scss/theme/navbar.scss +3 -0
  67. package/src/scss/variables-theme.scss +23 -11
  68. package/src/scss/variables.scss +23 -11
  69. package/tests/drop.html +20 -2
  70. package/tests/dropdown.html +6 -0
  71. package/tests/navbar.html +21 -59
  72. package/tests/offcanvas.html +8 -8
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.2-dev.e270e98f7",
5
+ "version": "3.14.2-dev.f917389f5",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -34,32 +34,32 @@
34
34
  },
35
35
  "homepage": "https://getuikit.com",
36
36
  "devDependencies": {
37
- "@babel/core": "^7.17.8",
38
- "@babel/preset-env": "^7.16.4",
37
+ "@babel/core": "^7.17.10",
38
+ "@babel/preset-env": "^7.17.10",
39
39
  "@rollup/plugin-alias": "^3.1.9",
40
40
  "@rollup/plugin-babel": "^5.3.1",
41
41
  "@rollup/plugin-replace": "^4.0.0",
42
- "archiver": "^5.3.0",
42
+ "archiver": "^5.3.1",
43
43
  "camelcase": "^6.3.0",
44
44
  "clean-css": "^5.3.0",
45
45
  "dateformat": "^5.0.3",
46
- "esbuild": "^0.14.32",
47
- "eslint": "^8.12.0",
46
+ "esbuild": "^0.14.38",
47
+ "eslint": "^8.15.0",
48
48
  "eslint-config-prettier": "^8.5.0",
49
- "fs-extra": "^10.0.1",
50
- "glob": "^7.2.0",
51
- "inquirer": "^8.2.2",
49
+ "fs-extra": "^10.1.0",
50
+ "glob": "^8.0.1",
51
+ "inquirer": "^8.2.4",
52
52
  "less": "^4.1.2",
53
53
  "minimist": "^1.2.6",
54
54
  "number-precision": "^1.5.2",
55
55
  "p-limit": "^4.0.0",
56
56
  "prettier": "^2.6.2",
57
- "rollup": "^2.70.1",
57
+ "rollup": "^2.72.1",
58
58
  "rollup-plugin-esbuild": "^4.9.1",
59
59
  "rollup-plugin-html": "^0.2.1",
60
60
  "rollup-plugin-modify": "^3.0.0",
61
61
  "rtlcss": "^3.5.0",
62
- "semver": "^7.3.2",
62
+ "semver": "^7.3.7",
63
63
  "svgo": "^2.8.0",
64
64
  "watch-run": "^1.2.5"
65
65
  }
@@ -74,7 +74,7 @@ export default {
74
74
  };
75
75
 
76
76
  function ease(percent, easing) {
77
- return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, -easing + 1);
77
+ return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
78
78
  }
79
79
 
80
80
  // SVG elements do not inherit from HTMLElement
@@ -8,6 +8,7 @@ import {
8
8
  apply,
9
9
  attr,
10
10
  css,
11
+ getCssVar,
11
12
  hasClass,
12
13
  includes,
13
14
  isTouch,
@@ -15,7 +16,6 @@ import {
15
16
  MouseTracker,
16
17
  observeResize,
17
18
  offset,
18
- offsetViewport,
19
19
  on,
20
20
  once,
21
21
  parent,
@@ -28,6 +28,7 @@ import {
28
28
  removeClass,
29
29
  scrollParents,
30
30
  toggleClass,
31
+ toPx,
31
32
  within,
32
33
  } from 'uikit-util';
33
34
 
@@ -378,19 +379,27 @@ export default {
378
379
  toggleClass(this.$el, `${this.clsDrop}-boundary`, this.boundaryAlign);
379
380
 
380
381
  const boundary = query(this.boundary, this.$el);
381
- const [scrollParent] = scrollParents(this.$el);
382
- const scrollParentOffset = offsetViewport(scrollParent);
382
+ const scrollParentOffset = offset(
383
+ scrollParents(boundary && this.boundaryAlign ? boundary : this.$el)[0]
384
+ );
383
385
  const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
384
386
 
385
387
  css(this.$el, 'maxWidth', '');
386
388
  const maxWidth =
387
- scrollParentOffset.width - (this.boundaryAlign ? 0 : 2 * this.viewportPadding);
389
+ scrollParentOffset.width -
390
+ 2 * toPx(getCssVar('position-viewport-offset', this.$el));
388
391
 
389
392
  if (this.pos[1] === 'justify') {
390
393
  const prop = this.axis === 'y' ? 'width' : 'height';
391
- const targetOffset = offset(this.target);
392
- const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
393
- css(this.$el, prop, alignTo[prop]);
394
+ css(
395
+ this.$el,
396
+ prop,
397
+ Math.min(
398
+ (boundary ? boundaryOffset : offset(this.target))[prop],
399
+ scrollParentOffset[prop] -
400
+ 2 * toPx(getCssVar('position-viewport-offset', this.$el))
401
+ )
402
+ );
394
403
  } else if (this.$el.offsetWidth > maxWidth) {
395
404
  addClass(this.$el, `${this.clsDrop}-stack`);
396
405
  }
@@ -1,4 +1,3 @@
1
- import Class from '../mixin/class';
2
1
  import Resize from '../mixin/resize';
3
2
  import {
4
3
  boxModelAdjust,
@@ -15,7 +14,7 @@ import {
15
14
  } from 'uikit-util';
16
15
 
17
16
  export default {
18
- mixins: [Class, Resize],
17
+ mixins: [Resize],
19
18
 
20
19
  props: {
21
20
  expand: Boolean,
@@ -156,6 +156,10 @@ export default {
156
156
  {
157
157
  name: 'click',
158
158
 
159
+ filter() {
160
+ return ['click', 'hover'].some((mode) => includes(this.mode, mode));
161
+ },
162
+
159
163
  handler(e) {
160
164
  let link;
161
165
  if (
@@ -1,14 +1,4 @@
1
- import {
2
- $,
3
- flipPosition,
4
- getCssVar,
5
- offset as getOffset,
6
- includes,
7
- isNumeric,
8
- isRtl,
9
- positionAt,
10
- toPx,
11
- } from 'uikit-util';
1
+ import { flipPosition, getCssVar, includes, isRtl, positionAt, toPx } from 'uikit-util';
12
2
 
13
3
  export default {
14
4
  props: {
@@ -21,7 +11,6 @@ export default {
21
11
  pos: `bottom-${isRtl ? 'right' : 'left'}`,
22
12
  flip: true,
23
13
  offset: false,
24
- viewportPadding: 10,
25
14
  },
26
15
 
27
16
  connected() {
@@ -33,16 +22,22 @@ export default {
33
22
  positionAt(element, target, boundary) {
34
23
  const [dir, align] = this.pos;
35
24
 
36
- let { offset } = this;
37
- if (!isNumeric(offset)) {
38
- const node = $(offset);
39
- offset = node
40
- ? getOffset(node)[this.axis === 'x' ? 'left' : 'top'] -
41
- getOffset(target)[this.axis === 'x' ? 'right' : 'bottom']
42
- : 0;
43
- }
44
- offset = toPx(offset) + toPx(getCssVar('position-offset', element));
45
- offset = [includes(['left', 'top'], dir) ? -offset : +offset, 0];
25
+ const mainAxisOffset =
26
+ toPx(
27
+ this.offset === false ? getCssVar('position-offset', element) : this.offset,
28
+ this.axis === 'x' ? 'width' : 'height',
29
+ element
30
+ ) * (includes(['left', 'top'], dir) ? -1 : 1);
31
+
32
+ const crossAxisOffset = includes(['center', 'justify'], align)
33
+ ? 0
34
+ : toPx(
35
+ getCssVar('position-shift-offset', element),
36
+ this.axis === 'y' ? 'width' : 'height',
37
+ element
38
+ ) * (includes(['left', 'top'], align) ? 1 : -1);
39
+
40
+ let offset = [mainAxisOffset, crossAxisOffset];
46
41
 
47
42
  const attach = {
48
43
  element: [flipPosition(dir), align],
@@ -60,8 +55,8 @@ export default {
60
55
  attach,
61
56
  offset,
62
57
  boundary,
63
- viewportPadding: this.boundaryAlign ? 0 : this.viewportPadding,
64
58
  flip: this.flip,
59
+ viewportOffset: toPx(getCssVar('position-viewport-offset', element)),
65
60
  });
66
61
  },
67
62
  },
@@ -81,6 +81,11 @@ export default {
81
81
  return Promise.reject();
82
82
  }
83
83
 
84
+ if (!animate) {
85
+ Animation.cancel(el);
86
+ Transition.cancel(el);
87
+ }
88
+
84
89
  const promise = (
85
90
  isFunction(animate)
86
91
  ? animate
@@ -49,6 +49,10 @@ function attachTo(element, target, options) {
49
49
  return position;
50
50
  }
51
51
 
52
+ function moveBy(start, end, dim) {
53
+ return start === 'center' ? dim / 2 : start === end ? dim : 0;
54
+ }
55
+
52
56
  function attachToWithFlip(element, target, options) {
53
57
  const position = attachTo(element, target, options);
54
58
  const targetDim = offset(target);
@@ -59,7 +63,7 @@ function attachToWithFlip(element, target, options) {
59
63
  offset: elOffset,
60
64
  boundary,
61
65
  viewport,
62
- viewportPadding,
66
+ viewportOffset,
63
67
  } = options;
64
68
 
65
69
  let viewports = scrollParents(element);
@@ -80,9 +84,9 @@ function attachToWithFlip(element, target, options) {
80
84
 
81
85
  viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
82
86
 
83
- if (viewportPadding) {
84
- viewport[start] += viewportPadding;
85
- viewport[end] -= viewportPadding;
87
+ if (viewportOffset) {
88
+ viewport[start] += viewportOffset;
89
+ viewport[end] -= viewportOffset;
86
90
  }
87
91
 
88
92
  if (boundary && !willFlip && position[prop] <= offset(boundary)[prop]) {
@@ -139,19 +143,21 @@ function attachToWithFlip(element, target, options) {
139
143
  return false;
140
144
  }
141
145
 
142
- const newPos = attachToWithFlip(element, target, {
143
- ...options,
144
- attach: {
145
- element: elAttach.map(flipDir).reverse(),
146
- target: targetAttach.map(flipDir).reverse(),
147
- },
148
- offset: elOffset.reverse(),
149
- flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
150
- recursion: true,
151
- });
152
-
153
- if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
154
- return newPos;
146
+ if (flip === true || includes(flip, dirs[1 - i][1])) {
147
+ const newPos = attachToWithFlip(element, target, {
148
+ ...options,
149
+ attach: {
150
+ element: elAttach.map(flipDir).reverse(),
151
+ target: targetAttach.map(flipDir).reverse(),
152
+ },
153
+ offset: elOffset.reverse(),
154
+ flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
155
+ recursion: true,
156
+ });
157
+
158
+ if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
159
+ return newPos;
160
+ }
155
161
  }
156
162
  }
157
163
 
@@ -172,10 +178,6 @@ function attachToWithFlip(element, target, options) {
172
178
  return offsetPosition;
173
179
  }
174
180
 
175
- function moveBy(start, end, dim) {
176
- return start === 'center' ? dim / 2 : start === end ? dim : 0;
177
- }
178
-
179
181
  function getIntersectionArea(...rects) {
180
182
  let area = {};
181
183
  for (const rect of rects) {
@@ -188,7 +190,7 @@ function getIntersectionArea(...rects) {
188
190
  }
189
191
 
190
192
  function isInScrollArea(position, scrollElement, dir) {
191
- const viewport = offsetViewport(scrollElement);
193
+ const viewport = offsetViewport(scrollElement, false);
192
194
  const [prop, , start, end] = dirs[dir];
193
195
  viewport[start] -= scrollElement[`scroll${ucfirst(start)}`];
194
196
  viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`];
@@ -158,21 +158,20 @@ export function offsetViewport(scrollElement) {
158
158
  ['width', 'x', 'left', 'right'],
159
159
  ['height', 'y', 'top', 'bottom'],
160
160
  ]) {
161
- if (!isWindow(getViewport(viewportElement))) {
161
+ if (!isWindow(viewportElement)) {
162
162
  rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
163
+ } else {
164
+ // iOS 12 returns <body> as scrollingElement
165
+ viewportElement = viewportElement.document.documentElement;
163
166
  }
164
- rect[prop] = rect[dir] =
165
- viewportElement[(isWindow(viewportElement) ? 'inner' : 'client') + ucfirst(prop)];
167
+ rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`];
166
168
  rect[end] = rect[prop] + rect[start];
167
169
  }
168
170
  return rect;
169
171
  }
170
172
 
171
173
  function scrollingElement(element) {
172
- const {
173
- document: { scrollingElement },
174
- } = toWindow(element);
175
- return scrollingElement;
174
+ return toWindow(element).document.scrollingElement;
176
175
  }
177
176
 
178
177
  function getViewport(scrollElement) {
@@ -22,6 +22,7 @@
22
22
 
23
23
  @drop-z-index: @global-z-index + 20;
24
24
  @drop-margin: @global-margin;
25
+ @drop-viewport-margin: 15px;
25
26
  @drop-width: 300px;
26
27
 
27
28
 
@@ -42,6 +43,7 @@
42
43
  position: absolute;
43
44
  z-index: @drop-z-index;
44
45
  --uk-position-offset: @drop-margin;
46
+ --uk-position-viewport-offset: @drop-viewport-margin;
45
47
  /* 3 */
46
48
  box-sizing: border-box;
47
49
  width: @drop-width;
@@ -22,6 +22,7 @@
22
22
 
23
23
  @dropdown-z-index: @global-z-index + 20;
24
24
  @dropdown-margin: @global-small-margin;
25
+ @dropdown-viewport-margin: 15px;
25
26
  @dropdown-min-width: 200px;
26
27
  @dropdown-padding: 15px;
27
28
  @dropdown-background: @global-muted-background;
@@ -55,6 +56,7 @@
55
56
  position: absolute;
56
57
  z-index: @dropdown-z-index;
57
58
  --uk-position-offset: @dropdown-margin;
59
+ --uk-position-viewport-offset: @dropdown-viewport-margin;
58
60
  /* 3 */
59
61
  box-sizing: border-box;
60
62
  min-width: @dropdown-min-width;
@@ -40,15 +40,21 @@
40
40
 
41
41
  @modal-container-width: 1200px;
42
42
 
43
- @modal-body-padding-horizontal: @global-gutter;
44
- @modal-body-padding-vertical: @global-gutter;
43
+ @modal-body-padding-horizontal: 20px;
44
+ @modal-body-padding-vertical: 20px;
45
+ @modal-body-padding-horizontal-s: @global-gutter;
46
+ @modal-body-padding-vertical-s: @global-gutter;
45
47
 
46
- @modal-header-padding-horizontal: @global-gutter;
48
+ @modal-header-padding-horizontal: 20px;
47
49
  @modal-header-padding-vertical: (@modal-header-padding-horizontal / 2);
50
+ @modal-header-padding-horizontal-s: @global-gutter;
51
+ @modal-header-padding-vertical-s: (@modal-header-padding-horizontal-s / 2);
48
52
  @modal-header-background: @global-muted-background;
49
53
 
50
- @modal-footer-padding-horizontal: @global-gutter;
54
+ @modal-footer-padding-horizontal: 20px;
51
55
  @modal-footer-padding-vertical: (@modal-footer-padding-horizontal / 2);
56
+ @modal-footer-padding-horizontal-s: @global-gutter;
57
+ @modal-footer-padding-vertical-s: (@modal-footer-padding-horizontal-s / 2);
52
58
  @modal-footer-background: @global-muted-background;
53
59
 
54
60
  @modal-title-font-size: @global-xlarge-font-size;
@@ -228,6 +234,15 @@
228
234
  .hook-modal-footer();
229
235
  }
230
236
 
237
+ /* Phone landscape and bigger */
238
+ @media (min-width: @breakpoint-small) {
239
+
240
+ .uk-modal-body { padding: @modal-body-padding-vertical-s @modal-body-padding-horizontal-s; }
241
+ .uk-modal-header { padding: @modal-header-padding-vertical-s @modal-header-padding-horizontal-s; }
242
+ .uk-modal-footer { padding: @modal-footer-padding-vertical-s @modal-footer-padding-horizontal-s; }
243
+
244
+ }
245
+
231
246
  /*
232
247
  * Remove margin from the last-child
233
248
  */
@@ -40,6 +40,7 @@
40
40
  @navbar-color-mode: none;
41
41
 
42
42
  @navbar-nav-item-height: 80px;
43
+ @navbar-nav-item-gap: 0;
43
44
  @navbar-nav-item-padding-horizontal: 15px;
44
45
  @navbar-nav-item-color: @global-muted-color;
45
46
  @navbar-nav-item-font-size: @global-font-size;
@@ -48,6 +49,7 @@
48
49
  @navbar-nav-item-onclick-color: @global-emphasis-color;
49
50
  @navbar-nav-item-active-color: @global-emphasis-color;
50
51
 
52
+ @navbar-item-padding-horizontal: @navbar-nav-item-padding-horizontal;
51
53
  @navbar-item-color: @global-color;
52
54
 
53
55
  @navbar-toggle-color: @global-muted-color;
@@ -56,7 +58,9 @@
56
58
  @navbar-subtitle-font-size: @global-small-font-size;
57
59
 
58
60
  @navbar-dropdown-z-index: @global-z-index + 20;
59
- @navbar-dropdown-margin: 0px;
61
+ @navbar-dropdown-margin: 0;
62
+ @navbar-dropdown-shift-margin: 0;
63
+ @navbar-dropdown-viewport-margin: 15px;
60
64
  @navbar-dropdown-width: 200px;
61
65
  @navbar-dropdown-padding: 15px;
62
66
  @navbar-dropdown-background: @global-muted-background;
@@ -93,6 +97,7 @@
93
97
 
94
98
  .uk-navbar {
95
99
  display: flex;
100
+ --uk-navbar-nav-item-gap: @navbar-nav-item-gap;
96
101
  /* 1 */
97
102
  position: relative;
98
103
  .hook-navbar();
@@ -127,6 +132,7 @@
127
132
  .uk-navbar-center-left > *,
128
133
  .uk-navbar-center-right > * {
129
134
  display: flex;
135
+ gap: var(--uk-navbar-nav-item-gap);
130
136
  /* 1 */
131
137
  align-items: center;
132
138
  }
@@ -168,8 +174,14 @@
168
174
  top: 0;
169
175
  }
170
176
 
171
- .uk-navbar-center-left { right: 100%; }
172
- .uk-navbar-center-right { left: 100%; }
177
+ .uk-navbar-center-left {
178
+ right: 100%; // Fallback if gap is 0
179
+ right: ~'calc(100% + var(--uk-navbar-nav-item-gap))';
180
+ }
181
+ .uk-navbar-center-right {
182
+ left: 100%; // Fallback if gap is 0
183
+ left: ~'calc(100% + var(--uk-navbar-nav-item-gap))';
184
+ }
173
185
 
174
186
  [class*='uk-navbar-center-'] {
175
187
  width: max-content;
@@ -186,6 +198,7 @@
186
198
 
187
199
  .uk-navbar-nav {
188
200
  display: flex;
201
+ gap: var(--uk-navbar-nav-item-gap);
189
202
  /* 1 */
190
203
  margin: 0;
191
204
  padding: 0;
@@ -267,6 +280,7 @@
267
280
  ========================================================================== */
268
281
 
269
282
  .uk-navbar-item {
283
+ padding: 0 @navbar-item-padding-horizontal;
270
284
  color: @navbar-item-color;
271
285
  .hook-navbar-item();
272
286
  }
@@ -362,6 +376,8 @@
362
376
  position: absolute;
363
377
  z-index: @navbar-dropdown-z-index;
364
378
  --uk-position-offset: @navbar-dropdown-margin;
379
+ --uk-position-shift-offset: @navbar-dropdown-shift-margin;
380
+ --uk-position-viewport-offset: @navbar-dropdown-viewport-margin;
365
381
  /* 3 */
366
382
  box-sizing: border-box;
367
383
  width: @navbar-dropdown-width;
@@ -402,19 +418,23 @@
402
418
 
403
419
  /*
404
420
  * Dropbar modifier
405
- * 1. Set position
406
- * 2. Bottom padding for dropbar
407
- * 3. Horizontal padding
421
+ * 1. Reset dropdown width to prevent to early shifting
422
+ * 2. Set position
423
+ * 3. Bottom padding for dropbar
424
+ * 4. Horizontal padding
408
425
  */
409
426
 
410
427
  .uk-navbar-dropdown-dropbar {
411
428
  /* 1 */
412
- --uk-position-offset: @navbar-dropdown-dropbar-margin-top;
429
+ width: auto;
413
430
  /* 2 */
414
- margin-bottom: @navbar-dropdown-dropbar-margin-bottom;
431
+ --uk-position-offset: @navbar-dropdown-dropbar-margin-top;
415
432
  /* 3 */
433
+ margin-bottom: @navbar-dropdown-dropbar-margin-bottom;
434
+ /* 4 */
416
435
  padding-left: @navbar-dropdown-dropbar-padding-horizontal;
417
436
  padding-right: @navbar-dropdown-dropbar-padding-horizontal;
437
+ --uk-position-shift-offset: 0;
418
438
  .hook-navbar-dropdown-dropbar();
419
439
  }
420
440
 
@@ -26,19 +26,19 @@
26
26
  @offcanvas-z-index: @global-z-index;
27
27
 
28
28
  @offcanvas-bar-width: 270px;
29
- @offcanvas-bar-padding-vertical: @global-margin;
30
- @offcanvas-bar-padding-horizontal: @global-margin;
29
+ @offcanvas-bar-padding-vertical: 20px;
30
+ @offcanvas-bar-padding-horizontal: 20px;
31
31
  @offcanvas-bar-background: @global-secondary-background;
32
32
  @offcanvas-bar-color-mode: light;
33
33
 
34
- @offcanvas-bar-width-m: 350px;
35
- @offcanvas-bar-padding-vertical-m: @global-medium-gutter;
36
- @offcanvas-bar-padding-horizontal-m: @global-medium-gutter;
34
+ @offcanvas-bar-width-s: 350px;
35
+ @offcanvas-bar-padding-vertical-s: @global-gutter;
36
+ @offcanvas-bar-padding-horizontal-s: @global-gutter;
37
37
 
38
38
  @offcanvas-close-position: 5px;
39
39
  @offcanvas-close-padding: 5px;
40
40
 
41
- @offcanvas-close-position-m: 20px;
41
+ @offcanvas-close-position-s: 10px;
42
42
 
43
43
  @offcanvas-overlay-background: rgba(0,0,0,0.1);
44
44
 
@@ -99,13 +99,13 @@
99
99
  .hook-offcanvas-bar();
100
100
  }
101
101
 
102
- /* Tablet landscape and bigger */
103
- @media (min-width: @breakpoint-medium) {
102
+ /* Phone landscape and bigger */
103
+ @media (min-width: @breakpoint-small) {
104
104
 
105
105
  .uk-offcanvas-bar {
106
- left: -@offcanvas-bar-width-m;
107
- width: @offcanvas-bar-width-m;
108
- padding: @offcanvas-bar-padding-vertical-m @offcanvas-bar-padding-horizontal-m;
106
+ left: -@offcanvas-bar-width-s;
107
+ width: @offcanvas-bar-width-s;
108
+ padding: @offcanvas-bar-padding-vertical-s @offcanvas-bar-padding-horizontal-s;
109
109
  }
110
110
 
111
111
  }
@@ -121,9 +121,9 @@
121
121
  }
122
122
 
123
123
  /* Tablet landscape and bigger */
124
- @media (min-width: @breakpoint-medium) {
124
+ @media (min-width: @breakpoint-small) {
125
125
 
126
- .uk-offcanvas-flip .uk-offcanvas-bar { right: -@offcanvas-bar-width-m; }
126
+ .uk-offcanvas-flip .uk-offcanvas-bar { right: -@offcanvas-bar-width-s; }
127
127
 
128
128
  }
129
129
 
@@ -179,9 +179,9 @@
179
179
  .uk-open > .uk-offcanvas-reveal { width: @offcanvas-bar-width; }
180
180
 
181
181
  /* Tablet landscape and bigger */
182
- @media (min-width: @breakpoint-medium) {
182
+ @media (min-width: @breakpoint-small) {
183
183
 
184
- .uk-open > .uk-offcanvas-reveal { width: @offcanvas-bar-width-m; }
184
+ .uk-open > .uk-offcanvas-reveal { width: @offcanvas-bar-width-s; }
185
185
 
186
186
  }
187
187
 
@@ -209,11 +209,11 @@
209
209
  }
210
210
 
211
211
  /* Tablet landscape and bigger */
212
- @media (min-width: @breakpoint-medium) {
212
+ @media (min-width: @breakpoint-small) {
213
213
 
214
214
  .uk-offcanvas-close {
215
- top: @offcanvas-close-position-m;
216
- right: @offcanvas-close-position-m;
215
+ top: @offcanvas-close-position-s;
216
+ right: @offcanvas-close-position-s;
217
217
  }
218
218
 
219
219
  }
@@ -304,11 +304,11 @@
304
304
  .uk-offcanvas-flip.uk-offcanvas-container-animation { left: -@offcanvas-bar-width; }
305
305
 
306
306
  /* Tablet landscape and bigger */
307
- @media (min-width: @breakpoint-medium) {
307
+ @media (min-width: @breakpoint-small) {
308
308
 
309
- :not(.uk-offcanvas-flip).uk-offcanvas-container-animation { left: @offcanvas-bar-width-m; }
309
+ :not(.uk-offcanvas-flip).uk-offcanvas-container-animation { left: @offcanvas-bar-width-s; }
310
310
 
311
- .uk-offcanvas-flip.uk-offcanvas-container-animation { left: -@offcanvas-bar-width-m; }
311
+ .uk-offcanvas-flip.uk-offcanvas-container-animation { left: -@offcanvas-bar-width-s; }
312
312
 
313
313
  }
314
314
 
@@ -51,6 +51,7 @@
51
51
  position: absolute;
52
52
  z-index: @tooltip-z-index;
53
53
  --uk-position-offset: @tooltip-margin;
54
+ --uk-position-viewport-offset: 10;
54
55
  /* 3 */
55
56
  top: 0;
56
57
  /* 4 */
@@ -7,6 +7,9 @@
7
7
  // Variables
8
8
  // ========================================================================
9
9
 
10
+ @navbar-nav-item-gap: 30px;
11
+ @navbar-nav-item-padding-horizontal: 0;
12
+
10
13
  @navbar-nav-item-font-size: @global-small-font-size;
11
14
 
12
15
  @navbar-dropdown-margin: 15px;
@@ -129,16 +132,6 @@
129
132
 
130
133
  .hook-navbar-misc() {
131
134
 
132
- /*
133
- * Navbar
134
- */
135
-
136
- .uk-navbar-container > .uk-container .uk-navbar-left {
137
- margin-left: -@navbar-nav-item-padding-horizontal;
138
- margin-right: -@navbar-nav-item-padding-horizontal;
139
- }
140
- .uk-navbar-container > .uk-container .uk-navbar-right { margin-right: -@navbar-nav-item-padding-horizontal; }
141
-
142
135
  /*
143
136
  * Grid Divider
144
137
  */