uikit 3.13.7-dev.120e5ee9c → 3.13.8-dev.128538499

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 (74) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/dist/css/uikit-core-rtl.css +34 -5
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +34 -5
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +34 -3
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +34 -3
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -1
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +13 -10
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +13 -10
  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 +13 -10
  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 +59 -29
  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 +211 -195
  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 +248 -199
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +5 -5
  43. package/src/js/api/hooks.js +1 -1
  44. package/src/js/components/tooltip.js +38 -3
  45. package/src/js/core/accordion.js +1 -1
  46. package/src/js/core/drop.js +10 -6
  47. package/src/js/core/height-match.js +7 -15
  48. package/src/js/core/navbar.js +1 -1
  49. package/src/js/core/scrollspy.js +39 -17
  50. package/src/js/core/sticky.js +2 -2
  51. package/src/js/mixin/media.js +12 -9
  52. package/src/js/mixin/position.js +22 -24
  53. package/src/js/util/position.js +128 -129
  54. package/src/less/components/dropdown.less +11 -1
  55. package/src/less/components/nav.less +22 -0
  56. package/src/less/components/navbar.less +22 -2
  57. package/src/less/theme/dropdown.less +2 -0
  58. package/src/less/theme/nav.less +4 -0
  59. package/src/less/theme/navbar.less +2 -0
  60. package/src/scss/components/dropdown.scss +11 -1
  61. package/src/scss/components/nav.scss +22 -0
  62. package/src/scss/components/navbar.scss +22 -2
  63. package/src/scss/mixins-theme.scss +4 -0
  64. package/src/scss/mixins.scss +4 -0
  65. package/src/scss/theme/dropdown.scss +2 -0
  66. package/src/scss/theme/nav.scss +4 -0
  67. package/src/scss/theme/navbar.scss +2 -0
  68. package/src/scss/variables-theme.scss +5 -1
  69. package/src/scss/variables.scss +5 -1
  70. package/tests/drop.html +0 -6
  71. package/tests/dropdown.html +18 -10
  72. package/tests/nav.html +27 -0
  73. package/tests/navbar.html +18 -4
  74. package/tests/position.html +38 -39
@@ -1,156 +1,155 @@
1
1
  import { offset } from './dimensions';
2
- import { each, endsWith, includes, toFloat } from './lang';
2
+ import { clamp, includes } from './lang';
3
3
  import { getViewport, scrollParents } from './viewport';
4
4
 
5
- const dirs = {
6
- width: ['x', 'left', 'right'],
7
- height: ['y', 'top', 'bottom'],
8
- };
9
-
10
- export function positionAt(
11
- element,
12
- target,
13
- elAttach,
14
- targetAttach,
15
- elOffset,
16
- targetOffset,
17
- flip,
18
- boundary
19
- ) {
20
- elAttach = getPos(elAttach);
21
- targetAttach = getPos(targetAttach);
22
-
23
- const flipped = { element: elAttach, target: targetAttach };
24
-
25
- if (!element || !target) {
26
- return flipped;
5
+ const dirs = [
6
+ ['width', 'x', 'left', 'right'],
7
+ ['height', 'y', 'top', 'bottom'],
8
+ ];
9
+
10
+ export function positionAt(element, target, options) {
11
+ options = {
12
+ attach: {
13
+ element: ['left', 'top'],
14
+ target: ['left', 'top'],
15
+ ...options.attach,
16
+ },
17
+ offset: [0, 0],
18
+ ...options,
19
+ };
20
+
21
+ const dim = options.flip
22
+ ? attachToWithFlip(element, target, options)
23
+ : attachTo(element, target, options);
24
+
25
+ offset(element, dim);
26
+ }
27
+
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
+ const targetOffset = offset(target);
41
+ for (const i in dirs) {
42
+ const [prop, dir, start, end] = dirs[i];
43
+ position[start] = position[dir] =
44
+ targetOffset[start] +
45
+ moveBy(attach.target[i], end, targetOffset[prop]) -
46
+ moveBy(attach.element[i], end, position[prop]) +
47
+ +offsetBy[i];
48
+ position[end] = position[start] + position[prop];
27
49
  }
50
+ return position;
51
+ }
28
52
 
29
- const dim = offset(element);
53
+ function attachToWithFlip(element, target, options) {
54
+ const position = attachTo(element, target, options);
30
55
  const targetDim = offset(target);
31
- const position = targetDim;
56
+ const viewports = scrollParents(element).map(getViewport);
57
+
58
+ let {
59
+ flip,
60
+ attach: { element: elAttach, target: targetAttach },
61
+ offset: elOffset,
62
+ boundary,
63
+ viewport,
64
+ } = options;
32
65
 
33
- moveTo(position, elAttach, dim, -1);
34
- moveTo(position, targetAttach, targetDim, 1);
66
+ viewports.push(viewport);
35
67
 
36
- elOffset = getOffsets(elOffset, dim.width, dim.height);
37
- targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);
68
+ for (const i in dirs) {
69
+ const [prop, dir, start, end] = dirs[i];
38
70
 
39
- elOffset['x'] += targetOffset['x'];
40
- elOffset['y'] += targetOffset['y'];
71
+ if (flip !== true && !includes(flip, dir)) {
72
+ continue;
73
+ }
41
74
 
42
- position.left += elOffset['x'];
43
- position.top += elOffset['y'];
75
+ const willFlip =
76
+ !intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i);
44
77
 
45
- if (flip) {
46
- let boundaries = scrollParents(element).map(getViewport);
78
+ viewport = getIntersectionArea(
79
+ ...viewports,
80
+ willFlip || position[prop] > offset(boundary)[prop] ? null : boundary
81
+ );
82
+ const isInStartBoundary = position[start] >= viewport[start];
83
+ const isInEndBoundary = position[end] <= viewport[end];
47
84
 
48
- if (boundary && !includes(boundaries, boundary)) {
49
- boundaries.unshift(boundary);
85
+ if (isInStartBoundary && isInEndBoundary) {
86
+ continue;
50
87
  }
51
88
 
52
- boundaries = boundaries.map((el) => offset(el));
89
+ let offsetBy;
53
90
 
54
- each(dirs, ([dir, align, alignFlip], prop) => {
55
- if (!(flip === true || includes(flip, dir))) {
56
- return;
91
+ // Flip
92
+ if (willFlip) {
93
+ if (
94
+ (elAttach[i] === end && isInStartBoundary) ||
95
+ (elAttach[i] === start && isInEndBoundary)
96
+ ) {
97
+ continue;
57
98
  }
58
99
 
59
- boundaries.some((boundary) => {
60
- const elemOffset =
61
- elAttach[dir] === align
62
- ? -dim[prop]
63
- : elAttach[dir] === alignFlip
64
- ? dim[prop]
65
- : 0;
66
-
67
- const targetOffset =
68
- targetAttach[dir] === align
69
- ? targetDim[prop]
70
- : targetAttach[dir] === alignFlip
71
- ? -targetDim[prop]
72
- : 0;
73
-
74
- if (
75
- position[align] < boundary[align] ||
76
- position[align] + dim[prop] > boundary[alignFlip]
77
- ) {
78
- const centerOffset = dim[prop] / 2;
79
- const centerTargetOffset =
80
- targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;
81
-
82
- return (
83
- (elAttach[dir] === 'center' &&
84
- (apply(centerOffset, centerTargetOffset) ||
85
- apply(-centerOffset, -centerTargetOffset))) ||
86
- apply(elemOffset, targetOffset)
87
- );
88
- }
89
-
90
- function apply(elemOffset, targetOffset) {
91
- const newVal = toFloat(
92
- (position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4)
93
- );
94
-
95
- if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {
96
- position[align] = newVal;
97
-
98
- for (const el of ['element', 'target']) {
99
- if (elemOffset) {
100
- flipped[el][dir] =
101
- flipped[el][dir] === dirs[prop][1]
102
- ? dirs[prop][2]
103
- : dirs[prop][1];
104
- }
105
- }
106
-
107
- return true;
108
- }
109
- }
110
- });
111
- });
112
- }
100
+ offsetBy =
101
+ (elAttach[i] === start
102
+ ? -position[prop]
103
+ : elAttach[i] === end
104
+ ? position[prop]
105
+ : 0) +
106
+ (targetAttach[i] === start
107
+ ? targetDim[prop]
108
+ : targetAttach[i] === end
109
+ ? -targetDim[prop]
110
+ : 0) -
111
+ elOffset[i] * 2;
112
+
113
+ // Move
114
+ } else {
115
+ offsetBy =
116
+ clamp(
117
+ clamp(position[start], viewport[start], viewport[end] - position[prop]),
118
+ targetDim[start] - position[prop] + elOffset[i],
119
+ targetDim[end] - elOffset[i]
120
+ ) - position[start];
121
+ }
113
122
 
114
- offset(element, position);
123
+ position[start] = position[dir] = position[start] + offsetBy;
124
+ position[end] += offsetBy;
125
+ }
115
126
 
116
- return flipped;
127
+ return position;
117
128
  }
118
129
 
119
- function moveTo(position, attach, dim, factor) {
120
- each(dirs, ([dir, align, alignFlip], prop) => {
121
- if (attach[dir] === alignFlip) {
122
- position[align] += dim[prop] * factor;
123
- } else if (attach[dir] === 'center') {
124
- position[align] += (dim[prop] * factor) / 2;
125
- }
126
- });
130
+ function moveBy(start, end, dim) {
131
+ return start === 'center' ? dim / 2 : start === end ? dim : 0;
127
132
  }
128
133
 
129
- function getPos(pos) {
130
- const x = /left|center|right/;
131
- const y = /top|center|bottom/;
132
-
133
- pos = (pos || '').split(' ');
134
-
135
- if (pos.length === 1) {
136
- pos = x.test(pos[0])
137
- ? pos.concat('center')
138
- : y.test(pos[0])
139
- ? ['center'].concat(pos)
140
- : ['center', 'center'];
134
+ function getIntersectionArea(...elements) {
135
+ let intersection;
136
+ for (const el of elements.filter(Boolean)) {
137
+ const rect = offset(el);
138
+ if (!intersection) {
139
+ intersection = rect;
140
+ continue;
141
+ }
142
+ for (const prop of ['left', 'top']) {
143
+ intersection[prop] = Math.max(rect[prop], intersection[prop]);
144
+ }
145
+ for (const prop of ['right', 'bottom']) {
146
+ intersection[prop] = Math.min(rect[prop], intersection[prop]);
147
+ }
141
148
  }
142
-
143
- return {
144
- x: x.test(pos[0]) ? pos[0] : 'center',
145
- y: y.test(pos[1]) ? pos[1] : 'center',
146
- };
149
+ return intersection;
147
150
  }
148
151
 
149
- function getOffsets(offsets, width, height) {
150
- const [x, y] = (offsets || '').split(' ');
151
-
152
- return {
153
- x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,
154
- y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0,
155
- };
152
+ function intersectLine(dimA, dimB, dir) {
153
+ const [, , start, end] = dirs[dir];
154
+ return dimA[end] > dimB[start] && dimB[end] > dimA[start];
156
155
  }
@@ -29,6 +29,7 @@
29
29
 
30
30
  @dropdown-nav-item-color: @global-muted-color;
31
31
  @dropdown-nav-item-hover-color: @global-color;
32
+ @dropdown-nav-subtitle-font-size: @global-small-font-size;
32
33
  @dropdown-nav-header-color: @global-emphasis-color;
33
34
  @dropdown-nav-divider-border-width: @global-border-width;
34
35
  @dropdown-nav-divider-border: @global-border;
@@ -74,7 +75,6 @@
74
75
  ========================================================================== */
75
76
 
76
77
  .uk-dropdown-nav {
77
- white-space: nowrap;
78
78
  .hook-dropdown-nav();
79
79
  }
80
80
 
@@ -94,6 +94,15 @@
94
94
  .hook-dropdown-nav-item-hover();
95
95
  }
96
96
 
97
+ /*
98
+ * Subtitle
99
+ */
100
+
101
+ .uk-dropdown-nav .uk-nav-subtitle {
102
+ font-size: @dropdown-nav-subtitle-font-size;
103
+ .hook-dropdown-nav-subtitle();
104
+ }
105
+
97
106
  /*
98
107
  * Header
99
108
  */
@@ -138,6 +147,7 @@
138
147
  .hook-dropdown-nav() {}
139
148
  .hook-dropdown-nav-item() {}
140
149
  .hook-dropdown-nav-item-hover() {}
150
+ .hook-dropdown-nav-subtitle() {}
141
151
  .hook-dropdown-nav-header() {}
142
152
  .hook-dropdown-nav-divider() {}
143
153
  .hook-dropdown-misc() {}
@@ -48,6 +48,7 @@
48
48
  @nav-default-item-color: @global-muted-color;
49
49
  @nav-default-item-hover-color: @global-color;
50
50
  @nav-default-item-active-color: @global-emphasis-color;
51
+ @nav-default-subtitle-font-size: @global-small-font-size;
51
52
  @nav-default-header-color: @global-emphasis-color;
52
53
  @nav-default-divider-border-width: @global-border-width;
53
54
  @nav-default-divider-border: @global-border;
@@ -60,6 +61,7 @@
60
61
  @nav-primary-item-color: @global-muted-color;
61
62
  @nav-primary-item-hover-color: @global-color;
62
63
  @nav-primary-item-active-color: @global-emphasis-color;
64
+ @nav-primary-subtitle-font-size: @global-medium-font-size;
63
65
  @nav-primary-header-color: @global-emphasis-color;
64
66
  @nav-primary-divider-border-width: @global-border-width;
65
67
  @nav-primary-divider-border: @global-border;
@@ -207,6 +209,15 @@ ul.uk-nav-sub {
207
209
  .hook-nav-default-item-active();
208
210
  }
209
211
 
212
+ /*
213
+ * Subtitle
214
+ */
215
+
216
+ .uk-nav-default .uk-nav-subtitle {
217
+ font-size: @nav-default-subtitle-font-size;
218
+ .hook-nav-default-subtitle();
219
+ }
220
+
210
221
  /*
211
222
  * Header
212
223
  */
@@ -266,6 +277,15 @@ ul.uk-nav-sub {
266
277
  .hook-nav-primary-item-active();
267
278
  }
268
279
 
280
+ /*
281
+ * Subtitle
282
+ */
283
+
284
+ .uk-nav-primary .uk-nav-subtitle {
285
+ font-size: @nav-primary-subtitle-font-size;
286
+ .hook-nav-primary-subtitle();
287
+ }
288
+
269
289
  /*
270
290
  * Header
271
291
  */
@@ -340,12 +360,14 @@ ul.uk-nav-sub {
340
360
  .hook-nav-default-item() {}
341
361
  .hook-nav-default-item-hover() {}
342
362
  .hook-nav-default-item-active() {}
363
+ .hook-nav-default-subtitle() {}
343
364
  .hook-nav-default-header() {}
344
365
  .hook-nav-default-divider() {}
345
366
  .hook-nav-primary() {}
346
367
  .hook-nav-primary-item() {}
347
368
  .hook-nav-primary-item-hover() {}
348
369
  .hook-nav-primary-item-active() {}
370
+ .hook-nav-primary-subtitle() {}
349
371
  .hook-nav-primary-header() {}
350
372
  .hook-nav-primary-divider() {}
351
373
  .hook-nav-dividers() {}
@@ -66,11 +66,12 @@
66
66
 
67
67
  @navbar-dropdown-dropbar-margin-top: 0px;
68
68
  @navbar-dropdown-dropbar-margin-bottom: @navbar-dropdown-dropbar-margin-top;
69
- @navbar-dropdown-dropbar-padding: @navbar-nav-item-padding-horizontal;
69
+ @navbar-dropdown-dropbar-padding-horizontal: @navbar-nav-item-padding-horizontal;
70
70
 
71
71
  @navbar-dropdown-nav-item-color: @global-muted-color;
72
72
  @navbar-dropdown-nav-item-hover-color: @global-color;
73
73
  @navbar-dropdown-nav-item-active-color: @global-emphasis-color;
74
+ @navbar-dropdown-nav-subtitle-font-size: @global-small-font-size;
74
75
  @navbar-dropdown-nav-header-color: @global-emphasis-color;
75
76
  @navbar-dropdown-nav-divider-border-width: @global-border-width;
76
77
  @navbar-dropdown-nav-divider-border: @global-border;
@@ -393,6 +394,7 @@
393
394
  * 1. Set position
394
395
  * 2. Bottom padding for dropbar
395
396
  * 3. Horizontal padding
397
+ * 4. Reset padding if aligned to boundary
396
398
  */
397
399
 
398
400
  .uk-navbar-dropdown-dropbar {
@@ -400,10 +402,18 @@
400
402
  --uk-position-offset: @navbar-dropdown-dropbar-margin-top;
401
403
  /* 2 */
402
404
  margin-bottom: @navbar-dropdown-dropbar-margin-bottom;
403
- padding: @navbar-dropdown-dropbar-padding;
405
+ /* 3 */
406
+ padding-left: @navbar-dropdown-dropbar-padding-horizontal;
407
+ padding-right: @navbar-dropdown-dropbar-padding-horizontal;
404
408
  .hook-navbar-dropdown-dropbar();
405
409
  }
406
410
 
411
+ /* 4 */
412
+ .uk-navbar-dropdown-dropbar.uk-navbar-dropdown-boundary {
413
+ padding-left: 0;
414
+ padding-right: 0;
415
+ }
416
+
407
417
 
408
418
  /* Dropdown Nav
409
419
  * Adopts `uk-nav`
@@ -434,6 +444,15 @@
434
444
  .hook-navbar-dropdown-nav-item-active();
435
445
  }
436
446
 
447
+ /*
448
+ * Subtitle
449
+ */
450
+
451
+ .uk-navbar-dropdown-nav .uk-nav-subtitle {
452
+ font-size: @navbar-dropdown-nav-subtitle-font-size;
453
+ .hook-navbar-dropdown-nav-subtitle();
454
+ }
455
+
437
456
  /*
438
457
  * Header
439
458
  */
@@ -502,6 +521,7 @@
502
521
  .hook-navbar-dropdown-nav-item() {}
503
522
  .hook-navbar-dropdown-nav-item-hover() {}
504
523
  .hook-navbar-dropdown-nav-item-active() {}
524
+ .hook-navbar-dropdown-nav-subtitle() {}
505
525
  .hook-navbar-dropdown-nav-header() {}
506
526
  .hook-navbar-dropdown-nav-divider() {}
507
527
  .hook-navbar-dropbar(){}
@@ -34,6 +34,8 @@
34
34
 
35
35
  .hook-dropdown-nav-item-hover() {}
36
36
 
37
+ .hook-dropdown-nav-subtitle() {}
38
+
37
39
  .hook-dropdown-nav-header() {}
38
40
 
39
41
  .hook-dropdown-nav-divider() {}
@@ -49,6 +49,8 @@
49
49
 
50
50
  .hook-nav-default-item-active() {}
51
51
 
52
+ .hook-nav-default-subtitle() {}
53
+
52
54
  .hook-nav-default-header() {}
53
55
 
54
56
  .hook-nav-default-divider() {}
@@ -65,6 +67,8 @@
65
67
 
66
68
  .hook-nav-primary-item-active() {}
67
69
 
70
+ .hook-nav-primary-subtitle() {}
71
+
68
72
  .hook-nav-primary-header() {}
69
73
 
70
74
  .hook-nav-primary-divider() {}
@@ -109,6 +109,8 @@
109
109
 
110
110
  .hook-navbar-dropdown-nav-item-hover() {}
111
111
 
112
+ .hook-navbar-dropdown-nav-subtitle() {}
113
+
112
114
  .hook-navbar-dropdown-nav-header() {}
113
115
 
114
116
  .hook-navbar-dropdown-nav-divider() {}
@@ -29,6 +29,7 @@ $dropdown-color: $global-color !default;
29
29
 
30
30
  $dropdown-nav-item-color: $global-muted-color !default;
31
31
  $dropdown-nav-item-hover-color: $global-color !default;
32
+ $dropdown-nav-subtitle-font-size: $global-small-font-size !default;
32
33
  $dropdown-nav-header-color: $global-emphasis-color !default;
33
34
  $dropdown-nav-divider-border-width: $global-border-width !default;
34
35
  $dropdown-nav-divider-border: $global-border !default;
@@ -74,7 +75,6 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
74
75
  ========================================================================== */
75
76
 
76
77
  .uk-dropdown-nav {
77
- white-space: nowrap;
78
78
  @if(mixin-exists(hook-dropdown-nav)) {@include hook-dropdown-nav();}
79
79
  }
80
80
 
@@ -94,6 +94,15 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
94
94
  @if(mixin-exists(hook-dropdown-nav-item-hover)) {@include hook-dropdown-nav-item-hover();}
95
95
  }
96
96
 
97
+ /*
98
+ * Subtitle
99
+ */
100
+
101
+ .uk-dropdown-nav .uk-nav-subtitle {
102
+ font-size: $dropdown-nav-subtitle-font-size;
103
+ @if(mixin-exists(hook-dropdown-nav-subtitle)) {@include hook-dropdown-nav-subtitle();}
104
+ }
105
+
97
106
  /*
98
107
  * Header
99
108
  */
@@ -138,6 +147,7 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
138
147
  // @mixin hook-dropdown-nav(){}
139
148
  // @mixin hook-dropdown-nav-item(){}
140
149
  // @mixin hook-dropdown-nav-item-hover(){}
150
+ // @mixin hook-dropdown-nav-subtitle(){}
141
151
  // @mixin hook-dropdown-nav-header(){}
142
152
  // @mixin hook-dropdown-nav-divider(){}
143
153
  // @mixin hook-dropdown-misc(){}
@@ -48,6 +48,7 @@ $nav-divider-margin-horizontal: 0 !default;
48
48
  $nav-default-item-color: $global-muted-color !default;
49
49
  $nav-default-item-hover-color: $global-color !default;
50
50
  $nav-default-item-active-color: $global-emphasis-color !default;
51
+ $nav-default-subtitle-font-size: $global-small-font-size !default;
51
52
  $nav-default-header-color: $global-emphasis-color !default;
52
53
  $nav-default-divider-border-width: $global-border-width !default;
53
54
  $nav-default-divider-border: $global-border !default;
@@ -60,6 +61,7 @@ $nav-primary-item-line-height: $global-line-height !default;
60
61
  $nav-primary-item-color: $global-muted-color !default;
61
62
  $nav-primary-item-hover-color: $global-color !default;
62
63
  $nav-primary-item-active-color: $global-emphasis-color !default;
64
+ $nav-primary-subtitle-font-size: $global-medium-font-size !default;
63
65
  $nav-primary-header-color: $global-emphasis-color !default;
64
66
  $nav-primary-divider-border-width: $global-border-width !default;
65
67
  $nav-primary-divider-border: $global-border !default;
@@ -207,6 +209,15 @@ ul.uk-nav-sub {
207
209
  @if(mixin-exists(hook-nav-default-item-active)) {@include hook-nav-default-item-active();}
208
210
  }
209
211
 
212
+ /*
213
+ * Subtitle
214
+ */
215
+
216
+ .uk-nav-default .uk-nav-subtitle {
217
+ font-size: $nav-default-subtitle-font-size;
218
+ @if(mixin-exists(hook-nav-default-subtitle)) {@include hook-nav-default-subtitle();}
219
+ }
220
+
210
221
  /*
211
222
  * Header
212
223
  */
@@ -266,6 +277,15 @@ ul.uk-nav-sub {
266
277
  @if(mixin-exists(hook-nav-primary-item-active)) {@include hook-nav-primary-item-active();}
267
278
  }
268
279
 
280
+ /*
281
+ * Subtitle
282
+ */
283
+
284
+ .uk-nav-primary .uk-nav-subtitle {
285
+ font-size: $nav-primary-subtitle-font-size;
286
+ @if(mixin-exists(hook-nav-primary-subtitle)) {@include hook-nav-primary-subtitle();}
287
+ }
288
+
269
289
  /*
270
290
  * Header
271
291
  */
@@ -340,12 +360,14 @@ ul.uk-nav-sub {
340
360
  // @mixin hook-nav-default-item(){}
341
361
  // @mixin hook-nav-default-item-hover(){}
342
362
  // @mixin hook-nav-default-item-active(){}
363
+ // @mixin hook-nav-default-subtitle(){}
343
364
  // @mixin hook-nav-default-header(){}
344
365
  // @mixin hook-nav-default-divider(){}
345
366
  // @mixin hook-nav-primary(){}
346
367
  // @mixin hook-nav-primary-item(){}
347
368
  // @mixin hook-nav-primary-item-hover(){}
348
369
  // @mixin hook-nav-primary-item-active(){}
370
+ // @mixin hook-nav-primary-subtitle(){}
349
371
  // @mixin hook-nav-primary-header(){}
350
372
  // @mixin hook-nav-primary-divider(){}
351
373
  // @mixin hook-nav-dividers(){}
@@ -66,11 +66,12 @@ $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-ho
66
66
 
67
67
  $navbar-dropdown-dropbar-margin-top: 0px !default;
68
68
  $navbar-dropdown-dropbar-margin-bottom: $navbar-dropdown-dropbar-margin-top !default;
69
- $navbar-dropdown-dropbar-padding: $navbar-nav-item-padding-horizontal !default;
69
+ $navbar-dropdown-dropbar-padding-horizontal: $navbar-nav-item-padding-horizontal !default;
70
70
 
71
71
  $navbar-dropdown-nav-item-color: $global-muted-color !default;
72
72
  $navbar-dropdown-nav-item-hover-color: $global-color !default;
73
73
  $navbar-dropdown-nav-item-active-color: $global-emphasis-color !default;
74
+ $navbar-dropdown-nav-subtitle-font-size: $global-small-font-size !default;
74
75
  $navbar-dropdown-nav-header-color: $global-emphasis-color !default;
75
76
  $navbar-dropdown-nav-divider-border-width: $global-border-width !default;
76
77
  $navbar-dropdown-nav-divider-border: $global-border !default;
@@ -393,6 +394,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
393
394
  * 1. Set position
394
395
  * 2. Bottom padding for dropbar
395
396
  * 3. Horizontal padding
397
+ * 4. Reset padding if aligned to boundary
396
398
  */
397
399
 
398
400
  .uk-navbar-dropdown-dropbar {
@@ -400,10 +402,18 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
400
402
  --uk-position-offset: #{$navbar-dropdown-dropbar-margin-top};
401
403
  /* 2 */
402
404
  margin-bottom: $navbar-dropdown-dropbar-margin-bottom;
403
- padding: $navbar-dropdown-dropbar-padding;
405
+ /* 3 */
406
+ padding-left: $navbar-dropdown-dropbar-padding-horizontal;
407
+ padding-right: $navbar-dropdown-dropbar-padding-horizontal;
404
408
  @if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
405
409
  }
406
410
 
411
+ /* 4 */
412
+ .uk-navbar-dropdown-dropbar.uk-navbar-dropdown-boundary {
413
+ padding-left: 0;
414
+ padding-right: 0;
415
+ }
416
+
407
417
 
408
418
  /* Dropdown Nav
409
419
  * Adopts `uk-nav`
@@ -434,6 +444,15 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
434
444
  @if(mixin-exists(hook-navbar-dropdown-nav-item-active)) {@include hook-navbar-dropdown-nav-item-active();}
435
445
  }
436
446
 
447
+ /*
448
+ * Subtitle
449
+ */
450
+
451
+ .uk-navbar-dropdown-nav .uk-nav-subtitle {
452
+ font-size: $navbar-dropdown-nav-subtitle-font-size;
453
+ @if(mixin-exists(hook-navbar-dropdown-nav-subtitle)) {@include hook-navbar-dropdown-nav-subtitle();}
454
+ }
455
+
437
456
  /*
438
457
  * Header
439
458
  */
@@ -502,6 +521,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
502
521
  // @mixin hook-navbar-dropdown-nav-item(){}
503
522
  // @mixin hook-navbar-dropdown-nav-item-hover(){}
504
523
  // @mixin hook-navbar-dropdown-nav-item-active(){}
524
+ // @mixin hook-navbar-dropdown-nav-subtitle(){}
505
525
  // @mixin hook-navbar-dropdown-nav-header(){}
506
526
  // @mixin hook-navbar-dropdown-nav-divider(){}
507
527
  // @mixin hook-navbar-dropbar(){}