bootstrap 4.3.1 → 5.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +17 -2
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +7 -4
  5. data/assets/javascripts/bootstrap/alert.js +172 -136
  6. data/assets/javascripts/bootstrap/base-component.js +182 -0
  7. data/assets/javascripts/bootstrap/button.js +101 -142
  8. data/assets/javascripts/bootstrap/carousel.js +483 -408
  9. data/assets/javascripts/bootstrap/collapse.js +340 -273
  10. data/assets/javascripts/bootstrap/dom/data.js +68 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +321 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +88 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +127 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +491 -399
  15. data/assets/javascripts/bootstrap/modal.js +841 -449
  16. data/assets/javascripts/bootstrap/offcanvas.js +866 -0
  17. data/assets/javascripts/bootstrap/popover.js +121 -198
  18. data/assets/javascripts/bootstrap/scrollspy.js +256 -240
  19. data/assets/javascripts/bootstrap/tab.js +218 -154
  20. data/assets/javascripts/bootstrap/toast.js +329 -189
  21. data/assets/javascripts/bootstrap/tooltip.js +651 -552
  22. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  23. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  24. data/assets/javascripts/bootstrap-sprockets.js +8 -1
  25. data/assets/javascripts/bootstrap.js +3503 -2892
  26. data/assets/javascripts/bootstrap.min.js +4 -4
  27. data/assets/stylesheets/_bootstrap-grid.scss +56 -18
  28. data/assets/stylesheets/_bootstrap-reboot.scss +5 -4
  29. data/assets/stylesheets/_bootstrap.scss +20 -11
  30. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  31. data/assets/stylesheets/bootstrap/_alert.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  33. data/assets/stylesheets/bootstrap/_breadcrumb.scss +5 -18
  34. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  35. data/assets/stylesheets/bootstrap/_buttons.scss +28 -54
  36. data/assets/stylesheets/bootstrap/_card.scss +52 -125
  37. data/assets/stylesheets/bootstrap/_carousel.scss +70 -38
  38. data/assets/stylesheets/bootstrap/_close.scss +30 -31
  39. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  40. data/assets/stylesheets/bootstrap/_dropdown.scss +88 -39
  41. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  42. data/assets/stylesheets/bootstrap/_functions.scss +243 -27
  43. data/assets/stylesheets/bootstrap/_grid.scss +14 -33
  44. data/assets/stylesheets/bootstrap/_helpers.scss +9 -0
  45. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  46. data/assets/stylesheets/bootstrap/_list-group.scss +61 -36
  47. data/assets/stylesheets/bootstrap/_mixins.scss +12 -16
  48. data/assets/stylesheets/bootstrap/_modal.scss +64 -84
  49. data/assets/stylesheets/bootstrap/_nav.scss +29 -10
  50. data/assets/stylesheets/bootstrap/_navbar.scss +93 -52
  51. data/assets/stylesheets/bootstrap/_offcanvas.scss +83 -0
  52. data/assets/stylesheets/bootstrap/_pagination.scss +13 -22
  53. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  54. data/assets/stylesheets/bootstrap/_popover.scss +29 -42
  55. data/assets/stylesheets/bootstrap/_progress.scss +10 -5
  56. data/assets/stylesheets/bootstrap/_reboot.scss +350 -208
  57. data/assets/stylesheets/bootstrap/_root.scss +43 -8
  58. data/assets/stylesheets/bootstrap/_spinners.scss +21 -7
  59. data/assets/stylesheets/bootstrap/_tables.scss +84 -114
  60. data/assets/stylesheets/bootstrap/_toasts.scss +21 -14
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +21 -21
  62. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  63. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  64. data/assets/stylesheets/bootstrap/_utilities.scss +630 -17
  65. data/assets/stylesheets/bootstrap/_variables.scss +1007 -489
  66. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  67. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +63 -0
  68. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  69. data/assets/stylesheets/bootstrap/forms/_form-control.scss +219 -0
  70. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  71. data/assets/stylesheets/bootstrap/forms/_form-select.scss +72 -0
  72. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  73. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  74. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  75. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  76. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  77. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  78. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  79. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  80. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  81. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  82. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  83. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  84. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  85. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -5
  86. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  87. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  88. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  89. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  90. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +77 -51
  91. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  92. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  93. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  94. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  95. data/assets/stylesheets/bootstrap/mixins/_forms.scss +67 -115
  96. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  97. data/assets/stylesheets/bootstrap/mixins/_grid.scss +132 -32
  98. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  99. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  100. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +17 -8
  101. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  102. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  103. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  104. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +89 -0
  105. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  106. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  107. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
  108. data/bootstrap.gemspec +4 -6
  109. data/lib/bootstrap/version.rb +2 -2
  110. data/tasks/updater/js.rb +25 -6
  111. data/tasks/updater/network.rb +8 -2
  112. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  113. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  114. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  115. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  116. data/test/dummy_rails/app/views/pages/root.html +89 -0
  117. data/test/dummy_rails/config/application.rb +0 -3
  118. data/test/gemfiles/rails_6_0.gemfile +7 -0
  119. data/test/gemfiles/rails_6_1.gemfile +7 -0
  120. data/test/support/dummy_rails_integration.rb +3 -1
  121. data/test/test_helper.rb +18 -13
  122. metadata +61 -79
  123. data/assets/javascripts/bootstrap/util.js +0 -171
  124. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  125. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  126. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  127. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  128. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  129. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  130. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  131. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  132. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  133. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  134. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  135. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  136. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  137. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  138. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  139. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  140. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  141. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  142. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  143. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  144. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  145. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  146. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  147. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  148. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  149. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  150. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  151. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  152. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  153. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  154. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  155. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  156. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  157. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  158. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -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,17 +20,32 @@
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.
28
- > .container,
29
- > .container-fluid {
31
+ // The `flex-wrap` property is inherited to simplify the expanded navbars
32
+ %container-flex-properties {
30
33
  display: flex;
31
- flex-wrap: wrap;
34
+ flex-wrap: inherit;
32
35
  align-items: center;
33
36
  justify-content: space-between;
34
37
  }
38
+
39
+ > .container,
40
+ > .container-fluid {
41
+ @extend %container-flex-properties;
42
+ }
43
+
44
+ @each $breakpoint, $container-max-width in $container-max-widths {
45
+ > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {
46
+ @extend %container-flex-properties;
47
+ }
48
+ }
35
49
  }
36
50
 
37
51
 
@@ -40,16 +54,16 @@
40
54
  // Used for brand, project, or site names.
41
55
 
42
56
  .navbar-brand {
43
- display: inline-block;
44
57
  padding-top: $navbar-brand-padding-y;
45
58
  padding-bottom: $navbar-brand-padding-y;
46
- margin-right: $navbar-padding-x;
59
+ margin-right: $navbar-brand-margin-end;
47
60
  @include font-size($navbar-brand-font-size);
48
- line-height: inherit;
61
+ text-decoration: if($link-decoration == none, null, none);
49
62
  white-space: nowrap;
50
63
 
51
- @include hover-focus {
52
- text-decoration: none;
64
+ &:hover,
65
+ &:focus {
66
+ text-decoration: if($link-hover-decoration == underline, none, null);
53
67
  }
54
68
  }
55
69
 
@@ -72,7 +86,6 @@
72
86
 
73
87
  .dropdown-menu {
74
88
  position: static;
75
- float: none;
76
89
  }
77
90
  }
78
91
 
@@ -82,7 +95,6 @@
82
95
  //
83
96
 
84
97
  .navbar-text {
85
- display: inline-block;
86
98
  padding-top: $nav-link-padding-y;
87
99
  padding-bottom: $nav-link-padding-y;
88
100
  }
@@ -112,10 +124,17 @@
112
124
  background-color: transparent; // remove default button style
113
125
  border: $border-width solid transparent; // remove default button style
114
126
  @include border-radius($navbar-toggler-border-radius);
127
+ @include transition($navbar-toggler-transition);
115
128
 
116
- @include hover-focus {
129
+ &:hover {
117
130
  text-decoration: none;
118
131
  }
132
+
133
+ &:focus {
134
+ text-decoration: none;
135
+ outline: 0;
136
+ box-shadow: 0 0 0 $navbar-toggler-focus-width;
137
+ }
119
138
  }
120
139
 
121
140
  // Keep as a separate element so folks can easily override it with another icon
@@ -125,11 +144,17 @@
125
144
  width: 1.5em;
126
145
  height: 1.5em;
127
146
  vertical-align: middle;
128
- content: "";
129
- background: no-repeat center center;
130
- background-size: 100% 100%;
147
+ background-repeat: no-repeat;
148
+ background-position: center;
149
+ background-size: 100%;
150
+ }
151
+
152
+ .navbar-nav-scroll {
153
+ max-height: var(--#{$variable-prefix}scroll-height, 75vh);
154
+ overflow-y: auto;
131
155
  }
132
156
 
157
+ // scss-docs-start navbar-expand-loop
133
158
  // Generate series of `.navbar-expand-*` responsive classes for configuring
134
159
  // where your navbar collapses.
135
160
  .navbar-expand {
@@ -137,17 +162,10 @@
137
162
  $next: breakpoint-next($breakpoint, $grid-breakpoints);
138
163
  $infix: breakpoint-infix($next, $grid-breakpoints);
139
164
 
165
+ // stylelint-disable-next-line scss/selector-no-union-class-name
140
166
  &#{$infix} {
141
- @include media-breakpoint-down($breakpoint) {
142
- > .container,
143
- > .container-fluid {
144
- padding-right: 0;
145
- padding-left: 0;
146
- }
147
- }
148
-
149
167
  @include media-breakpoint-up($next) {
150
- flex-flow: row nowrap;
168
+ flex-wrap: nowrap;
151
169
  justify-content: flex-start;
152
170
 
153
171
  .navbar-nav {
@@ -163,27 +181,53 @@
163
181
  }
164
182
  }
165
183
 
166
- // For nesting containers, have to redeclare for alignment purposes
167
- > .container,
168
- > .container-fluid {
169
- flex-wrap: nowrap;
184
+ .navbar-nav-scroll {
185
+ overflow: visible;
170
186
  }
171
187
 
172
188
  .navbar-collapse {
173
189
  display: flex !important; // stylelint-disable-line declaration-no-important
174
-
175
- // Changes flex-bases to auto because of an IE10 bug
176
190
  flex-basis: auto;
177
191
  }
178
192
 
179
193
  .navbar-toggler {
180
194
  display: none;
181
195
  }
196
+
197
+ .offcanvas-header {
198
+ display: none;
199
+ }
200
+
201
+ .offcanvas {
202
+ position: inherit;
203
+ bottom: 0;
204
+ z-index: 1000;
205
+ flex-grow: 1;
206
+ visibility: visible !important; // stylelint-disable-line declaration-no-important
207
+ background-color: transparent;
208
+ border-right: 0;
209
+ border-left: 0;
210
+ @include transition(none);
211
+ transform: none;
212
+ }
213
+ .offcanvas-top,
214
+ .offcanvas-bottom {
215
+ height: auto;
216
+ border-top: 0;
217
+ border-bottom: 0;
218
+ }
219
+
220
+ .offcanvas-body {
221
+ display: flex;
222
+ flex-grow: 0;
223
+ padding: 0;
224
+ overflow-y: visible;
225
+ }
182
226
  }
183
227
  }
184
228
  }
185
229
  }
186
-
230
+ // scss-docs-end navbar-expand-loop
187
231
 
188
232
  // Navbar themes
189
233
  //
@@ -194,7 +238,8 @@
194
238
  .navbar-brand {
195
239
  color: $navbar-light-brand-color;
196
240
 
197
- @include hover-focus {
241
+ &:hover,
242
+ &:focus {
198
243
  color: $navbar-light-brand-hover-color;
199
244
  }
200
245
  }
@@ -203,7 +248,8 @@
203
248
  .nav-link {
204
249
  color: $navbar-light-color;
205
250
 
206
- @include hover-focus {
251
+ &:hover,
252
+ &:focus {
207
253
  color: $navbar-light-hover-color;
208
254
  }
209
255
 
@@ -213,8 +259,6 @@
213
259
  }
214
260
 
215
261
  .show > .nav-link,
216
- .active > .nav-link,
217
- .nav-link.show,
218
262
  .nav-link.active {
219
263
  color: $navbar-light-active-color;
220
264
  }
@@ -226,17 +270,16 @@
226
270
  }
227
271
 
228
272
  .navbar-toggler-icon {
229
- background-image: $navbar-light-toggler-icon-bg;
273
+ background-image: escape-svg($navbar-light-toggler-icon-bg);
230
274
  }
231
275
 
232
276
  .navbar-text {
233
277
  color: $navbar-light-color;
234
- a {
235
- color: $navbar-light-active-color;
236
278
 
237
- @include hover-focus {
238
- color: $navbar-light-active-color;
239
- }
279
+ a,
280
+ a:hover,
281
+ a:focus {
282
+ color: $navbar-light-active-color;
240
283
  }
241
284
  }
242
285
  }
@@ -246,7 +289,8 @@
246
289
  .navbar-brand {
247
290
  color: $navbar-dark-brand-color;
248
291
 
249
- @include hover-focus {
292
+ &:hover,
293
+ &:focus {
250
294
  color: $navbar-dark-brand-hover-color;
251
295
  }
252
296
  }
@@ -255,7 +299,8 @@
255
299
  .nav-link {
256
300
  color: $navbar-dark-color;
257
301
 
258
- @include hover-focus {
302
+ &:hover,
303
+ &:focus {
259
304
  color: $navbar-dark-hover-color;
260
305
  }
261
306
 
@@ -265,8 +310,6 @@
265
310
  }
266
311
 
267
312
  .show > .nav-link,
268
- .active > .nav-link,
269
- .nav-link.show,
270
313
  .nav-link.active {
271
314
  color: $navbar-dark-active-color;
272
315
  }
@@ -278,17 +321,15 @@
278
321
  }
279
322
 
280
323
  .navbar-toggler-icon {
281
- background-image: $navbar-dark-toggler-icon-bg;
324
+ background-image: escape-svg($navbar-dark-toggler-icon-bg);
282
325
  }
283
326
 
284
327
  .navbar-text {
285
328
  color: $navbar-dark-color;
286
- a {
329
+ a,
330
+ a:hover,
331
+ a:focus {
287
332
  color: $navbar-dark-active-color;
288
-
289
- @include hover-focus {
290
- color: $navbar-dark-active-color;
291
- }
292
333
  }
293
334
  }
294
335
  }
@@ -0,0 +1,83 @@
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-backdrop {
18
+ @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);
19
+ }
20
+
21
+ .offcanvas-header {
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: space-between;
25
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
26
+
27
+ .btn-close {
28
+ padding: ($offcanvas-padding-y * .5) ($offcanvas-padding-x * .5);
29
+ margin-top: $offcanvas-padding-y * -.5;
30
+ margin-right: $offcanvas-padding-x * -.5;
31
+ margin-bottom: $offcanvas-padding-y * -.5;
32
+ }
33
+ }
34
+
35
+ .offcanvas-title {
36
+ margin-bottom: 0;
37
+ line-height: $offcanvas-title-line-height;
38
+ }
39
+
40
+ .offcanvas-body {
41
+ flex-grow: 1;
42
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
43
+ overflow-y: auto;
44
+ }
45
+
46
+ .offcanvas-start {
47
+ top: 0;
48
+ left: 0;
49
+ width: $offcanvas-horizontal-width;
50
+ border-right: $offcanvas-border-width solid $offcanvas-border-color;
51
+ transform: translateX(-100%);
52
+ }
53
+
54
+ .offcanvas-end {
55
+ top: 0;
56
+ right: 0;
57
+ width: $offcanvas-horizontal-width;
58
+ border-left: $offcanvas-border-width solid $offcanvas-border-color;
59
+ transform: translateX(100%);
60
+ }
61
+
62
+ .offcanvas-top {
63
+ top: 0;
64
+ right: 0;
65
+ left: 0;
66
+ height: $offcanvas-vertical-height;
67
+ max-height: 100%;
68
+ border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
69
+ transform: translateY(-100%);
70
+ }
71
+
72
+ .offcanvas-bottom {
73
+ right: 0;
74
+ left: 0;
75
+ height: $offcanvas-vertical-height;
76
+ max-height: 100%;
77
+ border-top: $offcanvas-border-width solid $offcanvas-border-color;
78
+ transform: translateY(100%);
79
+ }
80
+
81
+ .offcanvas.show {
82
+ transform: none;
83
+ }
@@ -1,59 +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;
10
+ text-decoration: if($link-decoration == none, null, none);
14
11
  background-color: $pagination-bg;
15
12
  border: $pagination-border-width solid $pagination-border-color;
13
+ @include transition($pagination-transition);
16
14
 
17
15
  &:hover {
18
16
  z-index: 2;
19
17
  color: $pagination-hover-color;
20
- text-decoration: none;
18
+ text-decoration: if($link-hover-decoration == underline, none, null);
21
19
  background-color: $pagination-hover-bg;
22
20
  border-color: $pagination-hover-border-color;
23
21
  }
24
22
 
25
23
  &:focus {
26
- z-index: 2;
24
+ z-index: 3;
25
+ color: $pagination-focus-color;
26
+ background-color: $pagination-focus-bg;
27
27
  outline: $pagination-focus-outline;
28
28
  box-shadow: $pagination-focus-box-shadow;
29
29
  }
30
30
  }
31
31
 
32
32
  .page-item {
33
- &:first-child {
34
- .page-link {
35
- margin-left: 0;
36
- @include border-left-radius($border-radius);
37
- }
38
- }
39
- &:last-child {
40
- .page-link {
41
- @include border-right-radius($border-radius);
42
- }
33
+ &:not(:first-child) .page-link {
34
+ margin-left: $pagination-margin-start;
43
35
  }
44
36
 
45
37
  &.active .page-link {
46
- z-index: 1;
38
+ z-index: 3;
47
39
  color: $pagination-active-color;
48
- background-color: $pagination-active-bg;
40
+ @include gradient-bg($pagination-active-bg);
49
41
  border-color: $pagination-active-border-color;
50
42
  }
51
43
 
52
44
  &.disabled .page-link {
53
45
  color: $pagination-disabled-color;
54
46
  pointer-events: none;
55
- // Opinionated: remove the "hand" cursor set previously for .page-link
56
- cursor: auto;
57
47
  background-color: $pagination-disabled-bg;
58
48
  border-color: $pagination-disabled-border-color;
59
49
  }
@@ -63,11 +53,12 @@
63
53
  //
64
54
  // Sizing
65
55
  //
56
+ @include pagination-size($pagination-padding-y, $pagination-padding-x, null, $pagination-border-radius);
66
57
 
67
58
  .pagination-lg {
68
- @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);
59
+ @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);
69
60
  }
70
61
 
71
62
  .pagination-sm {
72
- @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);
63
+ @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);
73
64
  }
@@ -0,0 +1,51 @@
1
+ .placeholder {
2
+ display: inline-block;
3
+ min-height: 1em;
4
+ vertical-align: middle;
5
+ cursor: wait;
6
+ background-color: currentColor;
7
+ opacity: $placeholder-opacity-max;
8
+
9
+ &.btn::before {
10
+ display: inline-block;
11
+ content: "";
12
+ }
13
+ }
14
+
15
+ // Sizing
16
+ .placeholder-xs {
17
+ min-height: .6em;
18
+ }
19
+
20
+ .placeholder-sm {
21
+ min-height: .8em;
22
+ }
23
+
24
+ .placeholder-lg {
25
+ min-height: 1.2em;
26
+ }
27
+
28
+ // Animation
29
+ .placeholder-glow {
30
+ .placeholder {
31
+ animation: placeholder-glow 2s ease-in-out infinite;
32
+ }
33
+ }
34
+
35
+ @keyframes placeholder-glow {
36
+ 50% {
37
+ opacity: $placeholder-opacity-min;
38
+ }
39
+ }
40
+
41
+ .placeholder-wave {
42
+ mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);
43
+ mask-size: 200% 100%;
44
+ animation: placeholder-wave 2s linear infinite;
45
+ }
46
+
47
+ @keyframes placeholder-wave {
48
+ 100% {
49
+ mask-position: -200% 0%;
50
+ }
51
+ }
@@ -1,7 +1,7 @@
1
1
  .popover {
2
2
  position: absolute;
3
3
  top: 0;
4
- left: 0;
4
+ left: 0 #{"/* rtl:ignore */"};
5
5
  z-index: $zindex-popover;
6
6
  display: block;
7
7
  max-width: $popover-max-width;
@@ -17,12 +17,11 @@
17
17
  @include border-radius($popover-border-radius);
18
18
  @include box-shadow($popover-box-shadow);
19
19
 
20
- .arrow {
20
+ .popover-arrow {
21
21
  position: absolute;
22
22
  display: block;
23
23
  width: $popover-arrow-width;
24
24
  height: $popover-arrow-height;
25
- margin: 0 $border-radius-lg;
26
25
 
27
26
  &::before,
28
27
  &::after {
@@ -36,63 +35,56 @@
36
35
  }
37
36
 
38
37
  .bs-popover-top {
39
- margin-bottom: $popover-arrow-height;
40
-
41
- > .arrow {
42
- bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
38
+ > .popover-arrow {
39
+ bottom: subtract(-$popover-arrow-height, $popover-border-width);
43
40
 
44
41
  &::before {
45
42
  bottom: 0;
46
- border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
43
+ border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;
47
44
  border-top-color: $popover-arrow-outer-color;
48
45
  }
49
46
 
50
47
  &::after {
51
48
  bottom: $popover-border-width;
52
- border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
49
+ border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;
53
50
  border-top-color: $popover-arrow-color;
54
51
  }
55
52
  }
56
53
  }
57
54
 
58
- .bs-popover-right {
59
- margin-left: $popover-arrow-height;
60
-
61
- > .arrow {
62
- left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
55
+ .bs-popover-end {
56
+ > .popover-arrow {
57
+ left: subtract(-$popover-arrow-height, $popover-border-width);
63
58
  width: $popover-arrow-height;
64
59
  height: $popover-arrow-width;
65
- margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
66
60
 
67
61
  &::before {
68
62
  left: 0;
69
- border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
63
+ border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;
70
64
  border-right-color: $popover-arrow-outer-color;
71
65
  }
72
66
 
73
67
  &::after {
74
68
  left: $popover-border-width;
75
- border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
69
+ border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;
76
70
  border-right-color: $popover-arrow-color;
77
71
  }
78
72
  }
79
73
  }
80
74
 
81
75
  .bs-popover-bottom {
82
- margin-top: $popover-arrow-height;
83
-
84
- > .arrow {
85
- top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
76
+ > .popover-arrow {
77
+ top: subtract(-$popover-arrow-height, $popover-border-width);
86
78
 
87
79
  &::before {
88
80
  top: 0;
89
- border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
81
+ border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);
90
82
  border-bottom-color: $popover-arrow-outer-color;
91
83
  }
92
84
 
93
85
  &::after {
94
86
  top: $popover-border-width;
95
- border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
87
+ border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);
96
88
  border-bottom-color: $popover-arrow-color;
97
89
  }
98
90
  }
@@ -104,51 +96,47 @@
104
96
  left: 50%;
105
97
  display: block;
106
98
  width: $popover-arrow-width;
107
- margin-left: -$popover-arrow-width / 2;
99
+ margin-left: -$popover-arrow-width * .5;
108
100
  content: "";
109
101
  border-bottom: $popover-border-width solid $popover-header-bg;
110
102
  }
111
103
  }
112
104
 
113
- .bs-popover-left {
114
- margin-right: $popover-arrow-height;
115
-
116
- > .arrow {
117
- right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
105
+ .bs-popover-start {
106
+ > .popover-arrow {
107
+ right: subtract(-$popover-arrow-height, $popover-border-width);
118
108
  width: $popover-arrow-height;
119
109
  height: $popover-arrow-width;
120
- margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
121
110
 
122
111
  &::before {
123
112
  right: 0;
124
- border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
113
+ border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;
125
114
  border-left-color: $popover-arrow-outer-color;
126
115
  }
127
116
 
128
117
  &::after {
129
118
  right: $popover-border-width;
130
- border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
119
+ border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;
131
120
  border-left-color: $popover-arrow-color;
132
121
  }
133
122
  }
134
123
  }
135
124
 
136
125
  .bs-popover-auto {
137
- &[x-placement^="top"] {
126
+ &[data-popper-placement^="top"] {
138
127
  @extend .bs-popover-top;
139
128
  }
140
- &[x-placement^="right"] {
141
- @extend .bs-popover-right;
129
+ &[data-popper-placement^="right"] {
130
+ @extend .bs-popover-end;
142
131
  }
143
- &[x-placement^="bottom"] {
132
+ &[data-popper-placement^="bottom"] {
144
133
  @extend .bs-popover-bottom;
145
134
  }
146
- &[x-placement^="left"] {
147
- @extend .bs-popover-left;
135
+ &[data-popper-placement^="left"] {
136
+ @extend .bs-popover-start;
148
137
  }
149
138
  }
150
139
 
151
-
152
140
  // Offset the popover to account for the popover arrow
153
141
  .popover-header {
154
142
  padding: $popover-header-padding-y $popover-header-padding-x;
@@ -156,9 +144,8 @@
156
144
  @include font-size($font-size-base);
157
145
  color: $popover-header-color;
158
146
  background-color: $popover-header-bg;
159
- border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);
160
- $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width});
161
- @include border-top-radius($offset-border-width);
147
+ border-bottom: $popover-border-width solid $popover-border-color;
148
+ @include border-top-radius($popover-inner-border-radius);
162
149
 
163
150
  &:empty {
164
151
  display: none;