bootstrap 4.6.2.1 → 5.3.5

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +61 -0
  3. data/CHANGELOG.md +7 -2
  4. data/Gemfile +1 -0
  5. data/README.md +33 -15
  6. data/Rakefile +1 -2
  7. data/assets/javascripts/bootstrap/alert.js +50 -147
  8. data/assets/javascripts/bootstrap/base-component.js +83 -0
  9. data/assets/javascripts/bootstrap/button.js +40 -190
  10. data/assets/javascripts/bootstrap/carousel.js +282 -537
  11. data/assets/javascripts/bootstrap/collapse.js +166 -314
  12. data/assets/javascripts/bootstrap/dom/data.js +62 -0
  13. data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
  14. data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
  15. data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
  16. data/assets/javascripts/bootstrap/dropdown.js +297 -455
  17. data/assets/javascripts/bootstrap/modal.js +223 -566
  18. data/assets/javascripts/bootstrap/offcanvas.js +245 -0
  19. data/assets/javascripts/bootstrap/popover.js +59 -208
  20. data/assets/javascripts/bootstrap/scrollspy.js +213 -276
  21. data/assets/javascripts/bootstrap/tab.js +222 -200
  22. data/assets/javascripts/bootstrap/toast.js +137 -206
  23. data/assets/javascripts/bootstrap/tooltip.js +403 -747
  24. data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
  25. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  26. data/assets/javascripts/bootstrap/util/config.js +67 -0
  27. data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
  28. data/assets/javascripts/bootstrap/util/index.js +280 -0
  29. data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
  30. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  31. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  32. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  33. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  34. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  35. data/assets/javascripts/bootstrap-sprockets.js +21 -5
  36. data/assets/javascripts/bootstrap.js +3625 -3488
  37. data/assets/javascripts/bootstrap.min.js +3 -3
  38. data/assets/stylesheets/_bootstrap-grid.scss +53 -21
  39. data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
  40. data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
  41. data/assets/stylesheets/_bootstrap.scss +21 -13
  42. data/assets/stylesheets/bootstrap/_accordion.scss +153 -0
  43. data/assets/stylesheets/bootstrap/_alert.scss +32 -16
  44. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  45. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -24
  46. data/assets/stylesheets/bootstrap/_button-group.scss +32 -48
  47. data/assets/stylesheets/bootstrap/_buttons.scss +145 -71
  48. data/assets/stylesheets/bootstrap/_card.scss +67 -115
  49. data/assets/stylesheets/bootstrap/_carousel.scss +63 -37
  50. data/assets/stylesheets/bootstrap/_close.scss +53 -27
  51. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  52. data/assets/stylesheets/bootstrap/_dropdown.scss +129 -71
  53. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  54. data/assets/stylesheets/bootstrap/_functions.scss +135 -23
  55. data/assets/stylesheets/bootstrap/_grid.scss +18 -52
  56. data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
  57. data/assets/stylesheets/bootstrap/_list-group.scss +93 -48
  58. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  59. data/assets/stylesheets/bootstrap/_mixins.scss +10 -15
  60. data/assets/stylesheets/bootstrap/_modal.scss +112 -112
  61. data/assets/stylesheets/bootstrap/_nav.scss +100 -28
  62. data/assets/stylesheets/bootstrap/_navbar.scss +130 -173
  63. data/assets/stylesheets/bootstrap/_offcanvas.scss +147 -0
  64. data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
  65. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  66. data/assets/stylesheets/bootstrap/_popover.scss +99 -73
  67. data/assets/stylesheets/bootstrap/_progress.scss +35 -14
  68. data/assets/stylesheets/bootstrap/_reboot.scss +319 -192
  69. data/assets/stylesheets/bootstrap/_root.scss +177 -9
  70. data/assets/stylesheets/bootstrap/_spinners.scss +43 -23
  71. data/assets/stylesheets/bootstrap/_tables.scss +101 -115
  72. data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
  73. data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
  74. data/assets/stylesheets/bootstrap/_transitions.scss +3 -2
  75. data/assets/stylesheets/bootstrap/_type.scss +40 -59
  76. data/assets/stylesheets/bootstrap/_utilities.scss +806 -18
  77. data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
  78. data/assets/stylesheets/bootstrap/_variables.scss +1210 -606
  79. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +97 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-check.scss +189 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
  82. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  83. data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
  84. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  85. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  86. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  87. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  88. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
  89. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
  90. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  91. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  92. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  93. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  94. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  95. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  96. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  97. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  98. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  99. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
  100. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  101. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  102. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  103. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  104. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  105. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
  106. data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
  107. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  108. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  109. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  110. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  111. data/assets/stylesheets/bootstrap/mixins/_forms.scss +64 -96
  112. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  113. data/assets/stylesheets/bootstrap/mixins/_grid.scss +118 -36
  114. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  115. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
  116. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  117. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  118. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  119. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  120. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  121. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  122. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
  123. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  124. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +211 -91
  125. data/bootstrap.gemspec +6 -6
  126. data/lib/bootstrap/engine.rb +0 -1
  127. data/lib/bootstrap/version.rb +2 -2
  128. data/tasks/updater/js.rb +17 -5
  129. data/tasks/updater/network.rb +2 -2
  130. data/tasks/updater/scss.rb +2 -2
  131. data/tasks/updater.rb +2 -2
  132. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  133. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  134. data/test/dummy_rails/app/views/pages/root.html +89 -0
  135. data/test/dummy_rails/config/application.rb +0 -5
  136. data/test/dummy_rails/public/favicon.ico +0 -0
  137. data/test/gemfiles/rails_4_2.gemfile +2 -1
  138. data/test/gemfiles/rails_5_0.gemfile +1 -2
  139. data/test/gemfiles/rails_5_1.gemfile +1 -2
  140. data/test/gemfiles/rails_5_2.gemfile +7 -0
  141. data/test/gemfiles/rails_6_0.gemfile +1 -1
  142. data/test/gemfiles/rails_6_1.gemfile +7 -0
  143. data/test/gemfiles/rails_7_0_dartsass.gemfile +0 -1
  144. data/test/gemfiles/rails_7_0_sassc.gemfile +0 -1
  145. data/test/rails_test.rb +0 -5
  146. data/test/test_helper.rb +3 -2
  147. metadata +92 -86
  148. data/.travis.yml +0 -31
  149. data/assets/javascripts/bootstrap/util.js +0 -189
  150. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  151. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  152. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  153. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  154. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  155. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  156. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  157. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  158. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  159. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  160. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  161. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  162. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  163. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  164. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  165. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  166. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  167. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  168. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  169. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  170. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  171. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  172. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  173. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  174. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  175. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  176. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  177. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  178. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  179. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  180. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  181. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  182. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  183. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  184. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  185. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  186. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,19 +1,187 @@
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-color: #{$mark-color};
95
+ --#{$prefix}highlight-bg: #{$mark-bg};
96
+
97
+ // scss-docs-start root-border-var
98
+ --#{$prefix}border-width: #{$border-width};
99
+ --#{$prefix}border-style: #{$border-style};
100
+ --#{$prefix}border-color: #{$border-color};
101
+ --#{$prefix}border-color-translucent: #{$border-color-translucent};
102
+
103
+ --#{$prefix}border-radius: #{$border-radius};
104
+ --#{$prefix}border-radius-sm: #{$border-radius-sm};
105
+ --#{$prefix}border-radius-lg: #{$border-radius-lg};
106
+ --#{$prefix}border-radius-xl: #{$border-radius-xl};
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
109
+ --#{$prefix}border-radius-pill: #{$border-radius-pill};
110
+ // scss-docs-end root-border-var
111
+
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};
116
+
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
123
+
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
+ }
19
187
  }
@@ -2,32 +2,50 @@
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: $spinner-vertical-align;
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-disallowed-list
17
- border-radius: 50%;
18
- animation: .75s linear infinite spinner-border;
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);
@@ -37,29 +55,31 @@
37
55
  transform: none;
38
56
  }
39
57
  }
58
+ // scss-docs-end spinner-grow-keyframes
40
59
 
41
60
  .spinner-grow {
42
- display: inline-block;
43
- width: $spinner-width;
44
- height: $spinner-height;
45
- vertical-align: $spinner-vertical-align;
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
+
46
69
  background-color: currentcolor;
47
- // stylelint-disable-next-line property-disallowed-list
48
- border-radius: 50%;
49
70
  opacity: 0;
50
- animation: .75s linear infinite spinner-grow;
51
71
  }
52
72
 
53
73
  .spinner-grow-sm {
54
- width: $spinner-width-sm;
55
- height: $spinner-height-sm;
74
+ --#{$prefix}spinner-width: #{$spinner-width-sm};
75
+ --#{$prefix}spinner-height: #{$spinner-height-sm};
56
76
  }
57
77
 
58
- @if $enable-prefers-reduced-motion-media-query {
78
+ @if $enable-reduced-motion {
59
79
  @media (prefers-reduced-motion: reduce) {
60
80
  .spinner-border,
61
81
  .spinner-grow {
62
- animation-duration: 1.5s;
82
+ --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};
63
83
  }
64
84
  }
65
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
+ // Therefore 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(#{$table-striped-order}) {
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
  }