bootstrap 5.0.0.alpha2 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +10 -7
  7. data/assets/javascripts/bootstrap.js +2554 -2564
  8. data/assets/javascripts/bootstrap.min.js +3 -3
  9. data/assets/javascripts/bootstrap/alert.js +119 -115
  10. data/assets/javascripts/bootstrap/base-component.js +63 -0
  11. data/assets/javascripts/bootstrap/button.js +67 -69
  12. data/assets/javascripts/bootstrap/carousel.js +340 -331
  13. data/assets/javascripts/bootstrap/collapse.js +214 -209
  14. data/assets/javascripts/bootstrap/dom/data.js +35 -48
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +105 -98
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +26 -34
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +28 -41
  18. data/assets/javascripts/bootstrap/dropdown.js +392 -325
  19. data/assets/javascripts/bootstrap/modal.js +492 -434
  20. data/assets/javascripts/bootstrap/offcanvas.js +671 -0
  21. data/assets/javascripts/bootstrap/popover.js +114 -132
  22. data/assets/javascripts/bootstrap/scrollspy.js +172 -180
  23. data/assets/javascripts/bootstrap/tab.js +168 -144
  24. data/assets/javascripts/bootstrap/toast.js +141 -150
  25. data/assets/javascripts/bootstrap/tooltip.js +466 -452
  26. data/assets/stylesheets/_bootstrap-grid.scss +9 -9
  27. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  28. data/assets/stylesheets/_bootstrap.scss +5 -3
  29. data/assets/stylesheets/bootstrap/_accordion.scss +118 -0
  30. data/assets/stylesheets/bootstrap/_alert.scss +10 -3
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +2 -4
  32. data/assets/stylesheets/bootstrap/_button-group.scss +5 -7
  33. data/assets/stylesheets/bootstrap/_buttons.scss +2 -15
  34. data/assets/stylesheets/bootstrap/_card.scss +2 -29
  35. data/assets/stylesheets/bootstrap/_carousel.scss +35 -18
  36. data/assets/stylesheets/bootstrap/_close.scss +2 -3
  37. data/assets/stylesheets/bootstrap/_dropdown.scss +33 -29
  38. data/assets/stylesheets/bootstrap/_forms.scss +1 -1
  39. data/assets/stylesheets/bootstrap/_functions.scss +11 -12
  40. data/assets/stylesheets/bootstrap/_list-group.scss +23 -6
  41. data/assets/stylesheets/bootstrap/_mixins.scss +1 -0
  42. data/assets/stylesheets/bootstrap/_modal.scss +2 -9
  43. data/assets/stylesheets/bootstrap/_nav.scss +12 -0
  44. data/assets/stylesheets/bootstrap/_navbar.scss +15 -2
  45. data/assets/stylesheets/bootstrap/_offcanvas.scss +77 -0
  46. data/assets/stylesheets/bootstrap/_pagination.scss +3 -3
  47. data/assets/stylesheets/bootstrap/_popover.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_progress.scss +4 -1
  49. data/assets/stylesheets/bootstrap/_reboot.scss +48 -44
  50. data/assets/stylesheets/bootstrap/_root.scss +5 -5
  51. data/assets/stylesheets/bootstrap/_spinners.scss +18 -5
  52. data/assets/stylesheets/bootstrap/_tables.scss +15 -16
  53. data/assets/stylesheets/bootstrap/_toasts.scss +15 -12
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +12 -12
  55. data/assets/stylesheets/bootstrap/_transitions.scss +2 -0
  56. data/assets/stylesheets/bootstrap/_utilities.scss +133 -70
  57. data/assets/stylesheets/bootstrap/_variables.scss +363 -207
  58. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +5 -5
  59. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +21 -11
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +112 -9
  62. data/assets/stylesheets/bootstrap/forms/_form-range.scss +1 -46
  63. data/assets/stylesheets/bootstrap/forms/_form-select.scss +1 -16
  64. data/assets/stylesheets/bootstrap/forms/_input-group.scss +21 -40
  65. data/assets/stylesheets/bootstrap/forms/_validation.scss +1 -1
  66. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +2 -2
  67. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +2 -2
  68. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +1 -1
  69. data/assets/stylesheets/bootstrap/mixins/_alert.scss +3 -1
  70. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -6
  71. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +10 -5
  72. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -6
  73. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  74. data/assets/stylesheets/bootstrap/mixins/_container.scss +2 -4
  75. data/assets/stylesheets/bootstrap/mixins/_forms.scss +26 -22
  76. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +5 -1
  77. data/assets/stylesheets/bootstrap/mixins/_grid.scss +18 -13
  78. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -1
  79. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +5 -3
  80. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +7 -7
  81. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +19 -0
  82. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +3 -2
  83. data/assets/stylesheets/bootstrap/utilities/_api.scss +1 -1
  84. data/bootstrap.gemspec +1 -3
  85. data/lib/bootstrap/version.rb +2 -2
  86. data/tasks/updater/js.rb +20 -5
  87. data/tasks/updater/network.rb +7 -1
  88. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  89. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  90. data/test/dummy_rails/app/views/pages/root.html +89 -0
  91. data/test/dummy_rails/config/application.rb +0 -3
  92. data/test/gemfiles/rails_6_1.gemfile +7 -0
  93. metadata +20 -40
  94. data/assets/javascripts/bootstrap/dom/polyfill.js +0 -110
  95. data/assets/stylesheets/bootstrap/forms/_form-file.scss +0 -91
  96. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -9,8 +9,7 @@
9
9
  height: $btn-close-height;
10
10
  padding: $btn-close-padding-y $btn-close-padding-x;
11
11
  color: $btn-close-color;
12
- background: transparent escape-svg($btn-close-bg) no-repeat center center / $btn-close-width auto; // include transparent for button elements
13
- background-clip: content-box;
12
+ background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
14
13
  border: 0; // for button elements
15
14
  @include border-radius();
16
15
  opacity: $btn-close-opacity;
@@ -23,7 +22,7 @@
23
22
  }
24
23
 
25
24
  &:focus {
26
- outline: none;
25
+ outline: 0;
27
26
  box-shadow: $btn-close-focus-shadow;
28
27
  opacity: $btn-close-focus-opacity;
29
28
  }
@@ -1,8 +1,8 @@
1
1
  // The dropdown wrapper (`<div>`)
2
2
  .dropup,
3
- .dropright,
3
+ .dropend,
4
4
  .dropdown,
5
- .dropleft {
5
+ .dropstart {
6
6
  position: relative;
7
7
  }
8
8
 
@@ -16,13 +16,11 @@
16
16
  // The dropdown menu
17
17
  .dropdown-menu {
18
18
  position: absolute;
19
- top: 100%;
20
- left: 0;
21
19
  z-index: $zindex-dropdown;
22
20
  display: none; // none by default, but block on "open" of the menu
23
21
  min-width: $dropdown-min-width;
24
22
  padding: $dropdown-padding-y $dropdown-padding-x;
25
- margin: $dropdown-spacer 0 0; // override default ul
23
+ margin: 0; // Override default margin of ul
26
24
  @include font-size($dropdown-font-size);
27
25
  color: $dropdown-color;
28
26
  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
@@ -32,21 +30,38 @@
32
30
  border: $dropdown-border-width solid $dropdown-border-color;
33
31
  @include border-radius($dropdown-border-radius);
34
32
  @include box-shadow($dropdown-box-shadow);
33
+
34
+ &[data-bs-popper] {
35
+ top: 100%;
36
+ left: 0;
37
+ margin-top: $dropdown-spacer;
38
+ }
35
39
  }
36
40
 
37
41
  // scss-docs-start responsive-breakpoints
42
+ // We deliberately hardcode the `bs-` prefix because we check
43
+ // this custom property in JS to determine Popper's positioning
44
+
38
45
  @each $breakpoint in map-keys($grid-breakpoints) {
39
46
  @include media-breakpoint-up($breakpoint) {
40
47
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
41
48
 
42
- .dropdown-menu#{$infix}-left {
43
- right: auto;
44
- left: 0;
49
+ .dropdown-menu#{$infix}-start {
50
+ --bs-position: start;
51
+
52
+ &[data-bs-popper] {
53
+ right: auto #{"/* rtl:ignore */"};
54
+ left: 0 #{"/* rtl:ignore */"};
55
+ }
45
56
  }
46
57
 
47
- .dropdown-menu#{$infix}-right {
48
- right: 0;
49
- left: auto;
58
+ .dropdown-menu#{$infix}-end {
59
+ --bs-position: end;
60
+
61
+ &[data-bs-popper] {
62
+ right: 0 #{"/* rtl:ignore */"};
63
+ left: auto #{"/* rtl:ignore */"};
64
+ }
50
65
  }
51
66
  }
52
67
  }
@@ -55,7 +70,7 @@
55
70
  // Allow for dropdowns to go bottom up (aka, dropup-menu)
56
71
  // Just add .dropup after the standard .dropdown class and you're set.
57
72
  .dropup {
58
- .dropdown-menu {
73
+ .dropdown-menu[data-bs-popper] {
59
74
  top: auto;
60
75
  bottom: 100%;
61
76
  margin-top: 0;
@@ -67,8 +82,8 @@
67
82
  }
68
83
  }
69
84
 
70
- .dropright {
71
- .dropdown-menu {
85
+ .dropend {
86
+ .dropdown-menu[data-bs-popper] {
72
87
  top: 0;
73
88
  right: auto;
74
89
  left: 100%;
@@ -77,15 +92,15 @@
77
92
  }
78
93
 
79
94
  .dropdown-toggle {
80
- @include caret(right);
95
+ @include caret(end);
81
96
  &::after {
82
97
  vertical-align: 0;
83
98
  }
84
99
  }
85
100
  }
86
101
 
87
- .dropleft {
88
- .dropdown-menu {
102
+ .dropstart {
103
+ .dropdown-menu[data-bs-popper] {
89
104
  top: 0;
90
105
  right: 100%;
91
106
  left: auto;
@@ -94,24 +109,13 @@
94
109
  }
95
110
 
96
111
  .dropdown-toggle {
97
- @include caret(left);
112
+ @include caret(start);
98
113
  &::before {
99
114
  vertical-align: 0;
100
115
  }
101
116
  }
102
117
  }
103
118
 
104
- // When enabled Popper.js, reset basic dropdown position
105
- // stylelint-disable-next-line no-duplicate-selectors
106
- .dropdown-menu {
107
- &[x-placement^="top"],
108
- &[x-placement^="right"],
109
- &[x-placement^="bottom"],
110
- &[x-placement^="left"] {
111
- right: auto;
112
- bottom: auto;
113
- }
114
- }
115
119
 
116
120
  // Dividers (basically an `<hr>`) within the dropdown
117
121
  .dropdown-divider {
@@ -3,7 +3,7 @@
3
3
  @import "forms/form-control";
4
4
  @import "forms/form-select";
5
5
  @import "forms/form-check";
6
- @import "forms/form-file";
7
6
  @import "forms/form-range";
7
+ @import "forms/floating-labels";
8
8
  @import "forms/input-group";
9
9
  @import "forms/validation";
@@ -150,23 +150,22 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
150
150
  @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100);
151
151
  }
152
152
 
153
- // Request a color level
154
- // scss-docs-start color-level
155
- @function color-level($color: $primary, $level: 0) {
156
- $color-base: if($level > 0, $black, $white);
157
- $level: abs($level);
158
-
159
- @return mix($color-base, $color, $level * $theme-color-interval);
153
+ // scss-docs-start color-functions
154
+ // Tint a color: mix a color with white
155
+ @function tint-color($color, $weight) {
156
+ @return mix(white, $color, $weight);
160
157
  }
161
- // scss-docs-end color-level
162
158
 
163
- @function tint-color($color, $level) {
164
- @return mix(white, $color, $level * $theme-color-interval);
159
+ // Shade a color: mix a color with black
160
+ @function shade-color($color, $weight) {
161
+ @return mix(black, $color, $weight);
165
162
  }
166
163
 
167
- @function shade-color($color, $level) {
168
- @return mix(black, $color, $level * $theme-color-interval);
164
+ // Shade the color if the weight is positive, else tint it
165
+ @function shift-color($color, $weight) {
166
+ @return if($weight > 0, shade-color($color, $weight), tint-color($color, -$weight));
169
167
  }
168
+ // scss-docs-end color-functions
170
169
 
171
170
  // Return valid calc
172
171
  @function add($value1, $value2, $return-calc: true) {
@@ -12,6 +12,17 @@
12
12
  @include border-radius($list-group-border-radius);
13
13
  }
14
14
 
15
+ .list-group-numbered {
16
+ list-style-type: none;
17
+ counter-reset: section;
18
+
19
+ > li::before {
20
+ // Increments only this instance of the section counter
21
+ content: counters(section, ".") ". ";
22
+ counter-increment: section;
23
+ }
24
+ }
25
+
15
26
 
16
27
  // Interactive list items
17
28
  //
@@ -99,13 +110,13 @@
99
110
 
100
111
  > .list-group-item {
101
112
  &:first-child {
102
- @include border-bottom-left-radius($list-group-border-radius);
103
- @include border-top-right-radius(0);
113
+ @include border-bottom-start-radius($list-group-border-radius);
114
+ @include border-top-end-radius(0);
104
115
  }
105
116
 
106
117
  &:last-child {
107
- @include border-top-right-radius($list-group-border-radius);
108
- @include border-bottom-left-radius(0);
118
+ @include border-top-end-radius($list-group-border-radius);
119
+ @include border-bottom-start-radius(0);
109
120
  }
110
121
 
111
122
  &.active {
@@ -151,7 +162,13 @@
151
162
  // Add modifier classes to change text and background color on individual items.
152
163
  // Organizationally, this must come after the `:hover` states.
153
164
 
154
- @each $color, $value in $theme-colors {
155
- @include list-group-item-variant($color, color-level($value, $list-group-item-bg-level), color-level($value, $list-group-item-color-level));
165
+ @each $state, $value in $theme-colors {
166
+ $list-group-background: shift-color($value, $list-group-item-bg-scale);
167
+ $list-group-color: shift-color($value, $list-group-item-color-scale);
168
+ @if (contrast-ratio($list-group-background, $list-group-color) < $min-contrast-ratio) {
169
+ $list-group-color: mix($value, color-contrast($list-group-background), abs($list-group-item-color-scale));
170
+ }
171
+
172
+ @include list-group-item-variant($state, $list-group-background, $list-group-color);
156
173
  }
157
174
  // scss-docs-end list-group-modifiers
@@ -10,6 +10,7 @@
10
10
 
11
11
  // Helpers
12
12
  @import "mixins/breakpoints";
13
+ @import "mixins/color-scheme";
13
14
  @import "mixins/image";
14
15
  @import "mixins/resize";
15
16
  @import "mixins/visually-hidden";
@@ -159,15 +159,6 @@
159
159
  }
160
160
  }
161
161
 
162
- // Measure scrollbar width for padding body during modal show/hide
163
- .modal-scrollbar-measure {
164
- position: absolute;
165
- top: -9999px;
166
- width: 50px;
167
- height: 50px;
168
- overflow: scroll;
169
- }
170
-
171
162
  // Scale up the modal
172
163
  @include media-breakpoint-up(sm) {
173
164
  // Automatically set modal's width for larger viewports
@@ -202,6 +193,7 @@
202
193
  .modal-xl { max-width: $modal-xl; }
203
194
  }
204
195
 
196
+ // scss-docs-start modal-fullscreen-loop
205
197
  @each $breakpoint in map-keys($grid-breakpoints) {
206
198
  $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
207
199
  $postfix: if($infix != "", $infix + "-down", "");
@@ -233,3 +225,4 @@
233
225
  }
234
226
  }
235
227
  }
228
+ // scss-docs-end modal-fullscreen-loop
@@ -43,12 +43,15 @@
43
43
 
44
44
  .nav-link {
45
45
  margin-bottom: -$nav-tabs-border-width;
46
+ background: none;
46
47
  border: $nav-tabs-border-width solid transparent;
47
48
  @include border-top-radius($nav-tabs-border-radius);
48
49
 
49
50
  &:hover,
50
51
  &:focus {
51
52
  border-color: $nav-tabs-link-hover-border-color;
53
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
54
+ isolation: isolate;
52
55
  }
53
56
 
54
57
  &.disabled {
@@ -80,6 +83,8 @@
80
83
 
81
84
  .nav-pills {
82
85
  .nav-link {
86
+ background: none;
87
+ border: 0;
83
88
  @include border-radius($nav-pills-border-radius);
84
89
  }
85
90
 
@@ -112,6 +117,13 @@
112
117
  }
113
118
  }
114
119
 
120
+ .nav-fill,
121
+ .nav-justified {
122
+ .nav-item .nav-link {
123
+ width: 100%; // Make sure button will grow
124
+ }
125
+ }
126
+
115
127
 
116
128
  // Tabbable tabs
117
129
  //
@@ -56,7 +56,7 @@
56
56
  .navbar-brand {
57
57
  padding-top: $navbar-brand-padding-y;
58
58
  padding-bottom: $navbar-brand-padding-y;
59
- margin-right: $navbar-brand-margin-right;
59
+ margin-right: $navbar-brand-margin-end;
60
60
  @include font-size($navbar-brand-font-size);
61
61
  text-decoration: if($link-decoration == none, null, none);
62
62
  white-space: nowrap;
@@ -109,10 +109,11 @@
109
109
  // the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
110
110
  // on the `.navbar` parent.
111
111
  .navbar-collapse {
112
+ flex-basis: 100%;
113
+ flex-grow: 1;
112
114
  // For always expanded or extra full navbars, ensure content aligns itself
113
115
  // properly vertically. Can be easily overridden with flex utilities.
114
116
  align-items: center;
115
- width: 100%;
116
117
  }
117
118
 
118
119
  // Button for toggling the navbar when in its collapsed state
@@ -148,6 +149,12 @@
148
149
  background-size: 100%;
149
150
  }
150
151
 
152
+ .navbar-nav-scroll {
153
+ max-height: var(--#{$variable-prefix}scroll-height, 75vh);
154
+ overflow-y: auto;
155
+ }
156
+
157
+ // scss-docs-start navbar-expand-loop
151
158
  // Generate series of `.navbar-expand-*` responsive classes for configuring
152
159
  // where your navbar collapses.
153
160
  .navbar-expand {
@@ -174,8 +181,13 @@
174
181
  }
175
182
  }
176
183
 
184
+ .navbar-nav-scroll {
185
+ overflow: visible;
186
+ }
187
+
177
188
  .navbar-collapse {
178
189
  display: flex !important; // stylelint-disable-line declaration-no-important
190
+ flex-basis: auto;
179
191
  }
180
192
 
181
193
  .navbar-toggler {
@@ -185,6 +197,7 @@
185
197
  }
186
198
  }
187
199
  }
200
+ // scss-docs-end navbar-expand-loop
188
201
 
189
202
 
190
203
  // Navbar themes
@@ -0,0 +1,77 @@
1
+ .offcanvas {
2
+ position: fixed;
3
+ bottom: 0;
4
+ z-index: $zindex-offcanvas;
5
+ display: flex;
6
+ flex-direction: column;
7
+ max-width: 100%;
8
+ color: $offcanvas-color;
9
+ visibility: hidden;
10
+ background-color: $offcanvas-bg-color;
11
+ background-clip: padding-box;
12
+ outline: 0;
13
+ @include box-shadow($offcanvas-box-shadow);
14
+ @include transition(transform $offcanvas-transition-duration ease-in-out);
15
+ }
16
+
17
+ .offcanvas-header {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: space-between;
21
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
22
+
23
+ .btn-close {
24
+ padding: ($offcanvas-padding-y / 2) ($offcanvas-padding-x / 2);
25
+ margin: ($offcanvas-padding-y / -2) ($offcanvas-padding-x / -2) ($offcanvas-padding-y / -2) auto;
26
+ }
27
+ }
28
+
29
+ .offcanvas-title {
30
+ margin-bottom: 0;
31
+ line-height: $offcanvas-title-line-height;
32
+ }
33
+
34
+ .offcanvas-body {
35
+ flex-grow: 1;
36
+ padding: $offcanvas-padding-y $offcanvas-padding-x;
37
+ overflow-y: auto;
38
+ }
39
+
40
+ .offcanvas-start {
41
+ top: 0;
42
+ left: 0;
43
+ width: $offcanvas-horizontal-width;
44
+ border-right: $offcanvas-border-width solid $offcanvas-border-color;
45
+ transform: translateX(-100%);
46
+ }
47
+
48
+ .offcanvas-end {
49
+ top: 0;
50
+ right: 0;
51
+ width: $offcanvas-horizontal-width;
52
+ border-left: $offcanvas-border-width solid $offcanvas-border-color;
53
+ transform: translateX(100%);
54
+ }
55
+
56
+ .offcanvas-top {
57
+ top: 0;
58
+ right: 0;
59
+ left: 0;
60
+ height: $offcanvas-vertical-height;
61
+ max-height: 100%;
62
+ border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
63
+ transform: translateY(-100%);
64
+ }
65
+
66
+ .offcanvas-bottom {
67
+ right: 0;
68
+ left: 0;
69
+ height: $offcanvas-vertical-height;
70
+ max-height: 100%;
71
+ border-top: $offcanvas-border-width solid $offcanvas-border-color;
72
+ transform: translateY(100%);
73
+ }
74
+
75
+ .offcanvas.show {
76
+ transform: none;
77
+ }