uikit 3.14.1-dev.eeb4cd6ae → 3.14.2-dev.404bdcedf

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 +21 -3
  2. package/build/util.js +8 -2
  3. package/dist/css/uikit-core-rtl.css +12 -1
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +12 -1
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +15 -14
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +15 -14
  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 +2 -2
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +19 -2
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +19 -2
  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 +2 -2
  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 +2 -2
  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 +38 -16
  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 +88 -56
  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 +90 -58
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +11 -11
  44. package/src/js/api/hooks.js +1 -1
  45. package/src/js/components/filter.js +1 -1
  46. package/src/js/core/drop.js +16 -7
  47. package/src/js/core/height-viewport.js +1 -2
  48. package/src/js/core/margin.js +1 -1
  49. package/src/js/core/scrollspy.js +2 -1
  50. package/src/js/core/toggle.js +4 -0
  51. package/src/js/mixin/parallax.js +1 -1
  52. package/src/js/mixin/position.js +18 -23
  53. package/src/js/mixin/togglable.js +18 -1
  54. package/src/js/util/position.js +24 -22
  55. package/src/js/util/viewport.js +5 -9
  56. package/src/less/components/drop.less +1 -0
  57. package/src/less/components/dropdown.less +1 -0
  58. package/src/less/components/navbar.less +16 -2
  59. package/src/less/components/tooltip.less +1 -0
  60. package/src/less/theme/navbar.less +3 -10
  61. package/src/scss/components/drop.scss +1 -0
  62. package/src/scss/components/dropdown.scss +1 -0
  63. package/src/scss/components/navbar.scss +16 -2
  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 +3 -1
  68. package/src/scss/variables.scss +2 -0
  69. package/tests/drop.html +20 -2
  70. package/tests/dropdown.html +6 -0
  71. package/tests/navbar.html +21 -59
  72. package/tests/notification.html +1 -1
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.1-dev.eeb4cd6ae",
5
+ "version": "3.14.2-dev.404bdcedf",
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
  }
@@ -105,7 +105,7 @@ export default function (UIkit) {
105
105
  const {
106
106
  $options: { computed },
107
107
  } = this;
108
- const values = { ...(initial ? {} : this._computed) };
108
+ const values = { ...this._computed };
109
109
  this._computed = {};
110
110
 
111
111
  for (const key in computed) {
@@ -194,7 +194,7 @@ function matchFilter(
194
194
  }
195
195
 
196
196
  function isEqualList(listA, listB) {
197
- return listA.length === listB.length && listA.every((el) => ~listB.indexOf(el));
197
+ return listA.length === listB.length && listA.every((el) => listB.includes(el));
198
198
  }
199
199
 
200
200
  function getSelector({ filter }) {
@@ -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,
@@ -47,7 +47,7 @@ export default {
47
47
  for (const row of rows) {
48
48
  for (const column of row) {
49
49
  toggleClass(column, this.margin, rows[0] !== row);
50
- toggleClass(column, this.firstColumn, !!~columns[0].indexOf(column));
50
+ toggleClass(column, this.firstColumn, columns[0].includes(column));
51
51
  }
52
52
  }
53
53
  },
@@ -4,6 +4,7 @@ import {
4
4
  css,
5
5
  filter,
6
6
  data as getData,
7
+ isEqual,
7
8
  observeIntersection,
8
9
  once,
9
10
  removeClass,
@@ -50,7 +51,7 @@ export default {
50
51
  css(filter(elements, `:not(.${this.inViewClass})`), 'visibility', 'hidden');
51
52
  }
52
53
 
53
- if (prev) {
54
+ if (!isEqual(elements, prev)) {
54
55
  this.$reset();
55
56
  }
56
57
  },
@@ -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 (
@@ -333,7 +333,7 @@ function getValue(stops, percent) {
333
333
  return isNumber(start) ? start + Math.abs(start - end) * p * (start < end ? 1 : -1) : +end;
334
334
  }
335
335
 
336
- const unitRe = /^-?\d+([^\s]*)/;
336
+ const unitRe = /^-?\d+(\S*)/;
337
337
  function getUnit(stops, defaultUnit) {
338
338
  for (const stop of stops) {
339
339
  const match = stop.match?.(unitRe);
@@ -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.viewportPadding,
64
58
  flip: this.flip,
59
+ viewportOffset: toPx(getCssVar('position-viewport-offset', element)),
65
60
  });
66
61
  },
67
62
  },
@@ -24,6 +24,7 @@ export default {
24
24
  cls: Boolean,
25
25
  animation: 'list',
26
26
  duration: Number,
27
+ velocity: Number,
27
28
  origin: String,
28
29
  transition: String,
29
30
  },
@@ -32,6 +33,7 @@ export default {
32
33
  cls: false,
33
34
  animation: [false],
34
35
  duration: 200,
36
+ velocity: 0.2,
35
37
  origin: false,
36
38
  transition: 'ease',
37
39
  clsEnter: 'uk-togglabe-enter',
@@ -79,6 +81,11 @@ export default {
79
81
  return Promise.reject();
80
82
  }
81
83
 
84
+ if (!animate) {
85
+ Animation.cancel(el);
86
+ Transition.cancel(el);
87
+ }
88
+
82
89
  const promise = (
83
90
  isFunction(animate)
84
91
  ? animate
@@ -149,7 +156,15 @@ export default {
149
156
  },
150
157
  };
151
158
 
152
- export function toggleHeight({ isToggled, duration, initProps, hideProps, transition, _toggle }) {
159
+ export function toggleHeight({
160
+ isToggled,
161
+ duration,
162
+ velocity,
163
+ initProps,
164
+ hideProps,
165
+ transition,
166
+ _toggle,
167
+ }) {
153
168
  return (el, show) => {
154
169
  const inProgress = Transition.inProgress(el);
155
170
  const inner = el.hasChildNodes()
@@ -170,6 +185,8 @@ export function toggleHeight({ isToggled, duration, initProps, hideProps, transi
170
185
  fastdom.flush();
171
186
 
172
187
  const endHeight = height(el) + (inProgress ? 0 : inner);
188
+ duration = velocity * el.offsetHeight + duration;
189
+
173
190
  height(el, currentHeight);
174
191
 
175
192
  return (
@@ -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)}`];
@@ -153,22 +153,18 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden/, scroll
153
153
  export function offsetViewport(scrollElement) {
154
154
  let viewportElement = getViewport(scrollElement);
155
155
 
156
- // iOS 12 returns <body> as scrollingElement
157
- if (viewportElement === scrollingElement(viewportElement)) {
158
- viewportElement = document.documentElement;
159
- }
160
-
161
156
  let rect = offset(viewportElement);
162
157
  for (let [prop, dir, start, end] of [
163
158
  ['width', 'x', 'left', 'right'],
164
159
  ['height', 'y', 'top', 'bottom'],
165
160
  ]) {
166
- if (!isWindow(getViewport(viewportElement))) {
161
+ if (!isWindow(viewportElement)) {
167
162
  rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
163
+ } else {
164
+ // iOS 12 returns <body> as scrollingElement
165
+ viewportElement = viewportElement.document.documentElement;
168
166
  }
169
- rect[prop] = rect[dir] = (
170
- isWindow(viewportElement) ? scrollingElement(viewportElement) : viewportElement
171
- )[`client${ucfirst(prop)}`];
167
+ rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`];
172
168
  rect[end] = rect[prop] + rect[start];
173
169
  }
174
170
  return rect;
@@ -42,6 +42,7 @@
42
42
  position: absolute;
43
43
  z-index: @drop-z-index;
44
44
  --uk-position-offset: @drop-margin;
45
+ --uk-position-viewport-offset: 10;
45
46
  /* 3 */
46
47
  box-sizing: border-box;
47
48
  width: @drop-width;
@@ -55,6 +55,7 @@
55
55
  position: absolute;
56
56
  z-index: @dropdown-z-index;
57
57
  --uk-position-offset: @dropdown-margin;
58
+ --uk-position-viewport-offset: 10;
58
59
  /* 3 */
59
60
  box-sizing: border-box;
60
61
  min-width: @dropdown-min-width;
@@ -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;
@@ -93,6 +95,7 @@
93
95
 
94
96
  .uk-navbar {
95
97
  display: flex;
98
+ --uk-navbar-nav-item-gap: @navbar-nav-item-gap;
96
99
  /* 1 */
97
100
  position: relative;
98
101
  .hook-navbar();
@@ -127,6 +130,7 @@
127
130
  .uk-navbar-center-left > *,
128
131
  .uk-navbar-center-right > * {
129
132
  display: flex;
133
+ gap: var(--uk-navbar-nav-item-gap);
130
134
  /* 1 */
131
135
  align-items: center;
132
136
  }
@@ -168,8 +172,14 @@
168
172
  top: 0;
169
173
  }
170
174
 
171
- .uk-navbar-center-left { right: 100%; }
172
- .uk-navbar-center-right { left: 100%; }
175
+ .uk-navbar-center-left {
176
+ right: 100%; // Fallback if gap is 0
177
+ right: ~'calc(100% + var(--uk-navbar-nav-item-gap))';
178
+ }
179
+ .uk-navbar-center-right {
180
+ left: 100%; // Fallback if gap is 0
181
+ left: ~'calc(100% + var(--uk-navbar-nav-item-gap))';
182
+ }
173
183
 
174
184
  [class*='uk-navbar-center-'] {
175
185
  width: max-content;
@@ -186,6 +196,7 @@
186
196
 
187
197
  .uk-navbar-nav {
188
198
  display: flex;
199
+ gap: var(--uk-navbar-nav-item-gap);
189
200
  /* 1 */
190
201
  margin: 0;
191
202
  padding: 0;
@@ -267,6 +278,7 @@
267
278
  ========================================================================== */
268
279
 
269
280
  .uk-navbar-item {
281
+ padding: 0 @navbar-item-padding-horizontal;
270
282
  color: @navbar-item-color;
271
283
  .hook-navbar-item();
272
284
  }
@@ -362,6 +374,8 @@
362
374
  position: absolute;
363
375
  z-index: @navbar-dropdown-z-index;
364
376
  --uk-position-offset: @navbar-dropdown-margin;
377
+ --uk-position-shift-offset: 0;
378
+ --uk-position-viewport-offset: 10;
365
379
  /* 3 */
366
380
  box-sizing: border-box;
367
381
  width: @navbar-dropdown-width;
@@ -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
  */
@@ -42,6 +42,7 @@ $drop-width: 300px !default;
42
42
  position: absolute;
43
43
  z-index: $drop-z-index;
44
44
  --uk-position-offset: #{$drop-margin};
45
+ --uk-position-viewport-offset: 10;
45
46
  /* 3 */
46
47
  box-sizing: border-box;
47
48
  width: $drop-width;
@@ -55,6 +55,7 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
55
55
  position: absolute;
56
56
  z-index: $dropdown-z-index;
57
57
  --uk-position-offset: #{$dropdown-margin};
58
+ --uk-position-viewport-offset: 10;
58
59
  /* 3 */
59
60
  box-sizing: border-box;
60
61
  min-width: $dropdown-min-width;
@@ -40,6 +40,7 @@ $navbar-background: $global-muted-background !defau
40
40
  $navbar-color-mode: none !default;
41
41
 
42
42
  $navbar-nav-item-height: 80px !default;
43
+ $navbar-nav-item-gap: 0 !default;
43
44
  $navbar-nav-item-padding-horizontal: 15px !default;
44
45
  $navbar-nav-item-color: $global-muted-color !default;
45
46
  $navbar-nav-item-font-size: $global-font-size !default;
@@ -48,6 +49,7 @@ $navbar-nav-item-hover-color: $global-color !default;
48
49
  $navbar-nav-item-onclick-color: $global-emphasis-color !default;
49
50
  $navbar-nav-item-active-color: $global-emphasis-color !default;
50
51
 
52
+ $navbar-item-padding-horizontal: $navbar-nav-item-padding-horizontal !default;
51
53
  $navbar-item-color: $global-color !default;
52
54
 
53
55
  $navbar-toggle-color: $global-muted-color !default;
@@ -93,6 +95,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
93
95
 
94
96
  .uk-navbar {
95
97
  display: flex;
98
+ --uk-navbar-nav-item-gap: #{$navbar-nav-item-gap};
96
99
  /* 1 */
97
100
  position: relative;
98
101
  @if(mixin-exists(hook-navbar)) {@include hook-navbar();}
@@ -127,6 +130,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
127
130
  .uk-navbar-center-left > *,
128
131
  .uk-navbar-center-right > * {
129
132
  display: flex;
133
+ gap: var(--uk-navbar-nav-item-gap);
130
134
  /* 1 */
131
135
  align-items: center;
132
136
  }
@@ -168,8 +172,14 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
168
172
  top: 0;
169
173
  }
170
174
 
171
- .uk-navbar-center-left { right: 100%; }
172
- .uk-navbar-center-right { left: 100%; }
175
+ .uk-navbar-center-left {
176
+ right: 100%; // Fallback if gap is 0
177
+ right: unquote('calc(100% + var(--uk-navbar-nav-item-gap))');
178
+ }
179
+ .uk-navbar-center-right {
180
+ left: 100%; // Fallback if gap is 0
181
+ left: unquote('calc(100% + var(--uk-navbar-nav-item-gap))');
182
+ }
173
183
 
174
184
  [class*='uk-navbar-center-'] {
175
185
  width: max-content;
@@ -186,6 +196,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
186
196
 
187
197
  .uk-navbar-nav {
188
198
  display: flex;
199
+ gap: var(--uk-navbar-nav-item-gap);
189
200
  /* 1 */
190
201
  margin: 0;
191
202
  padding: 0;
@@ -267,6 +278,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
267
278
  ========================================================================== */
268
279
 
269
280
  .uk-navbar-item {
281
+ padding: 0 $navbar-item-padding-horizontal;
270
282
  color: $navbar-item-color;
271
283
  @if(mixin-exists(hook-navbar-item)) {@include hook-navbar-item();}
272
284
  }
@@ -362,6 +374,8 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
362
374
  position: absolute;
363
375
  z-index: $navbar-dropdown-z-index;
364
376
  --uk-position-offset: #{$navbar-dropdown-margin};
377
+ --uk-position-shift-offset: 0;
378
+ --uk-position-viewport-offset: 10;
365
379
  /* 3 */
366
380
  box-sizing: border-box;
367
381
  width: $navbar-dropdown-width;
@@ -51,6 +51,7 @@ $tooltip-font-size: 12px !default;
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 */