bootstrap 4.6.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap/alert.js +192 -112
  5. data/assets/javascripts/bootstrap/base-component.js +63 -0
  6. data/assets/javascripts/bootstrap/button.js +96 -176
  7. data/assets/javascripts/bootstrap/carousel.js +470 -355
  8. data/assets/javascripts/bootstrap/collapse.js +377 -221
  9. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +322 -0
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  13. data/assets/javascripts/bootstrap/dropdown.js +470 -351
  14. data/assets/javascripts/bootstrap/modal.js +611 -435
  15. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  16. data/assets/javascripts/bootstrap/popover.js +137 -165
  17. data/assets/javascripts/bootstrap/scrollspy.js +249 -191
  18. data/assets/javascripts/bootstrap/tab.js +241 -141
  19. data/assets/javascripts/bootstrap/toast.js +221 -153
  20. data/assets/javascripts/bootstrap/tooltip.js +649 -483
  21. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  22. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  23. data/assets/javascripts/bootstrap-sprockets.js +14 -7
  24. data/assets/javascripts/bootstrap.js +3272 -2586
  25. data/assets/javascripts/bootstrap.min.js +2 -2
  26. data/assets/stylesheets/_bootstrap-grid.scss +51 -16
  27. data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
  28. data/assets/stylesheets/_bootstrap.scss +16 -8
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +15 -10
  31. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  32. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
  33. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  34. data/assets/stylesheets/bootstrap/_buttons.scss +29 -60
  35. data/assets/stylesheets/bootstrap/_card.scss +20 -91
  36. data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
  37. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  38. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  39. data/assets/stylesheets/bootstrap/_dropdown.scss +84 -36
  40. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  41. data/assets/stylesheets/bootstrap/_functions.scss +84 -69
  42. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  43. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  44. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  45. data/assets/stylesheets/bootstrap/_list-group.scss +28 -8
  46. data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
  47. data/assets/stylesheets/bootstrap/_modal.scss +45 -57
  48. data/assets/stylesheets/bootstrap/_nav.scss +23 -4
  49. data/assets/stylesheets/bootstrap/_navbar.scss +45 -71
  50. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  51. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  52. data/assets/stylesheets/bootstrap/_popover.scss +24 -36
  53. data/assets/stylesheets/bootstrap/_progress.scss +5 -4
  54. data/assets/stylesheets/bootstrap/_reboot.scss +316 -179
  55. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  56. data/assets/stylesheets/bootstrap/_spinners.scss +9 -5
  57. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  58. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  59. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  60. data/assets/stylesheets/bootstrap/_transitions.scss +2 -1
  61. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  62. data/assets/stylesheets/bootstrap/_utilities.scss +594 -18
  63. data/assets/stylesheets/bootstrap/_variables.scss +801 -485
  64. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  65. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  71. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  72. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  73. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  74. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  75. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  76. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  77. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  78. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  79. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  80. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  81. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  82. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  83. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  84. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  85. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +71 -48
  86. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  87. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  88. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  89. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  90. data/assets/stylesheets/bootstrap/mixins/_forms.scss +39 -97
  91. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  92. data/assets/stylesheets/bootstrap/mixins/_grid.scss +90 -34
  93. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  94. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  95. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  96. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  97. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  98. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  99. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  100. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  101. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  102. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  103. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +214 -130
  104. data/bootstrap.gemspec +1 -3
  105. data/lib/bootstrap/version.rb +2 -2
  106. data/tasks/updater/js.rb +20 -5
  107. data/tasks/updater/network.rb +7 -1
  108. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  109. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  110. data/test/dummy_rails/app/views/pages/root.html +89 -0
  111. data/test/dummy_rails/config/application.rb +0 -3
  112. data/test/gemfiles/rails_6_1.gemfile +7 -0
  113. metadata +45 -73
  114. data/assets/javascripts/bootstrap/util.js +0 -189
  115. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  116. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  117. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  118. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  119. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  120. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  121. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  122. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  123. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  124. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  125. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  126. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  128. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  129. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  130. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  131. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  132. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  133. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  134. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  135. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  136. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  137. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  138. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  139. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  140. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  141. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  142. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  143. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  144. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  145. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  146. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  147. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  148. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  149. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  150. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -8,19 +8,17 @@
8
8
  // Deprecate
9
9
  @import "mixins/deprecate";
10
10
 
11
- // Utilities
11
+ // Helpers
12
12
  @import "mixins/breakpoints";
13
- @import "mixins/hover";
13
+ @import "mixins/color-scheme";
14
14
  @import "mixins/image";
15
- @import "mixins/badge";
16
15
  @import "mixins/resize";
17
- @import "mixins/screen-reader";
18
- @import "mixins/size";
16
+ @import "mixins/visually-hidden";
19
17
  @import "mixins/reset-text";
20
- @import "mixins/text-emphasis";
21
- @import "mixins/text-hide";
22
18
  @import "mixins/text-truncate";
23
- @import "mixins/visibility";
19
+
20
+ // Utilities
21
+ @import "mixins/utilities";
24
22
 
25
23
  // Components
26
24
  @import "mixins/alert";
@@ -29,12 +27,10 @@
29
27
  @import "mixins/pagination";
30
28
  @import "mixins/lists";
31
29
  @import "mixins/list-group";
32
- @import "mixins/nav-divider";
33
30
  @import "mixins/forms";
34
- @import "mixins/table-row";
31
+ @import "mixins/table-variants";
35
32
 
36
33
  // Skins
37
- @import "mixins/background-variant";
38
34
  @import "mixins/border-radius";
39
35
  @import "mixins/box-shadow";
40
36
  @import "mixins/gradients";
@@ -42,6 +38,5 @@
42
38
 
43
39
  // Layout
44
40
  @import "mixins/clearfix";
45
- @import "mixins/grid-framework";
41
+ @import "mixins/container";
46
42
  @import "mixins/grid";
47
- @import "mixins/float";
@@ -56,19 +56,13 @@
56
56
  }
57
57
 
58
58
  .modal-dialog-scrollable {
59
- display: flex; // IE10/11
60
- max-height: subtract(100%, $modal-dialog-margin * 2);
59
+ height: subtract(100%, $modal-dialog-margin * 2);
61
60
 
62
61
  .modal-content {
63
- max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11
62
+ max-height: 100%;
64
63
  overflow: hidden;
65
64
  }
66
65
 
67
- .modal-header,
68
- .modal-footer {
69
- flex-shrink: 0;
70
- }
71
-
72
66
  .modal-body {
73
67
  overflow-y: auto;
74
68
  }
@@ -78,29 +72,6 @@
78
72
  display: flex;
79
73
  align-items: center;
80
74
  min-height: subtract(100%, $modal-dialog-margin * 2);
81
-
82
- // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)
83
- &::before {
84
- display: block; // IE10
85
- height: subtract(100vh, $modal-dialog-margin * 2);
86
- height: min-content; // Reset height to 0 except on IE
87
- content: "";
88
- }
89
-
90
- // Ensure `.modal-body` shows scrollbar (IE10/11)
91
- &.modal-dialog-scrollable {
92
- flex-direction: column;
93
- justify-content: center;
94
- height: 100%;
95
-
96
- .modal-content {
97
- max-height: none;
98
- }
99
-
100
- &::before {
101
- content: none;
102
- }
103
- }
104
75
  }
105
76
 
106
77
  // Actual modal
@@ -140,16 +111,16 @@
140
111
  // Top section of the modal w/ title and dismiss
141
112
  .modal-header {
142
113
  display: flex;
143
- align-items: flex-start; // so the close btn always stays on the upper right corner
114
+ flex-shrink: 0;
115
+ align-items: center;
144
116
  justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
145
117
  padding: $modal-header-padding;
146
118
  border-bottom: $modal-header-border-width solid $modal-header-border-color;
147
119
  @include border-top-radius($modal-content-inner-border-radius);
148
120
 
149
- .close {
150
- padding: $modal-header-padding;
151
- // auto on the left force icon to the right even when there is no .modal-title
152
- margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;
121
+ .btn-close {
122
+ padding: ($modal-header-padding-y / 2) ($modal-header-padding-x / 2);
123
+ margin: ($modal-header-padding-y / -2) ($modal-header-padding-x / -2) ($modal-header-padding-y / -2) auto;
153
124
  }
154
125
  }
155
126
 
@@ -173,9 +144,10 @@
173
144
  .modal-footer {
174
145
  display: flex;
175
146
  flex-wrap: wrap;
147
+ flex-shrink: 0;
176
148
  align-items: center; // vertically center
177
149
  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
178
- padding: $modal-inner-padding - $modal-footer-margin-between * .5;
150
+ padding: $modal-inner-padding - $modal-footer-margin-between / 2;
179
151
  border-top: $modal-footer-border-width solid $modal-footer-border-color;
180
152
  @include border-bottom-radius($modal-content-inner-border-radius);
181
153
 
@@ -183,19 +155,10 @@
183
155
  // This solution is far from ideal because of the universal selector usage,
184
156
  // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
185
157
  > * {
186
- margin: $modal-footer-margin-between * .5;
158
+ margin: $modal-footer-margin-between / 2;
187
159
  }
188
160
  }
189
161
 
190
- // Measure scrollbar width for padding body during modal show/hide
191
- .modal-scrollbar-measure {
192
- position: absolute;
193
- top: -9999px;
194
- width: 50px;
195
- height: 50px;
196
- overflow: scroll;
197
- }
198
-
199
162
  // Scale up the modal
200
163
  @include media-breakpoint-up(sm) {
201
164
  // Automatically set modal's width for larger viewports
@@ -205,20 +168,11 @@
205
168
  }
206
169
 
207
170
  .modal-dialog-scrollable {
208
- max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
209
-
210
- .modal-content {
211
- max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
212
- }
171
+ height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
213
172
  }
214
173
 
215
174
  .modal-dialog-centered {
216
175
  min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2);
217
-
218
- &::before {
219
- height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2);
220
- height: min-content;
221
- }
222
176
  }
223
177
 
224
178
  .modal-content {
@@ -238,3 +192,37 @@
238
192
  @include media-breakpoint-up(xl) {
239
193
  .modal-xl { max-width: $modal-xl; }
240
194
  }
195
+
196
+ // scss-docs-start modal-fullscreen-loop
197
+ @each $breakpoint in map-keys($grid-breakpoints) {
198
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
199
+ $postfix: if($infix != "", $infix + "-down", "");
200
+
201
+ @include media-breakpoint-down($breakpoint) {
202
+ .modal-fullscreen#{$postfix} {
203
+ width: 100vw;
204
+ max-width: none;
205
+ height: 100%;
206
+ margin: 0;
207
+
208
+ .modal-content {
209
+ height: 100%;
210
+ border: 0;
211
+ @include border-radius(0);
212
+ }
213
+
214
+ .modal-header {
215
+ @include border-radius(0);
216
+ }
217
+
218
+ .modal-body {
219
+ overflow-y: auto;
220
+ }
221
+
222
+ .modal-footer {
223
+ @include border-radius(0);
224
+ }
225
+ }
226
+ }
227
+ }
228
+ // scss-docs-end modal-fullscreen-loop
@@ -14,10 +14,16 @@
14
14
  .nav-link {
15
15
  display: block;
16
16
  padding: $nav-link-padding-y $nav-link-padding-x;
17
+ @include font-size($nav-link-font-size);
18
+ font-weight: $nav-link-font-weight;
19
+ color: $nav-link-color;
17
20
  text-decoration: if($link-decoration == none, null, none);
21
+ @include transition($nav-link-transition);
18
22
 
19
- @include hover-focus() {
20
- text-decoration: none;
23
+ &:hover,
24
+ &:focus {
25
+ color: $nav-link-hover-color;
26
+ text-decoration: if($link-hover-decoration == underline, none, null);
21
27
  }
22
28
 
23
29
  // Disabled state lightens text
@@ -37,11 +43,15 @@
37
43
 
38
44
  .nav-link {
39
45
  margin-bottom: -$nav-tabs-border-width;
46
+ background: none;
40
47
  border: $nav-tabs-border-width solid transparent;
41
48
  @include border-top-radius($nav-tabs-border-radius);
42
49
 
43
- @include hover-focus() {
50
+ &:hover,
51
+ &:focus {
44
52
  border-color: $nav-tabs-link-hover-border-color;
53
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
54
+ isolation: isolate;
45
55
  }
46
56
 
47
57
  &.disabled {
@@ -73,13 +83,15 @@
73
83
 
74
84
  .nav-pills {
75
85
  .nav-link {
86
+ background: none;
87
+ border: 0;
76
88
  @include border-radius($nav-pills-border-radius);
77
89
  }
78
90
 
79
91
  .nav-link.active,
80
92
  .show > .nav-link {
81
93
  color: $nav-pills-link-active-color;
82
- background-color: $nav-pills-link-active-bg;
94
+ @include gradient-bg($nav-pills-link-active-bg);
83
95
  }
84
96
  }
85
97
 
@@ -105,6 +117,13 @@
105
117
  }
106
118
  }
107
119
 
120
+ .nav-fill,
121
+ .nav-justified {
122
+ .nav-item .nav-link {
123
+ width: 100%; // Make sure button will grow
124
+ }
125
+ }
126
+
108
127
 
109
128
  // Tabbable tabs
110
129
  //
@@ -4,7 +4,6 @@
4
4
  // Navbar brand
5
5
  // Navbar nav
6
6
  // Navbar text
7
- // Navbar divider
8
7
  // Responsive navbar
9
8
  // Navbar position
10
9
  // Navbar themes
@@ -21,19 +20,24 @@
21
20
  flex-wrap: wrap; // allow us to do the line break for collapsing content
22
21
  align-items: center;
23
22
  justify-content: space-between; // space out brand from logo
24
- padding: $navbar-padding-y $navbar-padding-x;
23
+ padding-top: $navbar-padding-y;
24
+ padding-right: $navbar-padding-x; // default: null
25
+ padding-bottom: $navbar-padding-y;
26
+ padding-left: $navbar-padding-x; // default: null
27
+ @include gradient-bg();
25
28
 
26
29
  // Because flex properties aren't inherited, we need to redeclare these first
27
30
  // few properties so that content nested within behave properly.
31
+ // The `flex-wrap` property is inherited to simplify the expanded navbars
28
32
  %container-flex-properties {
29
33
  display: flex;
30
- flex-wrap: wrap;
34
+ flex-wrap: inherit;
31
35
  align-items: center;
32
36
  justify-content: space-between;
33
37
  }
34
38
 
35
- .container,
36
- .container-fluid {
39
+ > .container,
40
+ > .container-fluid {
37
41
  @extend %container-flex-properties;
38
42
  }
39
43
 
@@ -50,16 +54,16 @@
50
54
  // Used for brand, project, or site names.
51
55
 
52
56
  .navbar-brand {
53
- display: inline-block;
54
57
  padding-top: $navbar-brand-padding-y;
55
58
  padding-bottom: $navbar-brand-padding-y;
56
- margin-right: $navbar-padding-x;
59
+ margin-right: $navbar-brand-margin-end;
57
60
  @include font-size($navbar-brand-font-size);
58
- line-height: inherit;
61
+ text-decoration: if($link-decoration == none, null, none);
59
62
  white-space: nowrap;
60
63
 
61
- @include hover-focus() {
62
- text-decoration: none;
64
+ &:hover,
65
+ &:focus {
66
+ text-decoration: if($link-hover-decoration == underline, none, null);
63
67
  }
64
68
  }
65
69
 
@@ -82,7 +86,6 @@
82
86
 
83
87
  .dropdown-menu {
84
88
  position: static;
85
- float: none;
86
89
  }
87
90
  }
88
91
 
@@ -92,7 +95,6 @@
92
95
  //
93
96
 
94
97
  .navbar-text {
95
- display: inline-block;
96
98
  padding-top: $nav-link-padding-y;
97
99
  padding-bottom: $nav-link-padding-y;
98
100
  }
@@ -122,10 +124,17 @@
122
124
  background-color: transparent; // remove default button style
123
125
  border: $border-width solid transparent; // remove default button style
124
126
  @include border-radius($navbar-toggler-border-radius);
127
+ @include transition($navbar-toggler-transition);
125
128
 
126
- @include hover-focus() {
129
+ &:hover {
127
130
  text-decoration: none;
128
131
  }
132
+
133
+ &:focus {
134
+ text-decoration: none;
135
+ outline: 0;
136
+ box-shadow: 0 0 0 $navbar-toggler-focus-width;
137
+ }
129
138
  }
130
139
 
131
140
  // Keep as a separate element so folks can easily override it with another icon
@@ -135,15 +144,17 @@
135
144
  width: 1.5em;
136
145
  height: 1.5em;
137
146
  vertical-align: middle;
138
- content: "";
139
- background: 50% / 100% 100% no-repeat;
147
+ background-repeat: no-repeat;
148
+ background-position: center;
149
+ background-size: 100%;
140
150
  }
141
151
 
142
152
  .navbar-nav-scroll {
143
- max-height: $navbar-nav-scroll-max-height;
153
+ max-height: var(--#{$variable-prefix}scroll-height, 75vh);
144
154
  overflow-y: auto;
145
155
  }
146
156
 
157
+ // scss-docs-start navbar-expand-loop
147
158
  // Generate series of `.navbar-expand-*` responsive classes for configuring
148
159
  // where your navbar collapses.
149
160
  .navbar-expand {
@@ -151,27 +162,10 @@
151
162
  $next: breakpoint-next($breakpoint, $grid-breakpoints);
152
163
  $infix: breakpoint-infix($next, $grid-breakpoints);
153
164
 
165
+ // stylelint-disable-next-line scss/selector-no-union-class-name
154
166
  &#{$infix} {
155
- @include media-breakpoint-down($breakpoint) {
156
- %container-navbar-expand-#{$breakpoint} {
157
- padding-right: 0;
158
- padding-left: 0;
159
- }
160
-
161
- > .container,
162
- > .container-fluid {
163
- @extend %container-navbar-expand-#{$breakpoint};
164
- }
165
-
166
- @each $size, $container-max-width in $container-max-widths {
167
- > .container#{breakpoint-infix($size, $container-max-widths)} {
168
- @extend %container-navbar-expand-#{$breakpoint};
169
- }
170
- }
171
- }
172
-
173
167
  @include media-breakpoint-up($next) {
174
- flex-flow: row nowrap;
168
+ flex-wrap: nowrap;
175
169
  justify-content: flex-start;
176
170
 
177
171
  .navbar-nav {
@@ -187,30 +181,12 @@
187
181
  }
188
182
  }
189
183
 
190
- // For nesting containers, have to redeclare for alignment purposes
191
- %container-nesting-#{$breakpoint} {
192
- flex-wrap: nowrap;
193
- }
194
-
195
- > .container,
196
- > .container-fluid {
197
- @extend %container-nesting-#{$breakpoint};
198
- }
199
-
200
- @each $size, $container-max-width in $container-max-widths {
201
- > .container#{breakpoint-infix($size, $container-max-widths)} {
202
- @extend %container-nesting-#{$breakpoint};
203
- }
204
- }
205
-
206
184
  .navbar-nav-scroll {
207
185
  overflow: visible;
208
186
  }
209
187
 
210
188
  .navbar-collapse {
211
189
  display: flex !important; // stylelint-disable-line declaration-no-important
212
-
213
- // Changes flex-bases to auto because of an IE10 bug
214
190
  flex-basis: auto;
215
191
  }
216
192
 
@@ -221,6 +197,7 @@
221
197
  }
222
198
  }
223
199
  }
200
+ // scss-docs-end navbar-expand-loop
224
201
 
225
202
 
226
203
  // Navbar themes
@@ -232,7 +209,8 @@
232
209
  .navbar-brand {
233
210
  color: $navbar-light-brand-color;
234
211
 
235
- @include hover-focus() {
212
+ &:hover,
213
+ &:focus {
236
214
  color: $navbar-light-brand-hover-color;
237
215
  }
238
216
  }
@@ -241,7 +219,8 @@
241
219
  .nav-link {
242
220
  color: $navbar-light-color;
243
221
 
244
- @include hover-focus() {
222
+ &:hover,
223
+ &:focus {
245
224
  color: $navbar-light-hover-color;
246
225
  }
247
226
 
@@ -251,8 +230,6 @@
251
230
  }
252
231
 
253
232
  .show > .nav-link,
254
- .active > .nav-link,
255
- .nav-link.show,
256
233
  .nav-link.active {
257
234
  color: $navbar-light-active-color;
258
235
  }
@@ -269,12 +246,11 @@
269
246
 
270
247
  .navbar-text {
271
248
  color: $navbar-light-color;
272
- a {
273
- color: $navbar-light-active-color;
274
249
 
275
- @include hover-focus() {
276
- color: $navbar-light-active-color;
277
- }
250
+ a,
251
+ a:hover,
252
+ a:focus {
253
+ color: $navbar-light-active-color;
278
254
  }
279
255
  }
280
256
  }
@@ -284,7 +260,8 @@
284
260
  .navbar-brand {
285
261
  color: $navbar-dark-brand-color;
286
262
 
287
- @include hover-focus() {
263
+ &:hover,
264
+ &:focus {
288
265
  color: $navbar-dark-brand-hover-color;
289
266
  }
290
267
  }
@@ -293,7 +270,8 @@
293
270
  .nav-link {
294
271
  color: $navbar-dark-color;
295
272
 
296
- @include hover-focus() {
273
+ &:hover,
274
+ &:focus {
297
275
  color: $navbar-dark-hover-color;
298
276
  }
299
277
 
@@ -303,8 +281,6 @@
303
281
  }
304
282
 
305
283
  .show > .nav-link,
306
- .active > .nav-link,
307
- .nav-link.show,
308
284
  .nav-link.active {
309
285
  color: $navbar-dark-active-color;
310
286
  }
@@ -321,12 +297,10 @@
321
297
 
322
298
  .navbar-text {
323
299
  color: $navbar-dark-color;
324
- a {
300
+ a,
301
+ a:hover,
302
+ a:focus {
325
303
  color: $navbar-dark-active-color;
326
-
327
- @include hover-focus() {
328
- color: $navbar-dark-active-color;
329
- }
330
304
  }
331
305
  }
332
306
  }
@@ -0,0 +1,77 @@
1
+ .offcanvas {
2
+ position: fixed;
3
+ bottom: 0;
4
+ z-index: $zindex-offcanvas;
5
+ display: flex;
6
+ flex-direction: column;
7
+ max-width: 100%;
8
+ color: $offcanvas-color;
9
+ visibility: hidden;
10
+ background-color: $offcanvas-bg-color;
11
+ background-clip: padding-box;
12
+ outline: 0;
13
+ @include box-shadow($offcanvas-box-shadow);
14
+ @include transition(transform $offcanvas-transition-duration ease-in-out);
15
+ }
16
+
17
+ .offcanvas-header {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: space-between;
21
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
22
+
23
+ .btn-close {
24
+ padding: ($offcanvas-padding-y / 2) ($offcanvas-padding-x / 2);
25
+ margin: ($offcanvas-padding-y / -2) ($offcanvas-padding-x / -2) ($offcanvas-padding-y / -2) auto;
26
+ }
27
+ }
28
+
29
+ .offcanvas-title {
30
+ margin-bottom: 0;
31
+ line-height: $offcanvas-title-line-height;
32
+ }
33
+
34
+ .offcanvas-body {
35
+ flex-grow: 1;
36
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
37
+ overflow-y: auto;
38
+ }
39
+
40
+ .offcanvas-start {
41
+ top: 0;
42
+ left: 0;
43
+ width: $offcanvas-horizontal-width;
44
+ border-right: $offcanvas-border-width solid $offcanvas-border-color;
45
+ transform: translateX(-100%);
46
+ }
47
+
48
+ .offcanvas-end {
49
+ top: 0;
50
+ right: 0;
51
+ width: $offcanvas-horizontal-width;
52
+ border-left: $offcanvas-border-width solid $offcanvas-border-color;
53
+ transform: translateX(100%);
54
+ }
55
+
56
+ .offcanvas-top {
57
+ top: 0;
58
+ right: 0;
59
+ left: 0;
60
+ height: $offcanvas-vertical-height;
61
+ max-height: 100%;
62
+ border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
63
+ transform: translateY(-100%);
64
+ }
65
+
66
+ .offcanvas-bottom {
67
+ right: 0;
68
+ left: 0;
69
+ height: $offcanvas-vertical-height;
70
+ max-height: 100%;
71
+ border-top: $offcanvas-border-width solid $offcanvas-border-color;
72
+ transform: translateY(100%);
73
+ }
74
+
75
+ .offcanvas.show {
76
+ transform: none;
77
+ }
@@ -1,60 +1,49 @@
1
1
  .pagination {
2
2
  display: flex;
3
3
  @include list-unstyled();
4
- @include border-radius();
5
4
  }
6
5
 
7
6
  .page-link {
8
7
  position: relative;
9
8
  display: block;
10
- padding: $pagination-padding-y $pagination-padding-x;
11
- margin-left: -$pagination-border-width;
12
- line-height: $pagination-line-height;
13
9
  color: $pagination-color;
14
10
  text-decoration: if($link-decoration == none, null, none);
15
11
  background-color: $pagination-bg;
16
12
  border: $pagination-border-width solid $pagination-border-color;
13
+ @include transition($pagination-transition);
17
14
 
18
15
  &:hover {
19
16
  z-index: 2;
20
17
  color: $pagination-hover-color;
21
- text-decoration: none;
18
+ text-decoration: if($link-hover-decoration == underline, none, null);
22
19
  background-color: $pagination-hover-bg;
23
20
  border-color: $pagination-hover-border-color;
24
21
  }
25
22
 
26
23
  &:focus {
27
24
  z-index: 3;
25
+ color: $pagination-focus-color;
26
+ background-color: $pagination-focus-bg;
28
27
  outline: $pagination-focus-outline;
29
28
  box-shadow: $pagination-focus-box-shadow;
30
29
  }
31
30
  }
32
31
 
33
32
  .page-item {
34
- &:first-child {
35
- .page-link {
36
- margin-left: 0;
37
- @include border-left-radius($border-radius);
38
- }
39
- }
40
- &:last-child {
41
- .page-link {
42
- @include border-right-radius($border-radius);
43
- }
33
+ &:not(:first-child) .page-link {
34
+ margin-left: $pagination-margin-start;
44
35
  }
45
36
 
46
37
  &.active .page-link {
47
38
  z-index: 3;
48
39
  color: $pagination-active-color;
49
- background-color: $pagination-active-bg;
40
+ @include gradient-bg($pagination-active-bg);
50
41
  border-color: $pagination-active-border-color;
51
42
  }
52
43
 
53
44
  &.disabled .page-link {
54
45
  color: $pagination-disabled-color;
55
46
  pointer-events: none;
56
- // Opinionated: remove the "hand" cursor set previously for .page-link
57
- cursor: auto;
58
47
  background-color: $pagination-disabled-bg;
59
48
  border-color: $pagination-disabled-border-color;
60
49
  }
@@ -64,11 +53,12 @@
64
53
  //
65
54
  // Sizing
66
55
  //
56
+ @include pagination-size($pagination-padding-y, $pagination-padding-x, null, $pagination-border-radius);
67
57
 
68
58
  .pagination-lg {
69
- @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);
59
+ @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);
70
60
  }
71
61
 
72
62
  .pagination-sm {
73
- @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);
63
+ @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);
74
64
  }