bootstrap 4.6.0 → 5.0.0

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 (149) 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 +181 -109
  5. data/assets/javascripts/bootstrap/base-component.js +63 -0
  6. data/assets/javascripts/bootstrap/button.js +85 -173
  7. data/assets/javascripts/bootstrap/carousel.js +458 -355
  8. data/assets/javascripts/bootstrap/collapse.js +366 -218
  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 +459 -351
  14. data/assets/javascripts/bootstrap/modal.js +597 -429
  15. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  16. data/assets/javascripts/bootstrap/popover.js +130 -154
  17. data/assets/javascripts/bootstrap/scrollspy.js +238 -188
  18. data/assets/javascripts/bootstrap/tab.js +235 -137
  19. data/assets/javascripts/bootstrap/toast.js +210 -148
  20. data/assets/javascripts/bootstrap/tooltip.js +627 -466
  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 +15 -8
  24. data/assets/javascripts/bootstrap.js +3174 -2563
  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 +65 -33
  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 -23
  42. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  43. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  44. data/assets/stylesheets/bootstrap/_list-group.scss +28 -8
  45. data/assets/stylesheets/bootstrap/_mixins.scss +8 -13
  46. data/assets/stylesheets/bootstrap/_modal.scss +43 -55
  47. data/assets/stylesheets/bootstrap/_nav.scss +23 -4
  48. data/assets/stylesheets/bootstrap/_navbar.scss +45 -71
  49. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  50. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  51. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  52. data/assets/stylesheets/bootstrap/_progress.scss +5 -4
  53. data/assets/stylesheets/bootstrap/_reboot.scss +316 -179
  54. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  55. data/assets/stylesheets/bootstrap/_spinners.scss +11 -7
  56. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  57. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  58. data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
  59. data/assets/stylesheets/bootstrap/_transitions.scss +2 -1
  60. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  61. data/assets/stylesheets/bootstrap/_utilities.scss +594 -18
  62. data/assets/stylesheets/bootstrap/_variables.scss +800 -482
  63. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  64. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  70. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  71. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  72. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  73. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  74. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  75. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  76. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  77. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  78. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  79. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  80. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  81. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  82. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  83. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +71 -48
  84. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  85. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  86. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  87. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  88. data/assets/stylesheets/bootstrap/mixins/_forms.scss +38 -86
  89. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  90. data/assets/stylesheets/bootstrap/mixins/_grid.scss +89 -33
  91. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  92. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  93. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  94. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  95. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  96. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  97. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  98. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  99. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  100. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  101. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  102. data/bootstrap.gemspec +1 -3
  103. data/lib/bootstrap/version.rb +2 -2
  104. data/tasks/updater/js.rb +20 -5
  105. data/tasks/updater/network.rb +7 -1
  106. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  107. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  108. data/test/dummy_rails/app/views/pages/root.html +89 -0
  109. data/test/dummy_rails/config/application.rb +0 -3
  110. data/test/gemfiles/rails_6_1.gemfile +7 -0
  111. metadata +45 -73
  112. data/assets/javascripts/bootstrap/util.js +0 -192
  113. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  114. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  115. data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
  116. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  117. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  118. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  119. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  120. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  121. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  122. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  123. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  124. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  125. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  126. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  127. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  128. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  129. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  130. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  131. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  132. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  133. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  134. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  135. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  136. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  137. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  138. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  139. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  140. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  141. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  142. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  143. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  144. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  145. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  146. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  147. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  148. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  149. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -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,6 +144,7 @@
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
150
  padding: $modal-inner-padding - $modal-footer-margin-between / 2;
@@ -187,15 +159,6 @@
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
  }