bootstrap 4.3.1 → 4.6.2.1

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +4 -12
  4. data/README.md +7 -1
  5. data/Rakefile +16 -4
  6. data/assets/javascripts/bootstrap/alert.js +43 -55
  7. data/assets/javascripts/bootstrap/button.js +112 -70
  8. data/assets/javascripts/bootstrap/carousel.js +164 -189
  9. data/assets/javascripts/bootstrap/collapse.js +98 -129
  10. data/assets/javascripts/bootstrap/dropdown.js +165 -200
  11. data/assets/javascripts/bootstrap/modal.js +218 -205
  12. data/assets/javascripts/bootstrap/popover.js +63 -79
  13. data/assets/javascripts/bootstrap/scrollspy.js +82 -119
  14. data/assets/javascripts/bootstrap/tab.js +79 -85
  15. data/assets/javascripts/bootstrap/toast.js +100 -115
  16. data/assets/javascripts/bootstrap/tooltip.js +207 -225
  17. data/assets/javascripts/bootstrap/util.js +41 -23
  18. data/assets/javascripts/bootstrap.js +1235 -1314
  19. data/assets/javascripts/bootstrap.min.js +4 -4
  20. data/assets/stylesheets/_bootstrap-grid.scss +5 -4
  21. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  22. data/assets/stylesheets/_bootstrap.scss +4 -4
  23. data/assets/stylesheets/bootstrap/_alert.scss +1 -0
  24. data/assets/stylesheets/bootstrap/_badge.scss +1 -1
  25. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -2
  26. data/assets/stylesheets/bootstrap/_button-group.scss +1 -1
  27. data/assets/stylesheets/bootstrap/_buttons.scss +13 -8
  28. data/assets/stylesheets/bootstrap/_card.scss +47 -50
  29. data/assets/stylesheets/bootstrap/_carousel.scss +12 -9
  30. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  31. data/assets/stylesheets/bootstrap/_code.scss +1 -1
  32. data/assets/stylesheets/bootstrap/_custom-forms.scss +43 -24
  33. data/assets/stylesheets/bootstrap/_dropdown.scss +7 -6
  34. data/assets/stylesheets/bootstrap/_forms.scss +30 -13
  35. data/assets/stylesheets/bootstrap/_functions.scss +110 -6
  36. data/assets/stylesheets/bootstrap/_grid.scss +32 -11
  37. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  38. data/assets/stylesheets/bootstrap/_input-group.scss +23 -5
  39. data/assets/stylesheets/bootstrap/_jumbotron.scss +1 -1
  40. data/assets/stylesheets/bootstrap/_list-group.scss +36 -31
  41. data/assets/stylesheets/bootstrap/_mixins.scss +3 -3
  42. data/assets/stylesheets/bootstrap/_modal.scss +26 -15
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -7
  44. data/assets/stylesheets/bootstrap/_navbar.scss +55 -17
  45. data/assets/stylesheets/bootstrap/_pagination.scss +5 -4
  46. data/assets/stylesheets/bootstrap/_popover.scss +17 -18
  47. data/assets/stylesheets/bootstrap/_print.scss +1 -10
  48. data/assets/stylesheets/bootstrap/_progress.scss +7 -3
  49. data/assets/stylesheets/bootstrap/_reboot.scss +39 -38
  50. data/assets/stylesheets/bootstrap/_spinners.scss +18 -8
  51. data/assets/stylesheets/bootstrap/_tables.scss +3 -3
  52. data/assets/stylesheets/bootstrap/_toasts.scss +4 -2
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -4
  54. data/assets/stylesheets/bootstrap/_transitions.scss +6 -0
  55. data/assets/stylesheets/bootstrap/_type.scss +3 -3
  56. data/assets/stylesheets/bootstrap/_utilities.scss +2 -1
  57. data/assets/stylesheets/bootstrap/_variables.scss +71 -45
  58. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  59. data/assets/stylesheets/bootstrap/mixins/_badge.scss +1 -1
  60. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +27 -14
  61. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +11 -8
  62. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  63. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -3
  64. data/assets/stylesheets/bootstrap/mixins/_forms.scss +52 -49
  65. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +31 -17
  66. data/assets/stylesheets/bootstrap/mixins/_grid.scss +32 -14
  67. data/assets/stylesheets/bootstrap/mixins/_hover.scss +4 -4
  68. data/assets/stylesheets/bootstrap/mixins/_image.scss +2 -2
  69. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  70. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  71. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -1
  72. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  73. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -4
  74. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +1 -1
  75. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +3 -2
  76. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  77. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  78. data/assets/stylesheets/bootstrap/utilities/_borders.scss +1 -1
  79. data/assets/stylesheets/bootstrap/utilities/_embed.scss +1 -1
  80. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  81. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +1 -1
  82. data/assets/stylesheets/bootstrap/utilities/_text.scss +4 -4
  83. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +126 -102
  84. data/bootstrap.gemspec +2 -4
  85. data/lib/bootstrap/engine.rb +17 -1
  86. data/lib/bootstrap/version.rb +2 -2
  87. data/tasks/updater/js.rb +18 -6
  88. data/tasks/updater/network.rb +8 -2
  89. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  90. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  91. data/test/gemfiles/rails_6_0.gemfile +7 -0
  92. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  93. data/test/gemfiles/rails_7_0_sassc.gemfile +8 -0
  94. data/test/support/dummy_rails_integration.rb +3 -1
  95. data/test/test_helper.rb +18 -13
  96. metadata +17 -21
@@ -1,13 +1,14 @@
1
1
  .toast {
2
+ // Prevents from shrinking in IE11, when in a flex container
3
+ // See https://github.com/twbs/bootstrap/issues/28341
4
+ flex-basis: $toast-max-width;
2
5
  max-width: $toast-max-width;
3
- overflow: hidden; // cheap rounded corners on nested items
4
6
  @include font-size($toast-font-size);
5
7
  color: $toast-color;
6
8
  background-color: $toast-background-color;
7
9
  background-clip: padding-box;
8
10
  border: $toast-border-width solid $toast-border-color;
9
11
  box-shadow: $toast-box-shadow;
10
- backdrop-filter: blur(10px);
11
12
  opacity: 0;
12
13
  @include border-radius($toast-border-radius);
13
14
 
@@ -37,6 +38,7 @@
37
38
  background-color: $toast-header-background-color;
38
39
  background-clip: padding-box;
39
40
  border-bottom: $toast-border-width solid $toast-header-border-color;
41
+ @include border-top-radius(subtract($toast-border-radius, $toast-border-width));
40
42
  }
41
43
 
42
44
  .toast-body {
@@ -37,7 +37,7 @@
37
37
 
38
38
  &::before {
39
39
  top: 0;
40
- border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
40
+ border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
41
41
  border-top-color: $tooltip-arrow-color;
42
42
  }
43
43
  }
@@ -53,7 +53,7 @@
53
53
 
54
54
  &::before {
55
55
  right: 0;
56
- border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
56
+ border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
57
57
  border-right-color: $tooltip-arrow-color;
58
58
  }
59
59
  }
@@ -67,7 +67,7 @@
67
67
 
68
68
  &::before {
69
69
  bottom: 0;
70
- border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
70
+ border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
71
71
  border-bottom-color: $tooltip-arrow-color;
72
72
  }
73
73
  }
@@ -83,7 +83,7 @@
83
83
 
84
84
  &::before {
85
85
  left: 0;
86
- border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
86
+ border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
87
87
  border-left-color: $tooltip-arrow-color;
88
88
  }
89
89
  }
@@ -17,4 +17,10 @@
17
17
  height: 0;
18
18
  overflow: hidden;
19
19
  @include transition($transition-collapse);
20
+
21
+ &.width {
22
+ width: 0;
23
+ height: auto;
24
+ @include transition($transition-collapse-width);
25
+ }
20
26
  }
@@ -1,4 +1,4 @@
1
- // stylelint-disable declaration-no-important, selector-list-comma-newline-after
1
+ // stylelint-disable selector-list-comma-newline-after
2
2
 
3
3
  //
4
4
  // Headings
@@ -82,12 +82,12 @@ mark,
82
82
  //
83
83
 
84
84
  .list-unstyled {
85
- @include list-unstyled;
85
+ @include list-unstyled();
86
86
  }
87
87
 
88
88
  // Inline turns list items into inline-block
89
89
  .list-inline {
90
- @include list-unstyled;
90
+ @include list-unstyled();
91
91
  }
92
92
  .list-inline-item {
93
93
  display: inline-block;
@@ -6,12 +6,13 @@
6
6
  @import "utilities/embed";
7
7
  @import "utilities/flex";
8
8
  @import "utilities/float";
9
+ @import "utilities/interactions";
9
10
  @import "utilities/overflow";
10
11
  @import "utilities/position";
11
12
  @import "utilities/screenreaders";
12
13
  @import "utilities/shadows";
13
14
  @import "utilities/sizing";
14
- @import "utilities/stretched-link";
15
15
  @import "utilities/spacing";
16
+ @import "utilities/stretched-link";
16
17
  @import "utilities/text";
17
18
  @import "utilities/visibility";
@@ -18,7 +18,6 @@ $gray-900: #212529 !default;
18
18
  $black: #000 !default;
19
19
 
20
20
  $grays: () !default;
21
- // stylelint-disable-next-line scss/dollar-variable-default
22
21
  $grays: map-merge(
23
22
  (
24
23
  "100": $gray-100,
@@ -46,7 +45,6 @@ $teal: #20c997 !default;
46
45
  $cyan: #17a2b8 !default;
47
46
 
48
47
  $colors: () !default;
49
- // stylelint-disable-next-line scss/dollar-variable-default
50
48
  $colors: map-merge(
51
49
  (
52
50
  "blue": $blue,
@@ -76,7 +74,6 @@ $light: $gray-100 !default;
76
74
  $dark: $gray-800 !default;
77
75
 
78
76
  $theme-colors: () !default;
79
- // stylelint-disable-next-line scss/dollar-variable-default
80
77
  $theme-colors: map-merge(
81
78
  (
82
79
  "primary": $primary,
@@ -101,6 +98,15 @@ $yiq-contrasted-threshold: 150 !default;
101
98
  $yiq-text-dark: $gray-900 !default;
102
99
  $yiq-text-light: $white !default;
103
100
 
101
+ // Characters which are escaped by the escape-svg function
102
+ $escaped-characters: (
103
+ ("<", "%3c"),
104
+ (">", "%3e"),
105
+ ("#", "%23"),
106
+ ("(", "%28"),
107
+ (")", "%29"),
108
+ ) !default;
109
+
104
110
 
105
111
  // Options
106
112
  //
@@ -129,7 +135,6 @@ $enable-deprecation-messages: true !default;
129
135
 
130
136
  $spacer: 1rem !default;
131
137
  $spacers: () !default;
132
- // stylelint-disable-next-line scss/dollar-variable-default
133
138
  $spacers: map-merge(
134
139
  (
135
140
  0: 0,
@@ -144,7 +149,6 @@ $spacers: map-merge(
144
149
 
145
150
  // This variable affects the `.h-*` and `.w-*` classes.
146
151
  $sizes: () !default;
147
- // stylelint-disable-next-line scss/dollar-variable-default
148
152
  $sizes: map-merge(
149
153
  (
150
154
  25: 25%,
@@ -220,6 +224,7 @@ $container-max-widths: (
220
224
 
221
225
  $grid-columns: 12 !default;
222
226
  $grid-gutter-width: 30px !default;
227
+ $grid-row-columns: 6 !default;
223
228
 
224
229
 
225
230
  // Components
@@ -252,9 +257,9 @@ $caret-spacing: $caret-width * .85 !default;
252
257
  $transition-base: all .2s ease-in-out !default;
253
258
  $transition-fade: opacity .15s linear !default;
254
259
  $transition-collapse: height .35s ease !default;
260
+ $transition-collapse-width: width .35s ease !default;
255
261
 
256
262
  $embed-responsive-aspect-ratios: () !default;
257
- // stylelint-disable-next-line scss/dollar-variable-default
258
263
  $embed-responsive-aspect-ratios: join(
259
264
  (
260
265
  (21 9),
@@ -270,7 +275,7 @@ $embed-responsive-aspect-ratios: join(
270
275
  // Font, line-height, and color for body text, headings, and more.
271
276
 
272
277
  // stylelint-disable value-keyword-case
273
- $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
278
+ $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
274
279
  $font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
275
280
  $font-family-base: $font-family-sans-serif !default;
276
281
  // stylelint-enable value-keyword-case
@@ -295,7 +300,7 @@ $h4-font-size: $font-size-base * 1.5 !default;
295
300
  $h5-font-size: $font-size-base * 1.25 !default;
296
301
  $h6-font-size: $font-size-base !default;
297
302
 
298
- $headings-margin-bottom: $spacer / 2 !default;
303
+ $headings-margin-bottom: $spacer * .5 !default;
299
304
  $headings-font-family: null !default;
300
305
  $headings-font-weight: 500 !default;
301
306
  $headings-line-height: 1.2 !default;
@@ -315,7 +320,7 @@ $display-line-height: $headings-line-height !default;
315
320
  $lead-font-size: $font-size-base * 1.25 !default;
316
321
  $lead-font-weight: 300 !default;
317
322
 
318
- $small-font-size: 80% !default;
323
+ $small-font-size: .875em !default;
319
324
 
320
325
  $text-muted: $gray-600 !default;
321
326
 
@@ -359,6 +364,7 @@ $table-border-color: $border-color !default;
359
364
 
360
365
  $table-head-bg: $gray-200 !default;
361
366
  $table-head-color: $gray-700 !default;
367
+ $table-th-font-weight: null !default;
362
368
 
363
369
  $table-dark-color: $white !default;
364
370
  $table-dark-bg: $gray-800 !default;
@@ -366,7 +372,6 @@ $table-dark-accent-bg: rgba($white, .05) !default;
366
372
  $table-dark-hover-color: $table-dark-color !default;
367
373
  $table-dark-hover-bg: rgba($white, .075) !default;
368
374
  $table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;
369
- $table-dark-color: $white !default;
370
375
 
371
376
  $table-striped-order: odd !default;
372
377
 
@@ -412,6 +417,7 @@ $btn-padding-x: $input-btn-padding-x !default;
412
417
  $btn-font-family: $input-btn-font-family !default;
413
418
  $btn-font-size: $input-btn-font-size !default;
414
419
  $btn-line-height: $input-btn-line-height !default;
420
+ $btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping
415
421
 
416
422
  $btn-padding-y-sm: $input-btn-padding-y-sm !default;
417
423
  $btn-padding-x-sm: $input-btn-padding-x-sm !default;
@@ -488,13 +494,13 @@ $input-plaintext-color: $body-color !default;
488
494
 
489
495
  $input-height-border: $input-border-width * 2 !default;
490
496
 
491
- $input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;
492
- $input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;
493
- $input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;
497
+ $input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;
498
+ $input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;
499
+ $input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;
494
500
 
495
- $input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;
496
- $input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;
497
- $input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;
501
+ $input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;
502
+ $input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;
503
+ $input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
498
504
 
499
505
  $input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
500
506
 
@@ -518,6 +524,7 @@ $custom-forms-transition: background-color .15s ease-in-out, borde
518
524
 
519
525
  $custom-control-gutter: .5rem !default;
520
526
  $custom-control-spacer-x: 1rem !default;
527
+ $custom-control-cursor: null !default;
521
528
 
522
529
  $custom-control-indicator-size: 1rem !default;
523
530
  $custom-control-indicator-bg: $input-bg !default;
@@ -527,13 +534,15 @@ $custom-control-indicator-box-shadow: $input-box-shadow !default;
527
534
  $custom-control-indicator-border-color: $gray-500 !default;
528
535
  $custom-control-indicator-border-width: $input-border-width !default;
529
536
 
537
+ $custom-control-label-color: null !default;
538
+
530
539
  $custom-control-indicator-disabled-bg: $input-disabled-bg !default;
531
540
  $custom-control-label-disabled-color: $gray-600 !default;
532
541
 
533
542
  $custom-control-indicator-checked-color: $component-active-color !default;
534
543
  $custom-control-indicator-checked-bg: $component-active-bg !default;
535
544
  $custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;
536
- $custom-control-indicator-checked-box-shadow: none !default;
545
+ $custom-control-indicator-checked-box-shadow: null !default;
537
546
  $custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;
538
547
 
539
548
  $custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;
@@ -541,24 +550,24 @@ $custom-control-indicator-focus-border-color: $input-focus-border-color !defau
541
550
 
542
551
  $custom-control-indicator-active-color: $component-active-color !default;
543
552
  $custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;
544
- $custom-control-indicator-active-box-shadow: none !default;
553
+ $custom-control-indicator-active-box-shadow: null !default;
545
554
  $custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;
546
555
 
547
556
  $custom-checkbox-indicator-border-radius: $border-radius !default;
548
- $custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"), "#", "%23") !default;
557
+ $custom-checkbox-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>") !default;
549
558
 
550
559
  $custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;
551
560
  $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;
552
- $custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e"), "#", "%23") !default;
553
- $custom-checkbox-indicator-indeterminate-box-shadow: none !default;
561
+ $custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>") !default;
562
+ $custom-checkbox-indicator-indeterminate-box-shadow: null !default;
554
563
  $custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;
555
564
 
556
565
  $custom-radio-indicator-border-radius: 50% !default;
557
- $custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e"), "#", "%23") !default;
566
+ $custom-radio-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>") !default;
558
567
 
559
568
  $custom-switch-width: $custom-control-indicator-size * 1.75 !default;
560
- $custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;
561
- $custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;
569
+ $custom-switch-indicator-border-radius: $custom-control-indicator-size * .5 !default;
570
+ $custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;
562
571
 
563
572
  $custom-select-padding-y: $input-padding-y !default;
564
573
  $custom-select-padding-x: $input-padding-x !default;
@@ -574,10 +583,10 @@ $custom-select-bg: $input-bg !default;
574
583
  $custom-select-disabled-bg: $gray-200 !default;
575
584
  $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
576
585
  $custom-select-indicator-color: $gray-800 !default;
577
- $custom-select-indicator: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e"), "#", "%23") !default;
578
- $custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
586
+ $custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default;
587
+ $custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
579
588
 
580
- $custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;
589
+ $custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;
581
590
  $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
582
591
  $custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;
583
592
 
@@ -650,12 +659,11 @@ $form-feedback-valid-color: theme-color("success") !default;
650
659
  $form-feedback-invalid-color: theme-color("danger") !default;
651
660
 
652
661
  $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
653
- $form-feedback-icon-valid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"), "#", "%23") !default;
662
+ $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>") !default;
654
663
  $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
655
- $form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"), "#", "%23") !default;
664
+ $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
656
665
 
657
666
  $form-validation-states: () !default;
658
- // stylelint-disable-next-line scss/dollar-variable-default
659
667
  $form-validation-states: map-merge(
660
668
  (
661
669
  "valid": (
@@ -703,12 +711,12 @@ $nav-pills-link-active-color: $component-active-color !default;
703
711
  $nav-pills-link-active-bg: $component-active-bg !default;
704
712
 
705
713
  $nav-divider-color: $gray-200 !default;
706
- $nav-divider-margin-y: $spacer / 2 !default;
714
+ $nav-divider-margin-y: $spacer * .5 !default;
707
715
 
708
716
 
709
717
  // Navbar
710
718
 
711
- $navbar-padding-y: $spacer / 2 !default;
719
+ $navbar-padding-y: $spacer * .5 !default;
712
720
  $navbar-padding-x: $spacer !default;
713
721
 
714
722
  $navbar-nav-link-padding-x: .5rem !default;
@@ -717,25 +725,27 @@ $navbar-brand-font-size: $font-size-lg !default;
717
725
  // Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
718
726
  $nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;
719
727
  $navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;
720
- $navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;
728
+ $navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;
721
729
 
722
730
  $navbar-toggler-padding-y: .25rem !default;
723
731
  $navbar-toggler-padding-x: .75rem !default;
724
732
  $navbar-toggler-font-size: $font-size-lg !default;
725
733
  $navbar-toggler-border-radius: $btn-border-radius !default;
726
734
 
735
+ $navbar-nav-scroll-max-height: 75vh !default;
736
+
727
737
  $navbar-dark-color: rgba($white, .5) !default;
728
738
  $navbar-dark-hover-color: rgba($white, .75) !default;
729
739
  $navbar-dark-active-color: $white !default;
730
740
  $navbar-dark-disabled-color: rgba($white, .25) !default;
731
- $navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"), "#", "%23") !default;
741
+ $navbar-dark-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
732
742
  $navbar-dark-toggler-border-color: rgba($white, .1) !default;
733
743
 
734
744
  $navbar-light-color: rgba($black, .5) !default;
735
745
  $navbar-light-hover-color: rgba($black, .7) !default;
736
746
  $navbar-light-active-color: rgba($black, .9) !default;
737
747
  $navbar-light-disabled-color: rgba($black, .3) !default;
738
- $navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"), "#", "%23") !default;
748
+ $navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
739
749
  $navbar-light-toggler-border-color: rgba($black, .1) !default;
740
750
 
741
751
  $navbar-light-brand-color: $navbar-light-active-color !default;
@@ -749,6 +759,7 @@ $navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
749
759
  // Dropdown menu container and contents.
750
760
 
751
761
  $dropdown-min-width: 10rem !default;
762
+ $dropdown-padding-x: 0 !default;
752
763
  $dropdown-padding-y: .5rem !default;
753
764
  $dropdown-spacer: .125rem !default;
754
765
  $dropdown-font-size: $font-size-base !default;
@@ -757,24 +768,25 @@ $dropdown-bg: $white !default;
757
768
  $dropdown-border-color: rgba($black, .15) !default;
758
769
  $dropdown-border-radius: $border-radius !default;
759
770
  $dropdown-border-width: $border-width !default;
760
- $dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;
771
+ $dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;
761
772
  $dropdown-divider-bg: $gray-200 !default;
762
773
  $dropdown-divider-margin-y: $nav-divider-margin-y !default;
763
774
  $dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
764
775
 
765
776
  $dropdown-link-color: $gray-900 !default;
766
777
  $dropdown-link-hover-color: darken($gray-900, 5%) !default;
767
- $dropdown-link-hover-bg: $gray-100 !default;
778
+ $dropdown-link-hover-bg: $gray-200 !default;
768
779
 
769
780
  $dropdown-link-active-color: $component-active-color !default;
770
781
  $dropdown-link-active-bg: $component-active-bg !default;
771
782
 
772
- $dropdown-link-disabled-color: $gray-600 !default;
783
+ $dropdown-link-disabled-color: $gray-500 !default;
773
784
 
774
785
  $dropdown-item-padding-y: .25rem !default;
775
786
  $dropdown-item-padding-x: 1.5rem !default;
776
787
 
777
788
  $dropdown-header-color: $gray-600 !default;
789
+ $dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;
778
790
 
779
791
 
780
792
  // Pagination
@@ -807,6 +819,9 @@ $pagination-disabled-color: $gray-600 !default;
807
819
  $pagination-disabled-bg: $white !default;
808
820
  $pagination-disabled-border-color: $gray-300 !default;
809
821
 
822
+ $pagination-border-radius-sm: $border-radius-sm !default;
823
+ $pagination-border-radius-lg: $border-radius-lg !default;
824
+
810
825
 
811
826
  // Jumbotron
812
827
 
@@ -822,15 +837,16 @@ $card-spacer-x: 1.25rem !default;
822
837
  $card-border-width: $border-width !default;
823
838
  $card-border-radius: $border-radius !default;
824
839
  $card-border-color: rgba($black, .125) !default;
825
- $card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;
840
+ $card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;
826
841
  $card-cap-bg: rgba($black, .03) !default;
827
842
  $card-cap-color: null !default;
843
+ $card-height: null !default;
828
844
  $card-color: null !default;
829
845
  $card-bg: $white !default;
830
846
 
831
847
  $card-img-overlay-padding: 1.25rem !default;
832
848
 
833
- $card-group-margin: $grid-gutter-width / 2 !default;
849
+ $card-group-margin: $grid-gutter-width * .5 !default;
834
850
  $card-deck-margin: $card-group-margin !default;
835
851
 
836
852
  $card-columns-count: 3 !default;
@@ -871,6 +887,7 @@ $popover-max-width: 276px !default;
871
887
  $popover-border-width: $border-width !default;
872
888
  $popover-border-color: rgba($black, .2) !default;
873
889
  $popover-border-radius: $border-radius-lg !default;
890
+ $popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;
874
891
  $popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;
875
892
 
876
893
  $popover-header-bg: darken($popover-bg, 3%) !default;
@@ -929,6 +946,9 @@ $badge-pill-border-radius: 10rem !default;
929
946
  // Padding applied to the modal body
930
947
  $modal-inner-padding: 1rem !default;
931
948
 
949
+ // Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding
950
+ $modal-footer-margin-between: .5rem !default;
951
+
932
952
  $modal-dialog-margin: .5rem !default;
933
953
  $modal-dialog-margin-y-sm-up: 1.75rem !default;
934
954
 
@@ -939,6 +959,7 @@ $modal-content-bg: $white !default;
939
959
  $modal-content-border-color: rgba($black, .2) !default;
940
960
  $modal-content-border-width: $border-width !default;
941
961
  $modal-content-border-radius: $border-radius-lg !default;
962
+ $modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
942
963
  $modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
943
964
  $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
944
965
 
@@ -960,6 +981,7 @@ $modal-sm: 300px !default;
960
981
  $modal-fade-transform: translate(0, -50px) !default;
961
982
  $modal-show-transform: none !default;
962
983
  $modal-transition: transform .3s ease-out !default;
984
+ $modal-scale-transform: scale(1.02) !default;
963
985
 
964
986
 
965
987
  // Alerts
@@ -1035,6 +1057,8 @@ $figure-caption-color: $gray-600 !default;
1035
1057
 
1036
1058
  // Breadcrumbs
1037
1059
 
1060
+ $breadcrumb-font-size: null !default;
1061
+
1038
1062
  $breadcrumb-padding-y: .75rem !default;
1039
1063
  $breadcrumb-padding-x: 1rem !default;
1040
1064
  $breadcrumb-item-padding: .5rem !default;
@@ -1069,8 +1093,8 @@ $carousel-caption-color: $white !default;
1069
1093
 
1070
1094
  $carousel-control-icon-width: 20px !default;
1071
1095
 
1072
- $carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"), "#", "%23") !default;
1073
- $carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"), "#", "%23") !default;
1096
+ $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>") !default;
1097
+ $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>") !default;
1074
1098
 
1075
1099
  $carousel-transition-duration: .6s !default;
1076
1100
  $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
@@ -1078,9 +1102,10 @@ $carousel-transition: transform $carousel-transition-duration eas
1078
1102
 
1079
1103
  // Spinners
1080
1104
 
1081
- $spinner-width: 2rem !default;
1082
- $spinner-height: $spinner-width !default;
1083
- $spinner-border-width: .25em !default;
1105
+ $spinner-width: 2rem !default;
1106
+ $spinner-height: $spinner-width !default;
1107
+ $spinner-vertical-align: -.125em !default;
1108
+ $spinner-border-width: .25em !default;
1084
1109
 
1085
1110
  $spinner-width-sm: 1rem !default;
1086
1111
  $spinner-height-sm: $spinner-width-sm !default;
@@ -1115,6 +1140,7 @@ $pre-scrollable-max-height: 340px !default;
1115
1140
  $displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;
1116
1141
  $overflows: auto, hidden !default;
1117
1142
  $positions: static, relative, absolute, fixed, sticky !default;
1143
+ $user-selects: all, auto, none !default;
1118
1144
 
1119
1145
 
1120
1146
  // Printing
@@ -2,20 +2,22 @@
2
2
 
3
3
  // Contextual backgrounds
4
4
 
5
- @mixin bg-variant($parent, $color) {
5
+ @mixin bg-variant($parent, $color, $ignore-warning: false) {
6
6
  #{$parent} {
7
7
  background-color: $color !important;
8
8
  }
9
9
  a#{$parent},
10
10
  button#{$parent} {
11
- @include hover-focus {
11
+ @include hover-focus() {
12
12
  background-color: darken($color, 10%) !important;
13
13
  }
14
14
  }
15
+ @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
15
16
  }
16
17
 
17
- @mixin bg-gradient-variant($parent, $color) {
18
+ @mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
18
19
  #{$parent} {
19
20
  background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
20
21
  }
22
+ @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
21
23
  }
@@ -3,7 +3,7 @@
3
3
  background-color: $bg;
4
4
 
5
5
  @at-root a#{&} {
6
- @include hover-focus {
6
+ @include hover-focus() {
7
7
  color: color-yiq($bg);
8
8
  background-color: darken($bg, 10%);
9
9
  }
@@ -1,9 +1,22 @@
1
- // stylelint-disable property-blacklist
1
+ // stylelint-disable property-disallowed-list
2
2
  // Single side border-radius
3
3
 
4
+ // Helper function to replace negative values with 0
5
+ @function valid-radius($radius) {
6
+ $return: ();
7
+ @each $value in $radius {
8
+ @if type-of($value) == number {
9
+ $return: append($return, max($value, 0));
10
+ } @else {
11
+ $return: append($return, $value);
12
+ }
13
+ }
14
+ @return $return;
15
+ }
16
+
4
17
  @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
5
18
  @if $enable-rounded {
6
- border-radius: $radius;
19
+ border-radius: valid-radius($radius);
7
20
  }
8
21
  @else if $fallback-border-radius != false {
9
22
  border-radius: $fallback-border-radius;
@@ -12,52 +25,52 @@
12
25
 
13
26
  @mixin border-top-radius($radius) {
14
27
  @if $enable-rounded {
15
- border-top-left-radius: $radius;
16
- border-top-right-radius: $radius;
28
+ border-top-left-radius: valid-radius($radius);
29
+ border-top-right-radius: valid-radius($radius);
17
30
  }
18
31
  }
19
32
 
20
33
  @mixin border-right-radius($radius) {
21
34
  @if $enable-rounded {
22
- border-top-right-radius: $radius;
23
- border-bottom-right-radius: $radius;
35
+ border-top-right-radius: valid-radius($radius);
36
+ border-bottom-right-radius: valid-radius($radius);
24
37
  }
25
38
  }
26
39
 
27
40
  @mixin border-bottom-radius($radius) {
28
41
  @if $enable-rounded {
29
- border-bottom-right-radius: $radius;
30
- border-bottom-left-radius: $radius;
42
+ border-bottom-right-radius: valid-radius($radius);
43
+ border-bottom-left-radius: valid-radius($radius);
31
44
  }
32
45
  }
33
46
 
34
47
  @mixin border-left-radius($radius) {
35
48
  @if $enable-rounded {
36
- border-top-left-radius: $radius;
37
- border-bottom-left-radius: $radius;
49
+ border-top-left-radius: valid-radius($radius);
50
+ border-bottom-left-radius: valid-radius($radius);
38
51
  }
39
52
  }
40
53
 
41
54
  @mixin border-top-left-radius($radius) {
42
55
  @if $enable-rounded {
43
- border-top-left-radius: $radius;
56
+ border-top-left-radius: valid-radius($radius);
44
57
  }
45
58
  }
46
59
 
47
60
  @mixin border-top-right-radius($radius) {
48
61
  @if $enable-rounded {
49
- border-top-right-radius: $radius;
62
+ border-top-right-radius: valid-radius($radius);
50
63
  }
51
64
  }
52
65
 
53
66
  @mixin border-bottom-right-radius($radius) {
54
67
  @if $enable-rounded {
55
- border-bottom-right-radius: $radius;
68
+ border-bottom-right-radius: valid-radius($radius);
56
69
  }
57
70
  }
58
71
 
59
72
  @mixin border-bottom-left-radius($radius) {
60
73
  @if $enable-rounded {
61
- border-bottom-left-radius: $radius;
74
+ border-bottom-left-radius: valid-radius($radius);
62
75
  }
63
76
  }