bootstrap 4.3.1 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }