bootstrap 4.3.1 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +28 -5
  5. data/assets/javascripts/bootstrap/alert.js +54 -163
  6. data/assets/javascripts/bootstrap/base-component.js +83 -0
  7. data/assets/javascripts/bootstrap/button.js +44 -152
  8. data/assets/javascripts/bootstrap/carousel.js +289 -569
  9. data/assets/javascripts/bootstrap/collapse.js +170 -349
  10. data/assets/javascripts/bootstrap/dom/data.js +62 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +303 -496
  15. data/assets/javascripts/bootstrap/modal.js +229 -559
  16. data/assets/javascripts/bootstrap/offcanvas.js +245 -0
  17. data/assets/javascripts/bootstrap/popover.js +61 -226
  18. data/assets/javascripts/bootstrap/scrollspy.js +217 -317
  19. data/assets/javascripts/bootstrap/tab.js +220 -212
  20. data/assets/javascripts/bootstrap/toast.js +145 -229
  21. data/assets/javascripts/bootstrap/tooltip.js +421 -782
  22. data/assets/javascripts/bootstrap/util/backdrop.js +139 -0
  23. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  24. data/assets/javascripts/bootstrap/util/config.js +67 -0
  25. data/assets/javascripts/bootstrap/util/focustrap.js +113 -0
  26. data/assets/javascripts/bootstrap/util/index.js +281 -0
  27. data/assets/javascripts/bootstrap/util/sanitizer.js +110 -0
  28. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  29. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  30. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  31. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  32. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  33. data/assets/javascripts/bootstrap-sprockets.js +23 -7
  34. data/assets/javascripts/bootstrap.js +3690 -3639
  35. data/assets/javascripts/bootstrap.min.js +4 -4
  36. data/assets/stylesheets/_bootstrap-grid.scss +53 -20
  37. data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
  38. data/assets/stylesheets/_bootstrap.scss +21 -13
  39. data/assets/stylesheets/bootstrap/_accordion.scss +158 -0
  40. data/assets/stylesheets/bootstrap/_alert.scss +32 -15
  41. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  42. data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -24
  43. data/assets/stylesheets/bootstrap/_button-group.scss +27 -48
  44. data/assets/stylesheets/bootstrap/_buttons.scss +139 -69
  45. data/assets/stylesheets/bootstrap/_card.scss +91 -141
  46. data/assets/stylesheets/bootstrap/_carousel.scss +86 -39
  47. data/assets/stylesheets/bootstrap/_close.scss +51 -29
  48. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  49. data/assets/stylesheets/bootstrap/_dropdown.scss +131 -72
  50. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  51. data/assets/stylesheets/bootstrap/_functions.scss +244 -28
  52. data/assets/stylesheets/bootstrap/_grid.scss +18 -31
  53. data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
  54. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  55. data/assets/stylesheets/bootstrap/_list-group.scss +101 -53
  56. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  57. data/assets/stylesheets/bootstrap/_mixins.scss +13 -18
  58. data/assets/stylesheets/bootstrap/_modal.scss +120 -112
  59. data/assets/stylesheets/bootstrap/_nav.scss +113 -24
  60. data/assets/stylesheets/bootstrap/_navbar.scss +145 -150
  61. data/assets/stylesheets/bootstrap/_offcanvas.scss +146 -0
  62. data/assets/stylesheets/bootstrap/_pagination.scss +74 -38
  63. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  64. data/assets/stylesheets/bootstrap/_popover.scss +99 -74
  65. data/assets/stylesheets/bootstrap/_progress.scss +40 -15
  66. data/assets/stylesheets/bootstrap/_reboot.scss +342 -215
  67. data/assets/stylesheets/bootstrap/_root.scss +174 -9
  68. data/assets/stylesheets/bootstrap/_spinners.scss +52 -22
  69. data/assets/stylesheets/bootstrap/_tables.scss +101 -115
  70. data/assets/stylesheets/bootstrap/_toasts.scss +54 -25
  71. data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
  72. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  73. data/assets/stylesheets/bootstrap/_type.scss +42 -61
  74. data/assets/stylesheets/bootstrap/_utilities.scss +806 -17
  75. data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
  76. data/assets/stylesheets/bootstrap/_variables.scss +1235 -615
  77. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +19 -0
  78. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +94 -0
  79. data/assets/stylesheets/bootstrap/forms/_form-check.scss +188 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  82. data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
  83. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  84. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  85. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  86. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  87. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +8 -0
  88. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
  89. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  90. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  91. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  92. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  93. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  94. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  95. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  96. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  97. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  98. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
  99. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  100. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  101. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  102. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  103. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  104. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -97
  105. data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
  106. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  107. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  108. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  109. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  110. data/assets/stylesheets/bootstrap/mixins/_forms.scss +77 -116
  111. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  112. data/assets/stylesheets/bootstrap/mixins/_grid.scss +133 -33
  113. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  114. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
  115. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  116. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  117. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  118. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  119. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  120. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
  121. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  122. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +276 -132
  123. data/bootstrap.gemspec +4 -6
  124. data/lib/bootstrap/version.rb +2 -2
  125. data/tasks/updater/js.rb +31 -7
  126. data/tasks/updater/network.rb +10 -4
  127. data/tasks/updater/scss.rb +1 -1
  128. data/tasks/updater.rb +2 -2
  129. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  130. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  131. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  132. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  133. data/test/dummy_rails/app/views/pages/root.html +89 -0
  134. data/test/dummy_rails/config/application.rb +0 -3
  135. data/test/gemfiles/rails_5_2.gemfile +8 -0
  136. data/test/gemfiles/rails_6_0.gemfile +7 -0
  137. data/test/gemfiles/rails_6_1.gemfile +7 -0
  138. data/test/gemfiles/rails_7_0.gemfile +7 -0
  139. data/test/support/dummy_rails_integration.rb +3 -1
  140. data/test/test_helper.rb +18 -12
  141. metadata +86 -84
  142. data/.travis.yml +0 -17
  143. data/assets/javascripts/bootstrap/util.js +0 -171
  144. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  145. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  146. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  147. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  148. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  149. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  150. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  151. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  152. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  153. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  154. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  155. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  156. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  157. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  158. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  159. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  160. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  161. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  162. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  163. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  164. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  165. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  166. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  167. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  168. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  169. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  170. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  171. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  172. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  173. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  174. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  175. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  176. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  177. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  178. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  179. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,19 +1,184 @@
1
- :root {
2
- // Custom variable values only support SassScript inside `#{}`.
1
+ :root,
2
+ [data-bs-theme="light"] {
3
+ // Note: Custom variable values only support SassScript inside `#{}`.
4
+
5
+ // Colors
6
+ //
7
+ // Generate palettes for full colors, grays, and theme colors.
8
+
3
9
  @each $color, $value in $colors {
4
- --#{$color}: #{$value};
10
+ --#{$prefix}#{$color}: #{$value};
11
+ }
12
+
13
+ @each $color, $value in $grays {
14
+ --#{$prefix}gray-#{$color}: #{$value};
5
15
  }
6
16
 
7
17
  @each $color, $value in $theme-colors {
8
- --#{$color}: #{$value};
18
+ --#{$prefix}#{$color}: #{$value};
19
+ }
20
+
21
+ @each $color, $value in $theme-colors-rgb {
22
+ --#{$prefix}#{$color}-rgb: #{$value};
9
23
  }
10
24
 
11
- @each $bp, $value in $grid-breakpoints {
12
- --breakpoint-#{$bp}: #{$value};
25
+ @each $color, $value in $theme-colors-text {
26
+ --#{$prefix}#{$color}-text-emphasis: #{$value};
13
27
  }
14
28
 
15
- // Use `inspect` for lists so that quoted items keep the quotes.
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
+
37
+ --#{$prefix}white-rgb: #{to-rgb($white)};
38
+ --#{$prefix}black-rgb: #{to-rgb($black)};
39
+
40
+ // Fonts
41
+
42
+ // Note: Use `inspect` for lists so that quoted items keep the quotes.
16
43
  // See https://github.com/sass/sass/issues/2383#issuecomment-336349172
17
- --font-family-sans-serif: #{inspect($font-family-sans-serif)};
18
- --font-family-monospace: #{inspect($font-family-monospace)};
44
+ --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};
45
+ --#{$prefix}font-monospace: #{inspect($font-family-monospace)};
46
+ --#{$prefix}gradient: #{$gradient};
47
+
48
+ // Root and body
49
+ // scss-docs-start root-body-variables
50
+ @if $font-size-root != null {
51
+ --#{$prefix}root-font-size: #{$font-size-root};
52
+ }
53
+ --#{$prefix}body-font-family: #{inspect($font-family-base)};
54
+ @include rfs($font-size-base, --#{$prefix}body-font-size);
55
+ --#{$prefix}body-font-weight: #{$font-weight-base};
56
+ --#{$prefix}body-line-height: #{$line-height-base};
57
+ @if $body-text-align != null {
58
+ --#{$prefix}body-text-align: #{$body-text-align};
59
+ }
60
+
61
+ --#{$prefix}body-color: #{$body-color};
62
+ --#{$prefix}body-color-rgb: #{to-rgb($body-color)};
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)};
78
+ // scss-docs-end root-body-variables
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-bg: #{$mark-bg};
95
+
96
+ // scss-docs-start root-border-var
97
+ --#{$prefix}border-width: #{$border-width};
98
+ --#{$prefix}border-style: #{$border-style};
99
+ --#{$prefix}border-color: #{$border-color};
100
+ --#{$prefix}border-color-translucent: #{$border-color-translucent};
101
+
102
+ --#{$prefix}border-radius: #{$border-radius};
103
+ --#{$prefix}border-radius-sm: #{$border-radius-sm};
104
+ --#{$prefix}border-radius-lg: #{$border-radius-lg};
105
+ --#{$prefix}border-radius-xl: #{$border-radius-xl};
106
+ --#{$prefix}border-radius-xxl: #{$border-radius-xxl};
107
+ --#{$prefix}border-radius-2xl: var(--#{$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency
108
+ --#{$prefix}border-radius-pill: #{$border-radius-pill};
109
+ // scss-docs-end root-border-var
110
+
111
+ --#{$prefix}box-shadow: #{$box-shadow};
112
+ --#{$prefix}box-shadow-sm: #{$box-shadow-sm};
113
+ --#{$prefix}box-shadow-lg: #{$box-shadow-lg};
114
+ --#{$prefix}box-shadow-inset: #{$box-shadow-inset};
115
+
116
+ // Focus styles
117
+ // scss-docs-start root-focus-variables
118
+ --#{$prefix}focus-ring-width: #{$focus-ring-width};
119
+ --#{$prefix}focus-ring-opacity: #{$focus-ring-opacity};
120
+ --#{$prefix}focus-ring-color: #{$focus-ring-color};
121
+ // scss-docs-end root-focus-variables
122
+
123
+ // scss-docs-start root-form-validation-variables
124
+ --#{$prefix}form-valid-color: #{$form-valid-color};
125
+ --#{$prefix}form-valid-border-color: #{$form-valid-border-color};
126
+ --#{$prefix}form-invalid-color: #{$form-invalid-color};
127
+ --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color};
128
+ // scss-docs-end root-form-validation-variables
129
+ }
130
+
131
+ @if $enable-dark-mode {
132
+ @include color-mode(dark, true) {
133
+ color-scheme: dark;
134
+
135
+ // scss-docs-start root-dark-mode-vars
136
+ --#{$prefix}body-color: #{$body-color-dark};
137
+ --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
138
+ --#{$prefix}body-bg: #{$body-bg-dark};
139
+ --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};
140
+
141
+ --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
142
+ --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
143
+
144
+ --#{$prefix}secondary-color: #{$body-secondary-color-dark};
145
+ --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};
146
+ --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};
147
+ --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};
148
+
149
+ --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};
150
+ --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};
151
+ --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};
152
+ --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};
153
+
154
+ @each $color, $value in $theme-colors-text-dark {
155
+ --#{$prefix}#{$color}-text-emphasis: #{$value};
156
+ }
157
+
158
+ @each $color, $value in $theme-colors-bg-subtle-dark {
159
+ --#{$prefix}#{$color}-bg-subtle: #{$value};
160
+ }
161
+
162
+ @each $color, $value in $theme-colors-border-subtle-dark {
163
+ --#{$prefix}#{$color}-border-subtle: #{$value};
164
+ }
165
+
166
+ --#{$prefix}heading-color: #{$headings-color-dark};
167
+
168
+ --#{$prefix}link-color: #{$link-color-dark};
169
+ --#{$prefix}link-hover-color: #{$link-hover-color-dark};
170
+ --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};
171
+ --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
172
+
173
+ --#{$prefix}code-color: #{$code-color-dark};
174
+
175
+ --#{$prefix}border-color: #{$border-color-dark};
176
+ --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
177
+
178
+ --#{$prefix}form-valid-color: #{$form-valid-color-dark};
179
+ --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark};
180
+ --#{$prefix}form-invalid-color: #{$form-invalid-color-dark};
181
+ --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};
182
+ // scss-docs-end root-dark-mode-vars
183
+ }
19
184
  }
@@ -2,54 +2,84 @@
2
2
  // Rotating border
3
3
  //
4
4
 
5
+ .spinner-grow,
6
+ .spinner-border {
7
+ display: inline-block;
8
+ width: var(--#{$prefix}spinner-width);
9
+ height: var(--#{$prefix}spinner-height);
10
+ vertical-align: var(--#{$prefix}spinner-vertical-align);
11
+ // stylelint-disable-next-line property-disallowed-list
12
+ border-radius: 50%;
13
+ animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);
14
+ }
15
+
16
+ // scss-docs-start spinner-border-keyframes
5
17
  @keyframes spinner-border {
6
- to { transform: rotate(360deg); }
18
+ to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
7
19
  }
20
+ // scss-docs-end spinner-border-keyframes
8
21
 
9
22
  .spinner-border {
10
- display: inline-block;
11
- width: $spinner-width;
12
- height: $spinner-height;
13
- vertical-align: text-bottom;
14
- border: $spinner-border-width solid currentColor;
23
+ // scss-docs-start spinner-border-css-vars
24
+ --#{$prefix}spinner-width: #{$spinner-width};
25
+ --#{$prefix}spinner-height: #{$spinner-height};
26
+ --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
27
+ --#{$prefix}spinner-border-width: #{$spinner-border-width};
28
+ --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
29
+ --#{$prefix}spinner-animation-name: spinner-border;
30
+ // scss-docs-end spinner-border-css-vars
31
+
32
+ border: var(--#{$prefix}spinner-border-width) solid currentcolor;
15
33
  border-right-color: transparent;
16
- // stylelint-disable-next-line property-blacklist
17
- border-radius: 50%;
18
- animation: spinner-border .75s linear infinite;
19
34
  }
20
35
 
21
36
  .spinner-border-sm {
22
- width: $spinner-width-sm;
23
- height: $spinner-height-sm;
24
- border-width: $spinner-border-width-sm;
37
+ // scss-docs-start spinner-border-sm-css-vars
38
+ --#{$prefix}spinner-width: #{$spinner-width-sm};
39
+ --#{$prefix}spinner-height: #{$spinner-height-sm};
40
+ --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};
41
+ // scss-docs-end spinner-border-sm-css-vars
25
42
  }
26
43
 
27
44
  //
28
45
  // Growing circle
29
46
  //
30
47
 
48
+ // scss-docs-start spinner-grow-keyframes
31
49
  @keyframes spinner-grow {
32
50
  0% {
33
51
  transform: scale(0);
34
52
  }
35
53
  50% {
36
54
  opacity: 1;
55
+ transform: none;
37
56
  }
38
57
  }
58
+ // scss-docs-end spinner-grow-keyframes
39
59
 
40
60
  .spinner-grow {
41
- display: inline-block;
42
- width: $spinner-width;
43
- height: $spinner-height;
44
- vertical-align: text-bottom;
45
- background-color: currentColor;
46
- // stylelint-disable-next-line property-blacklist
47
- border-radius: 50%;
61
+ // scss-docs-start spinner-grow-css-vars
62
+ --#{$prefix}spinner-width: #{$spinner-width};
63
+ --#{$prefix}spinner-height: #{$spinner-height};
64
+ --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
65
+ --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
66
+ --#{$prefix}spinner-animation-name: spinner-grow;
67
+ // scss-docs-end spinner-grow-css-vars
68
+
69
+ background-color: currentcolor;
48
70
  opacity: 0;
49
- animation: spinner-grow .75s linear infinite;
50
71
  }
51
72
 
52
73
  .spinner-grow-sm {
53
- width: $spinner-width-sm;
54
- height: $spinner-height-sm;
74
+ --#{$prefix}spinner-width: #{$spinner-width-sm};
75
+ --#{$prefix}spinner-height: #{$spinner-height-sm};
76
+ }
77
+
78
+ @if $enable-reduced-motion {
79
+ @media (prefers-reduced-motion: reduce) {
80
+ .spinner-border,
81
+ .spinner-grow {
82
+ --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};
83
+ }
84
+ }
55
85
  }
@@ -3,37 +3,72 @@
3
3
  //
4
4
 
5
5
  .table {
6
+ // Reset needed for nesting tables
7
+ --#{$prefix}table-color-type: initial;
8
+ --#{$prefix}table-bg-type: initial;
9
+ --#{$prefix}table-color-state: initial;
10
+ --#{$prefix}table-bg-state: initial;
11
+ // End of reset
12
+ --#{$prefix}table-color: #{$table-color};
13
+ --#{$prefix}table-bg: #{$table-bg};
14
+ --#{$prefix}table-border-color: #{$table-border-color};
15
+ --#{$prefix}table-accent-bg: #{$table-accent-bg};
16
+ --#{$prefix}table-striped-color: #{$table-striped-color};
17
+ --#{$prefix}table-striped-bg: #{$table-striped-bg};
18
+ --#{$prefix}table-active-color: #{$table-active-color};
19
+ --#{$prefix}table-active-bg: #{$table-active-bg};
20
+ --#{$prefix}table-hover-color: #{$table-hover-color};
21
+ --#{$prefix}table-hover-bg: #{$table-hover-bg};
22
+
6
23
  width: 100%;
7
24
  margin-bottom: $spacer;
8
- color: $table-color;
9
- background-color: $table-bg; // Reset for nesting within parents with `background-color`.
10
-
11
- th,
12
- td {
13
- padding: $table-cell-padding;
14
- vertical-align: top;
15
- border-top: $table-border-width solid $table-border-color;
25
+ vertical-align: $table-cell-vertical-align;
26
+ border-color: var(--#{$prefix}table-border-color);
27
+
28
+ // Target th & td
29
+ // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.
30
+ // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).
31
+ // Another advantage is that this generates less code and makes the selector less specific making it easier to override.
32
+ // stylelint-disable-next-line selector-max-universal
33
+ > :not(caption) > * > * {
34
+ padding: $table-cell-padding-y $table-cell-padding-x;
35
+ // Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb
36
+ color: var(--#{$prefix}table-color-state, var(--#{$prefix}table-color-type, var(--#{$prefix}table-color)));
37
+ background-color: var(--#{$prefix}table-bg);
38
+ border-bottom-width: $table-border-width;
39
+ box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-bg-state, var(--#{$prefix}table-bg-type, var(--#{$prefix}table-accent-bg)));
16
40
  }
17
41
 
18
- thead th {
19
- vertical-align: bottom;
20
- border-bottom: (2 * $table-border-width) solid $table-border-color;
42
+ > tbody {
43
+ vertical-align: inherit;
21
44
  }
22
45
 
23
- tbody + tbody {
24
- border-top: (2 * $table-border-width) solid $table-border-color;
46
+ > thead {
47
+ vertical-align: bottom;
25
48
  }
26
49
  }
27
50
 
51
+ .table-group-divider {
52
+ border-top: calc(#{$table-border-width} * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list
53
+ }
54
+
55
+ //
56
+ // Change placement of captions with a class
57
+ //
58
+
59
+ .caption-top {
60
+ caption-side: top;
61
+ }
62
+
28
63
 
29
64
  //
30
65
  // Condensed table w/ half padding
31
66
  //
32
67
 
33
68
  .table-sm {
34
- th,
35
- td {
36
- padding: $table-cell-padding-sm;
69
+ // stylelint-disable-next-line selector-max-universal
70
+ > :not(caption) > * > * {
71
+ padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;
37
72
  }
38
73
  }
39
74
 
@@ -41,29 +76,31 @@
41
76
  // Border versions
42
77
  //
43
78
  // Add or remove borders all around the table and between all the columns.
79
+ //
80
+ // When borders are added on all sides of the cells, the corners can render odd when
81
+ // these borders do not have the same color or if they are semi-transparent.
82
+ // Therefor we add top and border bottoms to the `tr`s and left and right borders
83
+ // to the `td`s or `th`s
44
84
 
45
85
  .table-bordered {
46
- border: $table-border-width solid $table-border-color;
86
+ > :not(caption) > * {
87
+ border-width: $table-border-width 0;
47
88
 
48
- th,
49
- td {
50
- border: $table-border-width solid $table-border-color;
51
- }
52
-
53
- thead {
54
- th,
55
- td {
56
- border-bottom-width: 2 * $table-border-width;
89
+ // stylelint-disable-next-line selector-max-universal
90
+ > * {
91
+ border-width: 0 $table-border-width;
57
92
  }
58
93
  }
59
94
  }
60
95
 
61
96
  .table-borderless {
62
- th,
63
- td,
64
- thead th,
65
- tbody + tbody {
66
- border: 0;
97
+ // stylelint-disable-next-line selector-max-universal
98
+ > :not(caption) > * > * {
99
+ border-bottom-width: 0;
100
+ }
101
+
102
+ > :not(:first-child) {
103
+ border-top-width: 0;
67
104
  }
68
105
  }
69
106
 
@@ -71,115 +108,64 @@
71
108
  //
72
109
  // Default zebra-stripe styles (alternating gray and transparent backgrounds)
73
110
 
111
+ // For rows
74
112
  .table-striped {
75
- tbody tr:nth-of-type(#{$table-striped-order}) {
76
- background-color: $table-accent-bg;
113
+ > tbody > tr:nth-of-type(#{$table-striped-order}) > * {
114
+ --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);
115
+ --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);
77
116
  }
78
117
  }
79
118
 
80
-
81
- // Hover effect
82
- //
83
- // Placed here since it has to come after the potential zebra striping
84
-
85
- .table-hover {
86
- tbody tr {
87
- @include hover {
88
- color: $table-hover-color;
89
- background-color: $table-hover-bg;
90
- }
119
+ // For columns
120
+ .table-striped-columns {
121
+ > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {
122
+ --#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);
123
+ --#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);
91
124
  }
92
125
  }
93
126
 
94
-
95
- // Table backgrounds
127
+ // Active table
96
128
  //
97
- // Exact selectors below required to override `.table-striped` and prevent
98
- // inheritance to nested tables.
129
+ // The `.table-active` class can be added to highlight rows or cells
99
130
 
100
- @each $color, $value in $theme-colors {
101
- @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));
131
+ .table-active {
132
+ --#{$prefix}table-color-state: var(--#{$prefix}table-active-color);
133
+ --#{$prefix}table-bg-state: var(--#{$prefix}table-active-bg);
102
134
  }
103
135
 
104
- @include table-row-variant(active, $table-active-bg);
105
-
106
-
107
- // Dark styles
136
+ // Hover effect
108
137
  //
109
- // Same table markup, but inverted color scheme: dark background and light text.
110
-
111
- // stylelint-disable-next-line no-duplicate-selectors
112
- .table {
113
- .thead-dark {
114
- th {
115
- color: $table-dark-color;
116
- background-color: $table-dark-bg;
117
- border-color: $table-dark-border-color;
118
- }
119
- }
138
+ // Placed here since it has to come after the potential zebra striping
120
139
 
121
- .thead-light {
122
- th {
123
- color: $table-head-color;
124
- background-color: $table-head-bg;
125
- border-color: $table-border-color;
126
- }
140
+ .table-hover {
141
+ > tbody > tr:hover > * {
142
+ --#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);
143
+ --#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);
127
144
  }
128
145
  }
129
146
 
130
- .table-dark {
131
- color: $table-dark-color;
132
- background-color: $table-dark-bg;
133
147
 
134
- th,
135
- td,
136
- thead th {
137
- border-color: $table-dark-border-color;
138
- }
139
-
140
- &.table-bordered {
141
- border: 0;
142
- }
143
-
144
- &.table-striped {
145
- tbody tr:nth-of-type(odd) {
146
- background-color: $table-dark-accent-bg;
147
- }
148
- }
148
+ // Table variants
149
+ //
150
+ // Table variants set the table cell backgrounds, border colors
151
+ // and the colors of the striped, hovered & active tables
149
152
 
150
- &.table-hover {
151
- tbody tr {
152
- @include hover {
153
- color: $table-dark-hover-color;
154
- background-color: $table-dark-hover-bg;
155
- }
156
- }
157
- }
153
+ @each $color, $value in $table-variants {
154
+ @include table-variant($color, $value);
158
155
  }
159
156
 
160
-
161
157
  // Responsive tables
162
158
  //
163
159
  // Generate series of `.table-responsive-*` classes for configuring the screen
164
160
  // size of where your table will overflow.
165
161
 
166
- .table-responsive {
167
- @each $breakpoint in map-keys($grid-breakpoints) {
168
- $next: breakpoint-next($breakpoint, $grid-breakpoints);
169
- $infix: breakpoint-infix($next, $grid-breakpoints);
170
-
171
- &#{$infix} {
172
- @include media-breakpoint-down($breakpoint) {
173
- display: block;
174
- width: 100%;
175
- overflow-x: auto;
176
- -webkit-overflow-scrolling: touch;
177
-
178
- // Prevent double border on horizontal scroll due to use of `display: block;`
179
- > .table-bordered {
180
- border: 0;
181
- }
182
- }
162
+ @each $breakpoint in map-keys($grid-breakpoints) {
163
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
164
+
165
+ @include media-breakpoint-down($breakpoint) {
166
+ .table-responsive#{$infix} {
167
+ overflow-x: auto;
168
+ -webkit-overflow-scrolling: touch;
183
169
  }
184
170
  }
185
171
  }
@@ -1,44 +1,73 @@
1
1
  .toast {
2
- max-width: $toast-max-width;
3
- overflow: hidden; // cheap rounded corners on nested items
4
- @include font-size($toast-font-size);
5
- color: $toast-color;
6
- background-color: $toast-background-color;
2
+ // scss-docs-start toast-css-vars
3
+ --#{$prefix}toast-zindex: #{$zindex-toast};
4
+ --#{$prefix}toast-padding-x: #{$toast-padding-x};
5
+ --#{$prefix}toast-padding-y: #{$toast-padding-y};
6
+ --#{$prefix}toast-spacing: #{$toast-spacing};
7
+ --#{$prefix}toast-max-width: #{$toast-max-width};
8
+ @include rfs($toast-font-size, --#{$prefix}toast-font-size);
9
+ --#{$prefix}toast-color: #{$toast-color};
10
+ --#{$prefix}toast-bg: #{$toast-background-color};
11
+ --#{$prefix}toast-border-width: #{$toast-border-width};
12
+ --#{$prefix}toast-border-color: #{$toast-border-color};
13
+ --#{$prefix}toast-border-radius: #{$toast-border-radius};
14
+ --#{$prefix}toast-box-shadow: #{$toast-box-shadow};
15
+ --#{$prefix}toast-header-color: #{$toast-header-color};
16
+ --#{$prefix}toast-header-bg: #{$toast-header-background-color};
17
+ --#{$prefix}toast-header-border-color: #{$toast-header-border-color};
18
+ // scss-docs-end toast-css-vars
19
+
20
+ width: var(--#{$prefix}toast-max-width);
21
+ max-width: 100%;
22
+ @include font-size(var(--#{$prefix}toast-font-size));
23
+ color: var(--#{$prefix}toast-color);
24
+ pointer-events: auto;
25
+ background-color: var(--#{$prefix}toast-bg);
7
26
  background-clip: padding-box;
8
- border: $toast-border-width solid $toast-border-color;
9
- box-shadow: $toast-box-shadow;
10
- backdrop-filter: blur(10px);
11
- opacity: 0;
12
- @include border-radius($toast-border-radius);
13
-
14
- &:not(:last-child) {
15
- margin-bottom: $toast-padding-x;
16
- }
27
+ border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);
28
+ box-shadow: var(--#{$prefix}toast-box-shadow);
29
+ @include border-radius(var(--#{$prefix}toast-border-radius));
17
30
 
18
31
  &.showing {
19
- opacity: 1;
32
+ opacity: 0;
20
33
  }
21
34
 
22
- &.show {
23
- display: block;
24
- opacity: 1;
35
+ &:not(.show) {
36
+ display: none;
25
37
  }
38
+ }
26
39
 
27
- &.hide {
28
- display: none;
40
+ .toast-container {
41
+ --#{$prefix}toast-zindex: #{$zindex-toast};
42
+
43
+ position: absolute;
44
+ z-index: var(--#{$prefix}toast-zindex);
45
+ width: max-content;
46
+ max-width: 100%;
47
+ pointer-events: none;
48
+
49
+ > :not(:last-child) {
50
+ margin-bottom: var(--#{$prefix}toast-spacing);
29
51
  }
30
52
  }
31
53
 
32
54
  .toast-header {
33
55
  display: flex;
34
56
  align-items: center;
35
- padding: $toast-padding-y $toast-padding-x;
36
- color: $toast-header-color;
37
- background-color: $toast-header-background-color;
57
+ padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);
58
+ color: var(--#{$prefix}toast-header-color);
59
+ background-color: var(--#{$prefix}toast-header-bg);
38
60
  background-clip: padding-box;
39
- border-bottom: $toast-border-width solid $toast-header-border-color;
61
+ border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);
62
+ @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));
63
+
64
+ .btn-close {
65
+ margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list
66
+ margin-left: var(--#{$prefix}toast-padding-x);
67
+ }
40
68
  }
41
69
 
42
70
  .toast-body {
43
- padding: $toast-padding-x; // apply to both vertical and horizontal
71
+ padding: var(--#{$prefix}toast-padding-x);
72
+ word-wrap: break-word;
44
73
  }