bootstrap 5.2.3 → 5.3.2

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +11 -5
  3. data/Gemfile +1 -0
  4. data/README.md +6 -2
  5. data/Rakefile +10 -1
  6. data/assets/javascripts/bootstrap/alert.js +22 -32
  7. data/assets/javascripts/bootstrap/base-component.js +22 -38
  8. data/assets/javascripts/bootstrap/button.js +19 -22
  9. data/assets/javascripts/bootstrap/carousel.js +52 -135
  10. data/assets/javascripts/bootstrap/collapse.js +40 -102
  11. data/assets/javascripts/bootstrap/dom/data.js +8 -12
  12. data/assets/javascripts/bootstrap/dom/event-handler.js +19 -66
  13. data/assets/javascripts/bootstrap/dom/manipulator.js +4 -17
  14. data/assets/javascripts/bootstrap/dom/selector-engine.js +42 -24
  15. data/assets/javascripts/bootstrap/dropdown.js +74 -145
  16. data/assets/javascripts/bootstrap/modal.js +53 -133
  17. data/assets/javascripts/bootstrap/offcanvas.js +50 -102
  18. data/assets/javascripts/bootstrap/popover.js +23 -29
  19. data/assets/javascripts/bootstrap/scrollspy.js +53 -90
  20. data/assets/javascripts/bootstrap/tab.js +63 -112
  21. data/assets/javascripts/bootstrap/toast.js +31 -73
  22. data/assets/javascripts/bootstrap/tooltip.js +75 -177
  23. data/assets/javascripts/bootstrap/util/backdrop.js +28 -54
  24. data/assets/javascripts/bootstrap/util/component-functions.js +13 -18
  25. data/assets/javascripts/bootstrap/util/config.js +15 -27
  26. data/assets/javascripts/bootstrap/util/focustrap.js +20 -36
  27. data/assets/javascripts/bootstrap/util/index.js +42 -111
  28. data/assets/javascripts/bootstrap/util/sanitizer.js +30 -42
  29. data/assets/javascripts/bootstrap/util/scrollbar.js +24 -50
  30. data/assets/javascripts/bootstrap/util/swipe.js +27 -48
  31. data/assets/javascripts/bootstrap/util/template-factory.js +25 -52
  32. data/assets/javascripts/bootstrap-sprockets.js +10 -10
  33. data/assets/javascripts/bootstrap.js +689 -1444
  34. data/assets/javascripts/bootstrap.min.js +3 -3
  35. data/assets/stylesheets/_bootstrap-grid.scss +1 -3
  36. data/assets/stylesheets/_bootstrap-reboot.scss +1 -0
  37. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  38. data/assets/stylesheets/_bootstrap.scss +1 -0
  39. data/assets/stylesheets/bootstrap/_accordion.scss +9 -0
  40. data/assets/stylesheets/bootstrap/_alert.scss +8 -11
  41. data/assets/stylesheets/bootstrap/_button-group.scss +2 -2
  42. data/assets/stylesheets/bootstrap/_buttons.scss +3 -3
  43. data/assets/stylesheets/bootstrap/_card.scss +5 -0
  44. data/assets/stylesheets/bootstrap/_carousel.scss +20 -2
  45. data/assets/stylesheets/bootstrap/_close.scss +32 -9
  46. data/assets/stylesheets/bootstrap/_dropdown.scss +1 -0
  47. data/assets/stylesheets/bootstrap/_functions.scss +1 -1
  48. data/assets/stylesheets/bootstrap/_grid.scss +6 -0
  49. data/assets/stylesheets/bootstrap/_helpers.scss +2 -0
  50. data/assets/stylesheets/bootstrap/_list-group.scss +12 -7
  51. data/assets/stylesheets/bootstrap/_maps.scss +120 -0
  52. data/assets/stylesheets/bootstrap/_mixins.scss +1 -2
  53. data/assets/stylesheets/bootstrap/_nav.scss +42 -17
  54. data/assets/stylesheets/bootstrap/_navbar.scss +15 -4
  55. data/assets/stylesheets/bootstrap/_offcanvas.scss +4 -2
  56. data/assets/stylesheets/bootstrap/_pagination.scss +1 -1
  57. data/assets/stylesheets/bootstrap/_progress.scss +10 -1
  58. data/assets/stylesheets/bootstrap/_reboot.scss +8 -7
  59. data/assets/stylesheets/bootstrap/_root.scss +124 -10
  60. data/assets/stylesheets/bootstrap/_tables.scss +18 -11
  61. data/assets/stylesheets/bootstrap/_tooltip.scss +4 -5
  62. data/assets/stylesheets/bootstrap/_utilities.scss +175 -16
  63. data/assets/stylesheets/bootstrap/_variables-dark.scss +87 -0
  64. data/assets/stylesheets/bootstrap/_variables.scss +282 -169
  65. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +23 -3
  66. data/assets/stylesheets/bootstrap/forms/_form-check.scss +26 -12
  67. data/assets/stylesheets/bootstrap/forms/_form-control.scss +24 -4
  68. data/assets/stylesheets/bootstrap/forms/_form-range.scss +3 -3
  69. data/assets/stylesheets/bootstrap/forms/_form-select.scss +12 -3
  70. data/assets/stylesheets/bootstrap/forms/_input-group.scss +1 -1
  71. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +1 -4
  72. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +20 -2
  73. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  74. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  75. data/assets/stylesheets/bootstrap/helpers/_vr.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_alert.scss +4 -1
  77. data/assets/stylesheets/bootstrap/mixins/_banner.scss +2 -4
  78. data/assets/stylesheets/bootstrap/mixins/_caret.scss +30 -25
  79. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  80. data/assets/stylesheets/bootstrap/mixins/_forms.scss +8 -7
  81. data/assets/stylesheets/bootstrap/mixins/_grid.scss +1 -1
  82. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -0
  83. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +1 -1
  84. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +5 -1
  85. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +23 -29
  86. data/bootstrap.gemspec +4 -3
  87. data/lib/bootstrap/engine.rb +7 -1
  88. data/lib/bootstrap/version.rb +2 -2
  89. data/tasks/updater/js.rb +1 -1
  90. data/tasks/updater/scss.rb +2 -2
  91. data/test/gemfiles/rails_4_2.gemfile +1 -1
  92. data/test/gemfiles/rails_5_0.gemfile +1 -1
  93. data/test/gemfiles/rails_5_1.gemfile +1 -1
  94. data/test/gemfiles/rails_5_2.gemfile +1 -1
  95. data/test/gemfiles/rails_6_0.gemfile +1 -0
  96. data/test/gemfiles/rails_6_1.gemfile +1 -0
  97. data/test/gemfiles/rails_7_0_dartsass.gemfile +8 -0
  98. data/test/gemfiles/{rails_7_0.gemfile → rails_7_0_sassc.gemfile} +1 -0
  99. metadata +35 -15
  100. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +0 -18
@@ -188,7 +188,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
188
188
  );
189
189
 
190
190
  @each $name, $value in $rgb {
191
- $value: if(divide($value, 255) < .03928, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1));
191
+ $value: if(divide($value, 255) < .04045, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1));
192
192
  $rgb: map-merge($rgb, ($name: $value));
193
193
  }
194
194
 
@@ -2,6 +2,12 @@
2
2
  //
3
3
  // Rows contain your columns.
4
4
 
5
+ :root {
6
+ @each $name, $value in $grid-breakpoints {
7
+ --#{$prefix}breakpoint-#{$name}: #{$value};
8
+ }
9
+ }
10
+
5
11
  @if $enable-grid-classes {
6
12
  .row {
7
13
  @include make-row();
@@ -1,6 +1,8 @@
1
1
  @import "helpers/clearfix";
2
2
  @import "helpers/color-bg";
3
3
  @import "helpers/colored-links";
4
+ @import "helpers/focus-ring";
5
+ @import "helpers/icon-link";
4
6
  @import "helpers/ratio";
5
7
  @import "helpers/position";
6
8
  @import "helpers/stacks";
@@ -180,13 +180,18 @@
180
180
  // Add modifier classes to change text and background color on individual items.
181
181
  // Organizationally, this must come after the `:hover` states.
182
182
 
183
- @each $state, $value in $theme-colors {
184
- $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);
185
- $list-group-variant-color: shift-color($value, $list-group-item-color-scale);
186
- @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {
187
- $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));
183
+ @each $state in map-keys($theme-colors) {
184
+ .list-group-item-#{$state} {
185
+ --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text-emphasis);
186
+ --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);
187
+ --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);
188
+ --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);
189
+ --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);
190
+ --#{$prefix}list-group-action-active-color: var(--#{$prefix}emphasis-color);
191
+ --#{$prefix}list-group-action-active-bg: var(--#{$prefix}#{$state}-border-subtle);
192
+ --#{$prefix}list-group-active-color: var(--#{$prefix}#{$state}-bg-subtle);
193
+ --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text-emphasis);
194
+ --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text-emphasis);
188
195
  }
189
-
190
- @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);
191
196
  }
192
197
  // scss-docs-end list-group-modifiers
@@ -6,6 +6,90 @@
6
6
  $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
7
7
  // scss-docs-end theme-colors-rgb
8
8
 
9
+ // scss-docs-start theme-text-map
10
+ $theme-colors-text: (
11
+ "primary": $primary-text-emphasis,
12
+ "secondary": $secondary-text-emphasis,
13
+ "success": $success-text-emphasis,
14
+ "info": $info-text-emphasis,
15
+ "warning": $warning-text-emphasis,
16
+ "danger": $danger-text-emphasis,
17
+ "light": $light-text-emphasis,
18
+ "dark": $dark-text-emphasis,
19
+ ) !default;
20
+ // scss-docs-end theme-text-map
21
+
22
+ // scss-docs-start theme-bg-subtle-map
23
+ $theme-colors-bg-subtle: (
24
+ "primary": $primary-bg-subtle,
25
+ "secondary": $secondary-bg-subtle,
26
+ "success": $success-bg-subtle,
27
+ "info": $info-bg-subtle,
28
+ "warning": $warning-bg-subtle,
29
+ "danger": $danger-bg-subtle,
30
+ "light": $light-bg-subtle,
31
+ "dark": $dark-bg-subtle,
32
+ ) !default;
33
+ // scss-docs-end theme-bg-subtle-map
34
+
35
+ // scss-docs-start theme-border-subtle-map
36
+ $theme-colors-border-subtle: (
37
+ "primary": $primary-border-subtle,
38
+ "secondary": $secondary-border-subtle,
39
+ "success": $success-border-subtle,
40
+ "info": $info-border-subtle,
41
+ "warning": $warning-border-subtle,
42
+ "danger": $danger-border-subtle,
43
+ "light": $light-border-subtle,
44
+ "dark": $dark-border-subtle,
45
+ ) !default;
46
+ // scss-docs-end theme-border-subtle-map
47
+
48
+ $theme-colors-text-dark: null !default;
49
+ $theme-colors-bg-subtle-dark: null !default;
50
+ $theme-colors-border-subtle-dark: null !default;
51
+
52
+ @if $enable-dark-mode {
53
+ // scss-docs-start theme-text-dark-map
54
+ $theme-colors-text-dark: (
55
+ "primary": $primary-text-emphasis-dark,
56
+ "secondary": $secondary-text-emphasis-dark,
57
+ "success": $success-text-emphasis-dark,
58
+ "info": $info-text-emphasis-dark,
59
+ "warning": $warning-text-emphasis-dark,
60
+ "danger": $danger-text-emphasis-dark,
61
+ "light": $light-text-emphasis-dark,
62
+ "dark": $dark-text-emphasis-dark,
63
+ ) !default;
64
+ // scss-docs-end theme-text-dark-map
65
+
66
+ // scss-docs-start theme-bg-subtle-dark-map
67
+ $theme-colors-bg-subtle-dark: (
68
+ "primary": $primary-bg-subtle-dark,
69
+ "secondary": $secondary-bg-subtle-dark,
70
+ "success": $success-bg-subtle-dark,
71
+ "info": $info-bg-subtle-dark,
72
+ "warning": $warning-bg-subtle-dark,
73
+ "danger": $danger-bg-subtle-dark,
74
+ "light": $light-bg-subtle-dark,
75
+ "dark": $dark-bg-subtle-dark,
76
+ ) !default;
77
+ // scss-docs-end theme-bg-subtle-dark-map
78
+
79
+ // scss-docs-start theme-border-subtle-dark-map
80
+ $theme-colors-border-subtle-dark: (
81
+ "primary": $primary-border-subtle-dark,
82
+ "secondary": $secondary-border-subtle-dark,
83
+ "success": $success-border-subtle-dark,
84
+ "info": $info-border-subtle-dark,
85
+ "warning": $warning-border-subtle-dark,
86
+ "danger": $danger-border-subtle-dark,
87
+ "light": $light-border-subtle-dark,
88
+ "dark": $dark-border-subtle-dark,
89
+ ) !default;
90
+ // scss-docs-end theme-border-subtle-dark-map
91
+ }
92
+
9
93
  // Utilities maps
10
94
  //
11
95
  // Extends the default `$theme-colors` maps to help create our utilities.
@@ -25,6 +109,17 @@ $utilities-text: map-merge(
25
109
  )
26
110
  ) !default;
27
111
  $utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
112
+
113
+ $utilities-text-emphasis-colors: (
114
+ "primary-emphasis": var(--#{$prefix}primary-text-emphasis),
115
+ "secondary-emphasis": var(--#{$prefix}secondary-text-emphasis),
116
+ "success-emphasis": var(--#{$prefix}success-text-emphasis),
117
+ "info-emphasis": var(--#{$prefix}info-text-emphasis),
118
+ "warning-emphasis": var(--#{$prefix}warning-text-emphasis),
119
+ "danger-emphasis": var(--#{$prefix}danger-text-emphasis),
120
+ "light-emphasis": var(--#{$prefix}light-text-emphasis),
121
+ "dark-emphasis": var(--#{$prefix}dark-text-emphasis)
122
+ ) !default;
28
123
  // scss-docs-end utilities-text-colors
29
124
 
30
125
  // scss-docs-start utilities-bg-colors
@@ -37,18 +132,43 @@ $utilities-bg: map-merge(
37
132
  )
38
133
  ) !default;
39
134
  $utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
135
+
136
+ $utilities-bg-subtle: (
137
+ "primary-subtle": var(--#{$prefix}primary-bg-subtle),
138
+ "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
139
+ "success-subtle": var(--#{$prefix}success-bg-subtle),
140
+ "info-subtle": var(--#{$prefix}info-bg-subtle),
141
+ "warning-subtle": var(--#{$prefix}warning-bg-subtle),
142
+ "danger-subtle": var(--#{$prefix}danger-bg-subtle),
143
+ "light-subtle": var(--#{$prefix}light-bg-subtle),
144
+ "dark-subtle": var(--#{$prefix}dark-bg-subtle)
145
+ ) !default;
40
146
  // scss-docs-end utilities-bg-colors
41
147
 
42
148
  // scss-docs-start utilities-border-colors
43
149
  $utilities-border: map-merge(
44
150
  $utilities-colors,
45
151
  (
152
+ "black": to-rgb($black),
46
153
  "white": to-rgb($white)
47
154
  )
48
155
  ) !default;
49
156
  $utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
157
+
158
+ $utilities-border-subtle: (
159
+ "primary-subtle": var(--#{$prefix}primary-border-subtle),
160
+ "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
161
+ "success-subtle": var(--#{$prefix}success-border-subtle),
162
+ "info-subtle": var(--#{$prefix}info-border-subtle),
163
+ "warning-subtle": var(--#{$prefix}warning-border-subtle),
164
+ "danger-subtle": var(--#{$prefix}danger-border-subtle),
165
+ "light-subtle": var(--#{$prefix}light-border-subtle),
166
+ "dark-subtle": var(--#{$prefix}dark-border-subtle)
167
+ ) !default;
50
168
  // scss-docs-end utilities-border-colors
51
169
 
170
+ $utilities-links-underline: map-loop($utilities-colors, rgba-css-var, "$key", "link-underline") !default;
171
+
52
172
  $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
53
173
 
54
174
  $gutters: $spacers !default;
@@ -10,6 +10,7 @@
10
10
 
11
11
  // Helpers
12
12
  @import "mixins/breakpoints";
13
+ @import "mixins/color-mode";
13
14
  @import "mixins/color-scheme";
14
15
  @import "mixins/image";
15
16
  @import "mixins/resize";
@@ -21,13 +22,11 @@
21
22
  @import "mixins/utilities";
22
23
 
23
24
  // Components
24
- @import "mixins/alert";
25
25
  @import "mixins/backdrop";
26
26
  @import "mixins/buttons";
27
27
  @import "mixins/caret";
28
28
  @import "mixins/pagination";
29
29
  @import "mixins/lists";
30
- @import "mixins/list-group";
31
30
  @import "mixins/forms";
32
31
  @import "mixins/table-variants";
33
32
 
@@ -28,6 +28,8 @@
28
28
  font-weight: var(--#{$prefix}nav-link-font-weight);
29
29
  color: var(--#{$prefix}nav-link-color);
30
30
  text-decoration: if($link-decoration == none, null, none);
31
+ background: none;
32
+ border: 0;
31
33
  @include transition($nav-link-transition);
32
34
 
33
35
  &:hover,
@@ -36,8 +38,14 @@
36
38
  text-decoration: if($link-hover-decoration == underline, none, null);
37
39
  }
38
40
 
41
+ &:focus-visible {
42
+ outline: 0;
43
+ box-shadow: $nav-link-focus-box-shadow;
44
+ }
45
+
39
46
  // Disabled state lightens text
40
- &.disabled {
47
+ &.disabled,
48
+ &:disabled {
41
49
  color: var(--#{$prefix}nav-link-disabled-color);
42
50
  pointer-events: none;
43
51
  cursor: default;
@@ -63,7 +71,6 @@
63
71
 
64
72
  .nav-link {
65
73
  margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list
66
- background: none;
67
74
  border: var(--#{$prefix}nav-tabs-border-width) solid transparent;
68
75
  @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));
69
76
 
@@ -73,13 +80,6 @@
73
80
  isolation: isolate;
74
81
  border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);
75
82
  }
76
-
77
- &.disabled,
78
- &:disabled {
79
- color: var(--#{$prefix}nav-link-disabled-color);
80
- background-color: transparent;
81
- border-color: transparent;
82
- }
83
83
  }
84
84
 
85
85
  .nav-link.active,
@@ -110,15 +110,7 @@
110
110
  // scss-docs-end nav-pills-css-vars
111
111
 
112
112
  .nav-link {
113
- background: none;
114
- border: 0;
115
113
  @include border-radius(var(--#{$prefix}nav-pills-border-radius));
116
-
117
- &:disabled {
118
- color: var(--#{$prefix}nav-link-disabled-color);
119
- background-color: transparent;
120
- border-color: transparent;
121
- }
122
114
  }
123
115
 
124
116
  .nav-link.active,
@@ -129,6 +121,39 @@
129
121
  }
130
122
 
131
123
 
124
+ //
125
+ // Underline
126
+ //
127
+
128
+ .nav-underline {
129
+ // scss-docs-start nav-underline-css-vars
130
+ --#{$prefix}nav-underline-gap: #{$nav-underline-gap};
131
+ --#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};
132
+ --#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};
133
+ // scss-docs-end nav-underline-css-vars
134
+
135
+ gap: var(--#{$prefix}nav-underline-gap);
136
+
137
+ .nav-link {
138
+ padding-right: 0;
139
+ padding-left: 0;
140
+ border-bottom: var(--#{$prefix}nav-underline-border-width) solid transparent;
141
+
142
+ &:hover,
143
+ &:focus {
144
+ border-bottom-color: currentcolor;
145
+ }
146
+ }
147
+
148
+ .nav-link.active,
149
+ .show > .nav-link {
150
+ font-weight: $font-weight-bold;
151
+ color: var(--#{$prefix}nav-underline-link-active-color);
152
+ border-bottom-color: currentcolor;
153
+ }
154
+ }
155
+
156
+
132
157
  //
133
158
  // Justified variants
134
159
  //
@@ -100,9 +100,11 @@
100
100
  margin-bottom: 0;
101
101
  list-style: none;
102
102
 
103
- .show > .nav-link,
104
- .nav-link.active {
105
- color: var(--#{$prefix}navbar-active-color);
103
+ .nav-link {
104
+ &.active,
105
+ &.show {
106
+ color: var(--#{$prefix}navbar-active-color);
107
+ }
106
108
  }
107
109
 
108
110
  .dropdown-menu {
@@ -264,7 +266,8 @@
264
266
  @include deprecate("`.navbar-light`", "v5.2.0", "v6.0.0", true);
265
267
  }
266
268
 
267
- .navbar-dark {
269
+ .navbar-dark,
270
+ .navbar[data-bs-theme="dark"] {
268
271
  // scss-docs-start navbar-dark-css-vars
269
272
  --#{$prefix}navbar-color: #{$navbar-dark-color};
270
273
  --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};
@@ -276,3 +279,11 @@
276
279
  --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};
277
280
  // scss-docs-end navbar-dark-css-vars
278
281
  }
282
+
283
+ @if $enable-dark-mode {
284
+ @include color-mode(dark) {
285
+ .navbar-toggler-icon {
286
+ --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};
287
+ }
288
+ }
289
+ }
@@ -12,6 +12,8 @@
12
12
  --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
13
13
  --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
14
14
  --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
15
+ --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};
16
+ --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};
15
17
  // scss-docs-end offcanvas-css-vars
16
18
  }
17
19
 
@@ -42,7 +44,7 @@
42
44
  background-clip: padding-box;
43
45
  outline: 0;
44
46
  @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));
45
- @include transition(transform $offcanvas-transition-duration ease-in-out);
47
+ @include transition(var(--#{$prefix}offcanvas-transition));
46
48
 
47
49
  &.offcanvas-start {
48
50
  top: 0;
@@ -134,7 +136,7 @@
134
136
 
135
137
  .offcanvas-title {
136
138
  margin-bottom: 0;
137
- line-height: $offcanvas-title-line-height;
139
+ line-height: var(--#{$prefix}offcanvas-title-line-height);
138
140
  }
139
141
 
140
142
  .offcanvas-body {
@@ -75,7 +75,7 @@
75
75
  margin-left: $pagination-margin-start;
76
76
  }
77
77
 
78
- @if $pagination-margin-start == ($pagination-border-width * -1) {
78
+ @if $pagination-margin-start == calc(#{$pagination-border-width} * -1) {
79
79
  &:first-child {
80
80
  .page-link {
81
81
  @include border-start-radius(var(--#{$prefix}pagination-border-radius));
@@ -8,7 +8,8 @@
8
8
  }
9
9
  // scss-docs-end progress-keyframes
10
10
 
11
- .progress {
11
+ .progress,
12
+ .progress-stacked {
12
13
  // scss-docs-start progress-css-vars
13
14
  --#{$prefix}progress-height: #{$progress-height};
14
15
  @include rfs($progress-font-size, --#{$prefix}progress-font-size);
@@ -46,6 +47,14 @@
46
47
  background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);
47
48
  }
48
49
 
50
+ .progress-stacked > .progress {
51
+ overflow: visible;
52
+ }
53
+
54
+ .progress-stacked > .progress > .progress-bar {
55
+ width: 100%;
56
+ }
57
+
49
58
  @if $enable-transitions {
50
59
  .progress-bar-animated {
51
60
  animation: $progress-bar-animation-timing progress-bar-stripes;
@@ -87,7 +87,7 @@ hr {
87
87
  font-style: $headings-font-style;
88
88
  font-weight: $headings-font-weight;
89
89
  line-height: $headings-line-height;
90
- color: $headings-color;
90
+ color: var(--#{$prefix}heading-color);
91
91
  }
92
92
 
93
93
  h1 {
@@ -217,6 +217,7 @@ small {
217
217
 
218
218
  mark {
219
219
  padding: $mark-padding;
220
+ color: var(--#{$prefix}highlight-color);
220
221
  background-color: var(--#{$prefix}highlight-bg);
221
222
  }
222
223
 
@@ -241,11 +242,11 @@ sup { top: -.5em; }
241
242
  // Links
242
243
 
243
244
  a {
244
- color: var(--#{$prefix}link-color);
245
+ color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));
245
246
  text-decoration: $link-decoration;
246
247
 
247
248
  &:hover {
248
- color: var(--#{$prefix}link-hover-color);
249
+ --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);
249
250
  text-decoration: $link-hover-decoration;
250
251
  }
251
252
  }
@@ -524,15 +525,15 @@ legend {
524
525
  height: auto;
525
526
  }
526
527
 
527
- // 1. Correct the outline style in Safari.
528
- // 2. This overrides the extra rounded corners on search inputs in iOS so that our
528
+ // 1. This overrides the extra rounded corners on search inputs in iOS so that our
529
529
  // `.form-control` class can properly style them. Note that this cannot simply
530
530
  // be added to `.form-control` as it's not specific enough. For details, see
531
531
  // https://github.com/twbs/bootstrap/issues/11586.
532
+ // 2. Correct the outline style in Safari.
532
533
 
533
534
  [type="search"] {
534
- outline-offset: -2px; // 1
535
- -webkit-appearance: textfield; // 2
535
+ -webkit-appearance: textfield; // 1
536
+ outline-offset: -2px; // 2
536
537
  }
537
538
 
538
539
  // 1. A few input types should stay LTR
@@ -1,4 +1,5 @@
1
- :root {
1
+ :root,
2
+ [data-bs-theme="light"] {
2
3
  // Note: Custom variable values only support SassScript inside `#{}`.
3
4
 
4
5
  // Colors
@@ -21,10 +22,20 @@
21
22
  --#{$prefix}#{$color}-rgb: #{$value};
22
23
  }
23
24
 
25
+ @each $color, $value in $theme-colors-text {
26
+ --#{$prefix}#{$color}-text-emphasis: #{$value};
27
+ }
28
+
29
+ @each $color, $value in $theme-colors-bg-subtle {
30
+ --#{$prefix}#{$color}-bg-subtle: #{$value};
31
+ }
32
+
33
+ @each $color, $value in $theme-colors-border-subtle {
34
+ --#{$prefix}#{$color}-border-subtle: #{$value};
35
+ }
36
+
24
37
  --#{$prefix}white-rgb: #{to-rgb($white)};
25
38
  --#{$prefix}black-rgb: #{to-rgb($black)};
26
- --#{$prefix}body-color-rgb: #{to-rgb($body-color)};
27
- --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
28
39
 
29
40
  // Fonts
30
41
 
@@ -39,17 +50,50 @@
39
50
  @if $font-size-root != null {
40
51
  --#{$prefix}root-font-size: #{$font-size-root};
41
52
  }
42
- --#{$prefix}body-font-family: #{$font-family-base};
53
+ --#{$prefix}body-font-family: #{inspect($font-family-base)};
43
54
  @include rfs($font-size-base, --#{$prefix}body-font-size);
44
55
  --#{$prefix}body-font-weight: #{$font-weight-base};
45
56
  --#{$prefix}body-line-height: #{$line-height-base};
46
- --#{$prefix}body-color: #{$body-color};
47
57
  @if $body-text-align != null {
48
58
  --#{$prefix}body-text-align: #{$body-text-align};
49
59
  }
60
+
61
+ --#{$prefix}body-color: #{$body-color};
62
+ --#{$prefix}body-color-rgb: #{to-rgb($body-color)};
50
63
  --#{$prefix}body-bg: #{$body-bg};
64
+ --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
65
+
66
+ --#{$prefix}emphasis-color: #{$body-emphasis-color};
67
+ --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
68
+
69
+ --#{$prefix}secondary-color: #{$body-secondary-color};
70
+ --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
71
+ --#{$prefix}secondary-bg: #{$body-secondary-bg};
72
+ --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
73
+
74
+ --#{$prefix}tertiary-color: #{$body-tertiary-color};
75
+ --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
76
+ --#{$prefix}tertiary-bg: #{$body-tertiary-bg};
77
+ --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};
51
78
  // scss-docs-end root-body-variables
52
79
 
80
+ --#{$prefix}heading-color: #{$headings-color};
81
+
82
+ --#{$prefix}link-color: #{$link-color};
83
+ --#{$prefix}link-color-rgb: #{to-rgb($link-color)};
84
+ --#{$prefix}link-decoration: #{$link-decoration};
85
+
86
+ --#{$prefix}link-hover-color: #{$link-hover-color};
87
+ --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};
88
+
89
+ @if $link-hover-decoration != null {
90
+ --#{$prefix}link-hover-decoration: #{$link-hover-decoration};
91
+ }
92
+
93
+ --#{$prefix}code-color: #{$code-color};
94
+ --#{$prefix}highlight-color: #{$mark-color};
95
+ --#{$prefix}highlight-bg: #{$mark-bg};
96
+
53
97
  // scss-docs-start root-border-var
54
98
  --#{$prefix}border-width: #{$border-width};
55
99
  --#{$prefix}border-style: #{$border-style};
@@ -60,14 +104,84 @@
60
104
  --#{$prefix}border-radius-sm: #{$border-radius-sm};
61
105
  --#{$prefix}border-radius-lg: #{$border-radius-lg};
62
106
  --#{$prefix}border-radius-xl: #{$border-radius-xl};
63
- --#{$prefix}border-radius-2xl: #{$border-radius-2xl};
107
+ --#{$prefix}border-radius-xxl: #{$border-radius-xxl};
108
+ --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency
64
109
  --#{$prefix}border-radius-pill: #{$border-radius-pill};
65
110
  // scss-docs-end root-border-var
66
111
 
67
- --#{$prefix}link-color: #{$link-color};
68
- --#{$prefix}link-hover-color: #{$link-hover-color};
112
+ --#{$prefix}box-shadow: #{$box-shadow};
113
+ --#{$prefix}box-shadow-sm: #{$box-shadow-sm};
114
+ --#{$prefix}box-shadow-lg: #{$box-shadow-lg};
115
+ --#{$prefix}box-shadow-inset: #{$box-shadow-inset};
69
116
 
70
- --#{$prefix}code-color: #{$code-color};
117
+ // Focus styles
118
+ // scss-docs-start root-focus-variables
119
+ --#{$prefix}focus-ring-width: #{$focus-ring-width};
120
+ --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};
121
+ --#{$prefix}focus-ring-color: #{$focus-ring-color};
122
+ // scss-docs-end root-focus-variables
71
123
 
72
- --#{$prefix}highlight-bg: #{$mark-bg};
124
+ // scss-docs-start root-form-validation-variables
125
+ --#{$prefix}form-valid-color: #{$form-valid-color};
126
+ --#{$prefix}form-valid-border-color: #{$form-valid-border-color};
127
+ --#{$prefix}form-invalid-color: #{$form-invalid-color};
128
+ --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};
129
+ // scss-docs-end root-form-validation-variables
130
+ }
131
+
132
+ @if $enable-dark-mode {
133
+ @include color-mode(dark, true) {
134
+ color-scheme: dark;
135
+
136
+ // scss-docs-start root-dark-mode-vars
137
+ --#{$prefix}body-color: #{$body-color-dark};
138
+ --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
139
+ --#{$prefix}body-bg: #{$body-bg-dark};
140
+ --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};
141
+
142
+ --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
143
+ --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
144
+
145
+ --#{$prefix}secondary-color: #{$body-secondary-color-dark};
146
+ --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};
147
+ --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};
148
+ --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};
149
+
150
+ --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};
151
+ --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};
152
+ --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};
153
+ --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};
154
+
155
+ @each $color, $value in $theme-colors-text-dark {
156
+ --#{$prefix}#{$color}-text-emphasis: #{$value};
157
+ }
158
+
159
+ @each $color, $value in $theme-colors-bg-subtle-dark {
160
+ --#{$prefix}#{$color}-bg-subtle: #{$value};
161
+ }
162
+
163
+ @each $color, $value in $theme-colors-border-subtle-dark {
164
+ --#{$prefix}#{$color}-border-subtle: #{$value};
165
+ }
166
+
167
+ --#{$prefix}heading-color: #{$headings-color-dark};
168
+
169
+ --#{$prefix}link-color: #{$link-color-dark};
170
+ --#{$prefix}link-hover-color: #{$link-hover-color-dark};
171
+ --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};
172
+ --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
173
+
174
+ --#{$prefix}code-color: #{$code-color-dark};
175
+ --#{$prefix}highlight-color: #{$mark-color-dark};
176
+ --#{$prefix}highlight-bg: #{$mark-bg-dark};
177
+
178
+ --#{$prefix}border-color: #{$border-color-dark};
179
+ --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
180
+
181
+ --#{$prefix}form-valid-color: #{$form-valid-color-dark};
182
+ --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};
183
+ --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};
184
+ --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};
185
+ // scss-docs-end root-dark-mode-vars
186
+ }
73
187
  }