uikit 3.14.4-dev.5e7e87ba7 → 3.14.4-dev.6002e7046

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 +5 -1
  2. package/dist/css/uikit-core-rtl.css +14 -3
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +14 -3
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +16 -28
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +16 -28
  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 +27 -17
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +27 -17
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +4 -2
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +1 -1
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  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 +1 -1
  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 +17 -8
  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 +194 -161
  37. package/dist/js/uikit-core.min.js +15 -12
  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 +197 -162
  41. package/dist/js/uikit.min.js +15 -12
  42. package/package.json +11 -11
  43. package/src/images/components/navbar-toggle-icon.svg +17 -14
  44. package/src/js/api/hooks.js +5 -1
  45. package/src/js/api/state.js +1 -1
  46. package/src/js/components/notification.js +3 -1
  47. package/src/js/core/drop.js +32 -33
  48. package/src/js/core/navbar.js +3 -1
  49. package/src/js/core/offcanvas.js +8 -4
  50. package/src/js/core/toggle.js +3 -5
  51. package/src/js/mixin/modal.js +15 -12
  52. package/src/js/mixin/position.js +5 -4
  53. package/src/js/mixin/style.js +11 -0
  54. package/src/js/mixin/togglable.js +11 -3
  55. package/src/js/util/animation.js +5 -4
  56. package/src/js/util/class.js +3 -1
  57. package/src/js/util/position.js +96 -90
  58. package/src/less/components/dropbar.less +11 -0
  59. package/src/less/components/nav.less +3 -1
  60. package/src/less/components/navbar.less +17 -3
  61. package/src/less/theme/navbar.less +5 -32
  62. package/src/scss/components/dropbar.scss +11 -0
  63. package/src/scss/components/nav.scss +3 -1
  64. package/src/scss/components/navbar.scss +17 -3
  65. package/src/scss/mixins-theme.scss +3 -28
  66. package/src/scss/mixins.scss +2 -0
  67. package/src/scss/theme/navbar.scss +5 -5
  68. package/src/scss/variables-theme.scss +8 -4
  69. package/src/scss/variables.scss +7 -1
  70. package/tests/drop.html +4 -6
  71. package/tests/dropbar.html +10 -8
  72. package/tests/index.html +1 -1
  73. package/tests/js/index.js +1 -4
  74. package/tests/navbar.html +48 -21
  75. package/tests/position.html +17 -4
  76. package/tests/search.html +2 -2
  77. package/tests/sticky-navbar.html +12 -12
@@ -15,6 +15,7 @@ export function positionAt(element, target, options) {
15
15
  ...options.attach,
16
16
  },
17
17
  offset: [0, 0],
18
+ placement: [],
18
19
  ...options,
19
20
  };
20
21
 
@@ -25,57 +26,21 @@ export function positionAt(element, target, options) {
25
26
  offset(element, getPosition(element, target, options));
26
27
  }
27
28
 
28
- function attachTo(element, target, options) {
29
- let { attach, offset: offsetBy } = {
30
- attach: {
31
- element: ['left', 'top'],
32
- target: ['left', 'top'],
33
- ...options.attach,
34
- },
35
- offset: [0, 0],
36
- ...options,
37
- };
38
-
39
- const position = offset(element);
40
-
41
- for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
42
- const targetOffset =
43
- attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);
44
-
45
- position[start] = position[dir] =
46
- targetOffset[start] +
47
- moveBy(attach.target[i], end, targetOffset[prop]) -
48
- moveBy(attach.element[i], end, position[prop]) +
49
- +offsetBy[i];
50
- position[end] = position[start] + position[prop];
51
- }
52
- return position;
53
- }
54
-
55
- function moveBy(start, end, dim) {
56
- return start === 'center' ? dim / 2 : start === end ? dim : 0;
57
- }
58
-
59
29
  function getPosition(element, target, options) {
60
30
  const position = attachTo(element, target, options);
61
31
 
62
32
  let {
63
- flip,
64
- shift,
65
33
  attach: { element: elAttach, target: targetAttach },
66
34
  offset: elOffset,
67
35
  boundary,
68
36
  viewportOffset,
37
+ placement,
69
38
  } = options;
70
39
 
71
- if (!flip && !shift) {
72
- return position;
73
- }
74
-
75
- const offsetPosition = { ...position };
76
- for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
40
+ let offsetPosition = position;
41
+ for (const [i, [prop, , start, end]] of Object.entries(dirs)) {
77
42
  let viewports = scrollParents(target[i]);
78
- const [scrollElement] = viewports;
43
+ const scrollArea = getScrollArea(viewports[0], viewportOffset, i);
79
44
 
80
45
  let viewport = getIntersectionArea(...viewports.map(offsetViewport));
81
46
 
@@ -85,54 +50,28 @@ function getPosition(element, target, options) {
85
50
  }
86
51
 
87
52
  if (boundary) {
88
- viewport = getIntersectionArea(viewport, offsetViewport(boundary));
53
+ viewport = getIntersectionArea(viewport, offset(boundary));
89
54
  }
90
55
 
91
- const isInStartViewport = position[start] >= viewport[start];
92
- const isInEndViewport = position[end] <= viewport[end];
93
-
94
- if (isInStartViewport && isInEndViewport) {
56
+ if (isWithin(position, viewport, i)) {
95
57
  continue;
96
58
  }
97
59
 
98
60
  let offsetBy = 0;
99
- const targetDim = offset(target[i]);
100
61
 
101
62
  // Flip
102
- if (!intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i)) {
63
+ if (placement[i] === 'flip') {
103
64
  if (
104
- !flip ||
105
- (elAttach[i] === end && isInStartViewport) ||
106
- (elAttach[i] === start && isInEndViewport)
65
+ (targetAttach[i] === end && position[end] <= viewport[end]) ||
66
+ (targetAttach[i] === start && position[start] >= viewport[start])
107
67
  ) {
108
68
  continue;
109
69
  }
110
70
 
111
- offsetBy =
112
- (elAttach[i] === start
113
- ? -position[prop]
114
- : elAttach[i] === end
115
- ? position[prop]
116
- : 0) +
117
- (targetAttach[i] === start
118
- ? targetDim[prop]
119
- : targetAttach[i] === end
120
- ? -targetDim[prop]
121
- : 0) -
122
- elOffset[i] * 2;
71
+ offsetBy = flip(element, target, options, i)[start] - position[start];
123
72
 
124
- if (
125
- !isInScrollArea(
126
- {
127
- ...position,
128
- [start]: position[start] + offsetBy,
129
- [end]: position[end] + offsetBy,
130
- },
131
- scrollElement,
132
- i
133
- )
134
- ) {
135
- if (isInScrollArea(position, scrollElement, i)) {
73
+ if (!isWithin(applyOffset(position, offsetBy, i), scrollArea, i)) {
74
+ if (isWithin(position, scrollArea, i)) {
136
75
  continue;
137
76
  }
138
77
 
@@ -143,14 +82,15 @@ function getPosition(element, target, options) {
143
82
  const newPos = getPosition(element, target, {
144
83
  ...options,
145
84
  attach: {
146
- element: elAttach.map(flipDir).reverse(),
147
- target: targetAttach.map(flipDir).reverse(),
85
+ element: elAttach.map(flipAxis).reverse(),
86
+ target: targetAttach.map(flipAxis).reverse(),
148
87
  },
149
88
  offset: elOffset.reverse(),
89
+ placement: placement.reverse(),
150
90
  recursion: true,
151
91
  });
152
92
 
153
- if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
93
+ if (newPos && isWithin(newPos, scrollArea, 1 - i)) {
154
94
  return newPos;
155
95
  }
156
96
 
@@ -158,7 +98,8 @@ function getPosition(element, target, options) {
158
98
  }
159
99
 
160
100
  // Shift
161
- } else if (shift) {
101
+ } else if (placement[i] === 'shift') {
102
+ const targetDim = offset(target[i]);
162
103
  offsetBy =
163
104
  clamp(
164
105
  clamp(position[start], viewport[start], viewport[end] - position[prop]),
@@ -167,13 +108,54 @@ function getPosition(element, target, options) {
167
108
  ) - position[start];
168
109
  }
169
110
 
170
- offsetPosition[start] = position[dir] = position[start] + offsetBy;
171
- offsetPosition[end] += offsetBy;
111
+ offsetPosition = applyOffset(offsetPosition, offsetBy, i);
172
112
  }
173
113
 
174
114
  return offsetPosition;
175
115
  }
176
116
 
117
+ function attachTo(element, target, options) {
118
+ let { attach, offset: offsetBy } = {
119
+ attach: {
120
+ element: ['left', 'top'],
121
+ target: ['left', 'top'],
122
+ ...options.attach,
123
+ },
124
+ offset: [0, 0],
125
+ ...options,
126
+ };
127
+
128
+ let elOffset = offset(element);
129
+
130
+ for (const [i, [prop, , start, end]] of Object.entries(dirs)) {
131
+ const targetOffset =
132
+ attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);
133
+
134
+ elOffset = applyOffset(
135
+ elOffset,
136
+ targetOffset[start] -
137
+ elOffset[start] +
138
+ moveBy(attach.target[i], end, targetOffset[prop]) -
139
+ moveBy(attach.element[i], end, elOffset[prop]) +
140
+ +offsetBy[i],
141
+ i
142
+ );
143
+ }
144
+ return elOffset;
145
+ }
146
+
147
+ function applyOffset(position, offset, i) {
148
+ const [, dir, start, end] = dirs[i];
149
+ const newPos = { ...position };
150
+ newPos[start] = position[dir] = position[start] + offset;
151
+ newPos[end] += offset;
152
+ return newPos;
153
+ }
154
+
155
+ function moveBy(attach, end, dim) {
156
+ return attach === 'center' ? dim / 2 : attach === end ? dim : 0;
157
+ }
158
+
177
159
  function getIntersectionArea(...rects) {
178
160
  let area = {};
179
161
  for (const rect of rects) {
@@ -185,21 +167,45 @@ function getIntersectionArea(...rects) {
185
167
  return area;
186
168
  }
187
169
 
188
- function isInScrollArea(position, scrollElement, dir) {
189
- const viewport = offsetViewport(scrollElement, false);
190
- const [prop, , start, end] = dirs[dir];
191
- viewport[start] -= scrollElement[`scroll${ucfirst(start)}`];
192
- viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`];
170
+ function getScrollArea(scrollElement, viewportOffset, i) {
171
+ const [prop, , start, end] = dirs[i];
172
+ const viewport = offsetViewport(scrollElement);
173
+ viewport[start] -= scrollElement[`scroll${ucfirst(start)}`] - viewportOffset;
174
+ viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`] - viewportOffset;
175
+ return viewport;
176
+ }
177
+
178
+ function isWithin(positionA, positionB, i) {
179
+ const [, , start, end] = dirs[i];
180
+ return positionA[start] >= positionB[start] && positionA[end] <= positionB[end];
181
+ }
193
182
 
194
- return position[start] >= viewport[start] && position[end] <= viewport[end];
183
+ function flip(element, target, { offset, attach }, i) {
184
+ return attachTo(element, target, {
185
+ attach: {
186
+ element: flipAttach(attach.element, i),
187
+ target: flipAttach(attach.target, i),
188
+ },
189
+ offset: flipOffset(offset, i),
190
+ });
191
+ }
192
+
193
+ function flipAttach(attach, i) {
194
+ const newAttach = [...attach];
195
+ const index = dirs[i].indexOf(attach[i]);
196
+ if (~index) {
197
+ newAttach[i] = dirs[i][1 - (index % 2) + 2];
198
+ }
199
+ return newAttach;
195
200
  }
196
201
 
197
- function intersectLine(dimA, dimB, dir) {
198
- const [, , start, end] = dirs[dir];
199
- return dimA[end] > dimB[start] && dimB[end] > dimA[start];
202
+ function flipOffset(offset, i) {
203
+ offset = [...offset];
204
+ offset[i] *= -1;
205
+ return offset;
200
206
  }
201
207
 
202
- function flipDir(prop) {
208
+ function flipAxis(prop) {
203
209
  for (let i = 0; i < dirs.length; i++) {
204
210
  const index = dirs[i].indexOf(prop);
205
211
  if (~index) {
@@ -20,6 +20,9 @@
20
20
  @dropbar-color: @global-color;
21
21
  @dropbar-color-mode: none;
22
22
 
23
+ @dropbar-large-padding-top: 40px;
24
+ @dropbar-large-padding-bottom: @dropbar-large-padding-top;
25
+
23
26
 
24
27
  /* ========================================================================
25
28
  Component: Dropbar
@@ -81,6 +84,14 @@
81
84
  .uk-dropbar:extend(.uk-light all) when (@dropbar-color-mode = light) {}
82
85
  .uk-dropbar:extend(.uk-dark all) when (@dropbar-color-mode = dark) {}
83
86
 
87
+ /* Size modifier
88
+ ========================================================================== */
89
+
90
+ .uk-dropbar-large {
91
+ padding-top: @dropbar-large-padding-top;
92
+ padding-bottom: @dropbar-large-padding-bottom;
93
+ }
94
+
84
95
 
85
96
  /* Direction modifier
86
97
  ========================================================================== */
@@ -33,6 +33,8 @@
33
33
  @nav-sublist-deeper-padding-left: 15px;
34
34
  @nav-sublist-item-padding-vertical: 2px;
35
35
 
36
+ @nav-parent-icon-margin-left: 4px;
37
+
36
38
  @nav-header-padding-vertical: @nav-item-padding-vertical;
37
39
  @nav-header-padding-horizontal: @nav-item-padding-horizontal;
38
40
  @nav-header-font-size: @global-small-font-size;
@@ -441,7 +443,7 @@ ul.uk-nav-sub {
441
443
  .uk-nav-center .uk-nav-sub ul { padding-left: 0; }
442
444
 
443
445
  /* Parent icon */
444
- .uk-nav-center .uk-nav-parent-icon { margin-left: 0; }
446
+ .uk-nav-center .uk-nav-parent-icon { margin-left: @nav-parent-icon-margin-left; }
445
447
 
446
448
 
447
449
  /* Style modifier
@@ -77,13 +77,17 @@
77
77
  @navbar-dropdown-large-shift-margin: 0;
78
78
  @navbar-dropdown-large-padding: 40px;
79
79
 
80
+ @navbar-dropdown-dropbar-shift-margin: 0;
80
81
  @navbar-dropdown-dropbar-padding-top: @navbar-dropdown-padding;
81
82
  @navbar-dropdown-dropbar-padding-bottom: @navbar-dropdown-dropbar-padding-top;
82
- @navbar-dropdown-dropbar-padding-horizontal: @navbar-nav-item-padding-horizontal;
83
83
  @navbar-dropdown-dropbar-viewport-margin: 15px;
84
84
  @navbar-dropdown-dropbar-viewport-margin-s: @global-gutter;
85
85
  @navbar-dropdown-dropbar-viewport-margin-m: @global-medium-gutter;
86
86
 
87
+ @navbar-dropdown-dropbar-large-shift-margin: 0;
88
+ @navbar-dropdown-dropbar-large-padding-top: @navbar-dropdown-large-padding;
89
+ @navbar-dropdown-dropbar-large-padding-bottom: @navbar-dropdown-dropbar-large-padding-top;
90
+
87
91
  @navbar-dropdown-nav-item-color: @global-muted-color;
88
92
  @navbar-dropdown-nav-item-hover-color: @global-color;
89
93
  @navbar-dropdown-nav-item-active-color: @global-emphasis-color;
@@ -441,6 +445,7 @@
441
445
  .uk-navbar-dropdown-large {
442
446
  --uk-position-shift-offset: @navbar-dropdown-large-shift-margin;
443
447
  padding: @navbar-dropdown-large-padding;
448
+ .hook-navbar-dropdown-large();
444
449
  }
445
450
 
446
451
  /*
@@ -456,9 +461,9 @@
456
461
  /* 2 */
457
462
  background: transparent;
458
463
  /* 3 */
459
- padding: @navbar-dropdown-dropbar-padding-top @navbar-dropdown-dropbar-padding-horizontal @navbar-dropdown-dropbar-padding-bottom @navbar-dropdown-dropbar-padding-horizontal;
464
+ padding: @navbar-dropdown-dropbar-padding-top 0 @navbar-dropdown-dropbar-padding-bottom 0;
460
465
  --uk-position-offset: 0;
461
- --uk-position-shift-offset: 0;
466
+ --uk-position-shift-offset: @navbar-dropdown-dropbar-shift-margin;
462
467
  --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin;
463
468
  .hook-navbar-dropdown-dropbar();
464
469
  }
@@ -477,6 +482,13 @@
477
482
 
478
483
  }
479
484
 
485
+ .uk-navbar-dropdown-dropbar-large {
486
+ --uk-position-shift-offset: @navbar-dropdown-dropbar-large-shift-margin;
487
+ padding-top: @navbar-dropdown-dropbar-large-padding-top;
488
+ padding-bottom: @navbar-dropdown-dropbar-large-padding-bottom;
489
+ .hook-navbar-dropdown-dropbar-large();
490
+ }
491
+
480
492
 
481
493
  /* Dropdown Nav
482
494
  * Adopts `uk-nav`
@@ -586,7 +598,9 @@
586
598
  .hook-navbar-transparent() {}
587
599
  .hook-navbar-sticky() {}
588
600
  .hook-navbar-dropdown() {}
601
+ .hook-navbar-dropdown-large() {}
589
602
  .hook-navbar-dropdown-dropbar() {}
603
+ .hook-navbar-dropdown-dropbar-large() {}
590
604
  .hook-navbar-dropdown-nav() {}
591
605
  .hook-navbar-dropdown-nav-item() {}
592
606
  .hook-navbar-dropdown-nav-item-hover() {}
@@ -20,7 +20,6 @@
20
20
  @navbar-dropdown-margin: 15px;
21
21
  @navbar-dropdown-padding: 25px;
22
22
  @navbar-dropdown-background: @global-background;
23
- @navbar-dropdown-grid-gutter-horizontal: (@navbar-dropdown-padding * 2);
24
23
 
25
24
  @navbar-dropdown-nav-subtitle-font-size: 12px;
26
25
 
@@ -34,9 +33,6 @@
34
33
 
35
34
  @navbar-dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15);
36
35
 
37
- @navbar-dropdown-grid-divider-border-width: @global-border-width;
38
- @navbar-dropdown-grid-divider-border: @navbar-dropdown-nav-divider-border;
39
-
40
36
 
41
37
  // Component
42
38
  // ========================================================================
@@ -105,8 +101,12 @@
105
101
 
106
102
  .hook-navbar-dropdown() { box-shadow: @navbar-dropdown-box-shadow; }
107
103
 
104
+ .hook-navbar-dropdown-large() {}
105
+
108
106
  .hook-navbar-dropdown-dropbar() { box-shadow: none; }
109
107
 
108
+ .hook-navbar-dropdown-dropbar-large() {}
109
+
110
110
 
111
111
  // Dropdown nav
112
112
  // ========================================================================
@@ -133,34 +133,7 @@
133
133
  // Miscellaneous
134
134
  // ========================================================================
135
135
 
136
- .hook-navbar-misc() {
137
-
138
- /*
139
- * Grid Divider
140
- */
141
-
142
- .uk-navbar-dropdown-grid > * { position: relative; }
143
-
144
- .uk-navbar-dropdown-grid > :not(.uk-first-column)::before {
145
- content: "";
146
- position: absolute;
147
- top: 0;
148
- bottom: 0;
149
- left: (@navbar-dropdown-grid-gutter-horizontal / 2);
150
- border-left: @navbar-dropdown-grid-divider-border-width solid @navbar-dropdown-grid-divider-border;
151
- }
152
-
153
- /* Vertical */
154
- .uk-navbar-dropdown-grid.uk-grid-stack > .uk-grid-margin::before {
155
- content: "";
156
- position: absolute;
157
- top: -(@navbar-dropdown-grid-gutter-vertical / 2);
158
- left: @navbar-dropdown-grid-gutter-horizontal;
159
- right: 0;
160
- border-top: @navbar-dropdown-grid-divider-border-width solid @navbar-dropdown-grid-divider-border;
161
- }
162
-
163
- }
136
+ .hook-navbar-misc() {}
164
137
 
165
138
 
166
139
  // Inverse
@@ -20,6 +20,9 @@ $dropbar-background: $global-muted-background !defau
20
20
  $dropbar-color: $global-color !default;
21
21
  $dropbar-color-mode: none !default;
22
22
 
23
+ $dropbar-large-padding-top: 40px !default;
24
+ $dropbar-large-padding-bottom: $dropbar-large-padding-top !default;
25
+
23
26
 
24
27
  /* ========================================================================
25
28
  Component: Dropbar
@@ -81,6 +84,14 @@ $dropbar-color-mode: none !default;
81
84
  @if ( $dropbar-color-mode == light ) { .uk-dropbar { @extend .uk-light !optional;} }
82
85
  @if ( $dropbar-color-mode == dark ) { .uk-dropbar { @extend .uk-dark !optional;} }
83
86
 
87
+ /* Size modifier
88
+ ========================================================================== */
89
+
90
+ .uk-dropbar-large {
91
+ padding-top: $dropbar-large-padding-top;
92
+ padding-bottom: $dropbar-large-padding-bottom;
93
+ }
94
+
84
95
 
85
96
  /* Direction modifier
86
97
  ========================================================================== */
@@ -33,6 +33,8 @@ $nav-sublist-padding-left: 15px !default;
33
33
  $nav-sublist-deeper-padding-left: 15px !default;
34
34
  $nav-sublist-item-padding-vertical: 2px !default;
35
35
 
36
+ $nav-parent-icon-margin-left: 4px !default;
37
+
36
38
  $nav-header-padding-vertical: $nav-item-padding-vertical !default;
37
39
  $nav-header-padding-horizontal: $nav-item-padding-horizontal !default;
38
40
  $nav-header-font-size: $global-small-font-size !default;
@@ -441,7 +443,7 @@ ul.uk-nav-sub {
441
443
  .uk-nav-center .uk-nav-sub ul { padding-left: 0; }
442
444
 
443
445
  /* Parent icon */
444
- .uk-nav-center .uk-nav-parent-icon { margin-left: 0; }
446
+ .uk-nav-center .uk-nav-parent-icon { margin-left: $nav-parent-icon-margin-left; }
445
447
 
446
448
 
447
449
  /* Style modifier
@@ -77,13 +77,17 @@ $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-ho
77
77
  $navbar-dropdown-large-shift-margin: 0 !default;
78
78
  $navbar-dropdown-large-padding: 40px !default;
79
79
 
80
+ $navbar-dropdown-dropbar-shift-margin: 0 !default;
80
81
  $navbar-dropdown-dropbar-padding-top: $navbar-dropdown-padding !default;
81
82
  $navbar-dropdown-dropbar-padding-bottom: $navbar-dropdown-dropbar-padding-top !default;
82
- $navbar-dropdown-dropbar-padding-horizontal: $navbar-nav-item-padding-horizontal !default;
83
83
  $navbar-dropdown-dropbar-viewport-margin: 15px !default;
84
84
  $navbar-dropdown-dropbar-viewport-margin-s: $global-gutter !default;
85
85
  $navbar-dropdown-dropbar-viewport-margin-m: $global-medium-gutter !default;
86
86
 
87
+ $navbar-dropdown-dropbar-large-shift-margin: 0 !default;
88
+ $navbar-dropdown-dropbar-large-padding-top: $navbar-dropdown-large-padding !default;
89
+ $navbar-dropdown-dropbar-large-padding-bottom: $navbar-dropdown-dropbar-large-padding-top !default;
90
+
87
91
  $navbar-dropdown-nav-item-color: $global-muted-color !default;
88
92
  $navbar-dropdown-nav-item-hover-color: $global-color !default;
89
93
  $navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
@@ -441,6 +445,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
441
445
  .uk-navbar-dropdown-large {
442
446
  --uk-position-shift-offset: #{$navbar-dropdown-large-shift-margin};
443
447
  padding: $navbar-dropdown-large-padding;
448
+ @if(mixin-exists(hook-navbar-dropdown-large)) {@include hook-navbar-dropdown-large();}
444
449
  }
445
450
 
446
451
  /*
@@ -456,9 +461,9 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
456
461
  /* 2 */
457
462
  background: transparent;
458
463
  /* 3 */
459
- padding: $navbar-dropdown-dropbar-padding-top $navbar-dropdown-dropbar-padding-horizontal $navbar-dropdown-dropbar-padding-bottom $navbar-dropdown-dropbar-padding-horizontal;
464
+ padding: $navbar-dropdown-dropbar-padding-top 0 $navbar-dropdown-dropbar-padding-bottom 0;
460
465
  --uk-position-offset: 0;
461
- --uk-position-shift-offset: 0;
466
+ --uk-position-shift-offset: #{$navbar-dropdown-dropbar-shift-margin};
462
467
  --uk-position-viewport-offset: #{$navbar-dropdown-dropbar-viewport-margin};
463
468
  @if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
464
469
  }
@@ -477,6 +482,13 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
477
482
 
478
483
  }
479
484
 
485
+ .uk-navbar-dropdown-dropbar-large {
486
+ --uk-position-shift-offset: #{$navbar-dropdown-dropbar-large-shift-margin};
487
+ padding-top: $navbar-dropdown-dropbar-large-padding-top;
488
+ padding-bottom: $navbar-dropdown-dropbar-large-padding-bottom;
489
+ @if(mixin-exists(hook-navbar-dropdown-dropbar-large)) {@include hook-navbar-dropdown-dropbar-large();}
490
+ }
491
+
480
492
 
481
493
  /* Dropdown Nav
482
494
  * Adopts `uk-nav`
@@ -586,7 +598,9 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
586
598
  // @mixin hook-navbar-transparent(){}
587
599
  // @mixin hook-navbar-sticky(){}
588
600
  // @mixin hook-navbar-dropdown(){}
601
+ // @mixin hook-navbar-dropdown-large(){}
589
602
  // @mixin hook-navbar-dropdown-dropbar(){}
603
+ // @mixin hook-navbar-dropdown-dropbar-large(){}
590
604
  // @mixin hook-navbar-dropdown-nav(){}
591
605
  // @mixin hook-navbar-dropdown-nav-item(){}
592
606
  // @mixin hook-navbar-dropdown-nav-item-hover(){}
@@ -1826,7 +1826,9 @@
1826
1826
  @mixin hook-navbar-transparent(){}
1827
1827
  @mixin hook-navbar-sticky(){}
1828
1828
  @mixin hook-navbar-dropdown(){ box-shadow: $navbar-dropdown-box-shadow; }
1829
+ @mixin hook-navbar-dropdown-large(){}
1829
1830
  @mixin hook-navbar-dropdown-dropbar(){ box-shadow: none; }
1831
+ @mixin hook-navbar-dropdown-dropbar-large(){}
1830
1832
  @mixin hook-navbar-dropdown-nav(){ font-size: $navbar-dropdown-nav-font-size; }
1831
1833
  @mixin hook-navbar-dropdown-nav-item(){}
1832
1834
  @mixin hook-navbar-dropdown-nav-item-hover(){}
@@ -1835,34 +1837,7 @@
1835
1837
  @mixin hook-navbar-dropdown-nav-header(){}
1836
1838
  @mixin hook-navbar-dropdown-nav-divider(){}
1837
1839
  @mixin hook-navbar-dropbar(){}
1838
- @mixin hook-navbar-misc(){
1839
-
1840
- /*
1841
- * Grid Divider
1842
- */
1843
-
1844
- .uk-navbar-dropdown-grid > * { position: relative; }
1845
-
1846
- .uk-navbar-dropdown-grid > :not(.uk-first-column)::before {
1847
- content: "";
1848
- position: absolute;
1849
- top: 0;
1850
- bottom: 0;
1851
- left: ($navbar-dropdown-grid-gutter-horizontal * 0.5);
1852
- border-left: $navbar-dropdown-grid-divider-border-width solid $navbar-dropdown-grid-divider-border;
1853
- }
1854
-
1855
- /* Vertical */
1856
- .uk-navbar-dropdown-grid.uk-grid-stack > .uk-grid-margin::before {
1857
- content: "";
1858
- position: absolute;
1859
- top: -($navbar-dropdown-grid-gutter-vertical * 0.5);
1860
- left: $navbar-dropdown-grid-gutter-horizontal;
1861
- right: 0;
1862
- border-top: $navbar-dropdown-grid-divider-border-width solid $navbar-dropdown-grid-divider-border;
1863
- }
1864
-
1865
- }
1840
+ @mixin hook-navbar-misc(){}
1866
1841
  @mixin hook-inverse-navbar-nav-item(){}
1867
1842
  @mixin hook-inverse-navbar-nav-item-hover(){}
1868
1843
  @mixin hook-inverse-navbar-nav-item-onclick(){}
@@ -1550,7 +1550,9 @@
1550
1550
  @mixin hook-navbar-transparent(){}
1551
1551
  @mixin hook-navbar-sticky(){}
1552
1552
  @mixin hook-navbar-dropdown(){}
1553
+ @mixin hook-navbar-dropdown-large(){}
1553
1554
  @mixin hook-navbar-dropdown-dropbar(){}
1555
+ @mixin hook-navbar-dropdown-dropbar-large(){}
1554
1556
  @mixin hook-navbar-dropdown-nav(){}
1555
1557
  @mixin hook-navbar-dropdown-nav-item(){}
1556
1558
  @mixin hook-navbar-dropdown-nav-item-hover(){}
@@ -20,7 +20,6 @@ $navbar-item-padding-horizontal: 0 !default;
20
20
  $navbar-dropdown-margin: 15px !default;
21
21
  $navbar-dropdown-padding: 25px !default;
22
22
  $navbar-dropdown-background: $global-background !default;
23
- $navbar-dropdown-grid-gutter-horizontal: ($navbar-dropdown-padding * 2) !default;
24
23
 
25
24
  $navbar-dropdown-nav-subtitle-font-size: 12px !default;
26
25
 
@@ -34,9 +33,6 @@ $navbar-dropdown-nav-font-size: $global-small-font-size !defaul
34
33
 
35
34
  $navbar-dropdown-box-shadow: 0 5px 12px rgba(0,0,0,0.15) !default;
36
35
 
37
- $navbar-dropdown-grid-divider-border-width: $global-border-width !default;
38
- $navbar-dropdown-grid-divider-border: $navbar-dropdown-nav-divider-border !default;
39
-
40
36
 
41
37
  // Component
42
38
  // ========================================================================
@@ -101,8 +97,12 @@ $navbar-dropdown-grid-divider-border: $navbar-dropdown-nav-divider-bo
101
97
 
102
98
 
103
99
 
100
+ // @mixin hook-navbar-dropdown-large(){}
101
+
104
102
 
105
103
 
104
+ // @mixin hook-navbar-dropdown-dropbar-large(){}
105
+
106
106
 
107
107
  // Dropdown nav
108
108
  // ========================================================================
@@ -129,7 +129,7 @@ $navbar-dropdown-grid-divider-border: $navbar-dropdown-nav-divider-bo
129
129
  // Miscellaneous
130
130
  // ========================================================================
131
131
 
132
-
132
+ // @mixin hook-navbar-misc(){}
133
133
 
134
134
 
135
135
  // Inverse