bootstrap 4.0.0 → 4.3.1

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 (104) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +8 -0
  4. data/README.md +2 -2
  5. data/Rakefile +4 -2
  6. data/assets/javascripts/bootstrap/alert.js +45 -22
  7. data/assets/javascripts/bootstrap/button.js +39 -19
  8. data/assets/javascripts/bootstrap/carousel.js +213 -51
  9. data/assets/javascripts/bootstrap/collapse.js +105 -52
  10. data/assets/javascripts/bootstrap/dropdown.js +169 -45
  11. data/assets/javascripts/bootstrap/modal.js +139 -71
  12. data/assets/javascripts/bootstrap/popover.js +77 -20
  13. data/assets/javascripts/bootstrap/scrollspy.js +87 -29
  14. data/assets/javascripts/bootstrap/tab.js +50 -32
  15. data/assets/javascripts/bootstrap/toast.js +282 -0
  16. data/assets/javascripts/bootstrap/tooltip.js +295 -59
  17. data/assets/javascripts/bootstrap/util.js +78 -45
  18. data/assets/javascripts/bootstrap-sprockets.js +7 -6
  19. data/assets/javascripts/bootstrap.js +1537 -996
  20. data/assets/javascripts/bootstrap.min.js +3 -3
  21. data/assets/stylesheets/_bootstrap-grid.scss +4 -7
  22. data/assets/stylesheets/_bootstrap-reboot.scss +3 -3
  23. data/assets/stylesheets/_bootstrap.scss +5 -3
  24. data/assets/stylesheets/bootstrap/_alert.scss +1 -1
  25. data/assets/stylesheets/bootstrap/_badge.scss +8 -1
  26. data/assets/stylesheets/bootstrap/_breadcrumb.scss +9 -6
  27. data/assets/stylesheets/bootstrap/_button-group.scss +16 -19
  28. data/assets/stylesheets/bootstrap/_buttons.scss +10 -16
  29. data/assets/stylesheets/bootstrap/_card.scss +53 -34
  30. data/assets/stylesheets/bootstrap/_carousel.scss +66 -60
  31. data/assets/stylesheets/bootstrap/_close.scss +15 -8
  32. data/assets/stylesheets/bootstrap/_code.scss +5 -13
  33. data/assets/stylesheets/bootstrap/_custom-forms.scss +250 -40
  34. data/assets/stylesheets/bootstrap/_dropdown.scss +65 -5
  35. data/assets/stylesheets/bootstrap/_forms.scss +32 -35
  36. data/assets/stylesheets/bootstrap/_functions.scss +9 -9
  37. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  38. data/assets/stylesheets/bootstrap/_input-group.scss +45 -11
  39. data/assets/stylesheets/bootstrap/_jumbotron.scss +1 -0
  40. data/assets/stylesheets/bootstrap/_list-group.scss +39 -5
  41. data/assets/stylesheets/bootstrap/_mixins.scss +6 -1
  42. data/assets/stylesheets/bootstrap/_modal.scss +80 -19
  43. data/assets/stylesheets/bootstrap/_nav.scss +2 -0
  44. data/assets/stylesheets/bootstrap/_navbar.scss +9 -26
  45. data/assets/stylesheets/bootstrap/_pagination.scss +2 -6
  46. data/assets/stylesheets/bootstrap/_popover.scss +47 -59
  47. data/assets/stylesheets/bootstrap/_print.scss +23 -6
  48. data/assets/stylesheets/bootstrap/_progress.scss +16 -6
  49. data/assets/stylesheets/bootstrap/_reboot.scss +51 -50
  50. data/assets/stylesheets/bootstrap/_spinners.scss +55 -0
  51. data/assets/stylesheets/bootstrap/_tables.scss +16 -11
  52. data/assets/stylesheets/bootstrap/_toasts.scss +44 -0
  53. data/assets/stylesheets/bootstrap/_tooltip.scss +1 -1
  54. data/assets/stylesheets/bootstrap/_transitions.scss +4 -20
  55. data/assets/stylesheets/bootstrap/_type.scss +16 -16
  56. data/assets/stylesheets/bootstrap/_utilities.scss +3 -0
  57. data/assets/stylesheets/bootstrap/_variables.scss +430 -201
  58. data/assets/stylesheets/bootstrap/mixins/_badge.scss +7 -2
  59. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +29 -1
  60. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +16 -1
  61. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +3 -3
  62. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +12 -14
  63. data/assets/stylesheets/bootstrap/mixins/_caret.scss +5 -8
  64. data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
  65. data/assets/stylesheets/bootstrap/mixins/_float.scss +3 -0
  66. data/assets/stylesheets/bootstrap/mixins/_forms.scss +68 -13
  67. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +7 -7
  68. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +3 -4
  69. data/assets/stylesheets/bootstrap/mixins/_grid.scss +9 -10
  70. data/assets/stylesheets/bootstrap/mixins/_hover.scss +3 -5
  71. data/assets/stylesheets/bootstrap/mixins/_image.scss +2 -2
  72. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  73. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -2
  74. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +1 -1
  75. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +1 -3
  77. data/assets/stylesheets/bootstrap/mixins/_size.scss +1 -0
  78. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +10 -1
  79. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +5 -3
  80. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +3 -1
  81. data/assets/stylesheets/bootstrap/mixins/_transition.scss +7 -0
  82. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +1 -0
  83. data/assets/stylesheets/bootstrap/utilities/_borders.scss +17 -1
  84. data/assets/stylesheets/bootstrap/utilities/_display.scss +6 -18
  85. data/assets/stylesheets/bootstrap/utilities/_embed.scss +7 -20
  86. data/assets/stylesheets/bootstrap/utilities/_flex.scss +5 -0
  87. data/assets/stylesheets/bootstrap/utilities/_float.scss +5 -3
  88. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +5 -0
  89. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -4
  90. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +6 -0
  91. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +8 -0
  92. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +23 -1
  93. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +19 -0
  94. data/assets/stylesheets/bootstrap/utilities/_text.scss +26 -6
  95. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +4 -2
  96. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +204 -0
  97. data/bootstrap.gemspec +6 -3
  98. data/lib/bootstrap/engine.rb +3 -0
  99. data/lib/bootstrap/version.rb +4 -2
  100. data/lib/bootstrap.rb +10 -7
  101. data/tasks/updater/js.rb +1 -1
  102. data/test/test_helper.rb +7 -6
  103. metadata +19 -12
  104. data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
@@ -7,8 +7,11 @@
7
7
  .form-control {
8
8
  display: block;
9
9
  width: 100%;
10
+ height: $input-height;
10
11
  padding: $input-padding-y $input-padding-x;
11
- font-size: $font-size-base;
12
+ font-family: $input-font-family;
13
+ @include font-size($input-font-size);
14
+ font-weight: $input-font-weight;
12
15
  line-height: $input-line-height;
13
16
  color: $input-color;
14
17
  background-color: $input-bg;
@@ -16,13 +19,7 @@
16
19
  border: $input-border-width solid $input-border-color;
17
20
 
18
21
  // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.
19
- @if $enable-rounded {
20
- // Manually use the if/else instead of the mixin to account for iOS override
21
- border-radius: $input-border-radius;
22
- } @else {
23
- // Otherwise undo the iOS default
24
- border-radius: 0;
25
- }
22
+ @include border-radius($input-border-radius, 0);
26
23
 
27
24
  @include box-shadow($input-box-shadow);
28
25
  @include transition($input-transition);
@@ -57,10 +54,6 @@
57
54
  }
58
55
 
59
56
  select.form-control {
60
- &:not([size]):not([multiple]) {
61
- height: $input-height;
62
- }
63
-
64
57
  &:focus::-ms-value {
65
58
  // Suppress the nested default white text on blue background highlight given to
66
59
  // the selected option text when the (still closed) <select> receives focus
@@ -90,21 +83,21 @@ select.form-control {
90
83
  padding-top: calc(#{$input-padding-y} + #{$input-border-width});
91
84
  padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});
92
85
  margin-bottom: 0; // Override the `<label>/<legend>` default
93
- font-size: inherit; // Override the `<legend>` default
86
+ @include font-size(inherit); // Override the `<legend>` default
94
87
  line-height: $input-line-height;
95
88
  }
96
89
 
97
90
  .col-form-label-lg {
98
91
  padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width});
99
92
  padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width});
100
- font-size: $font-size-lg;
93
+ @include font-size($input-font-size-lg);
101
94
  line-height: $input-line-height-lg;
102
95
  }
103
96
 
104
97
  .col-form-label-sm {
105
98
  padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width});
106
99
  padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width});
107
- font-size: $font-size-sm;
100
+ @include font-size($input-font-size-sm);
108
101
  line-height: $input-line-height-sm;
109
102
  }
110
103
 
@@ -121,6 +114,7 @@ select.form-control {
121
114
  padding-bottom: $input-padding-y;
122
115
  margin-bottom: 0; // match inputs if this class comes on inputs with default margins
123
116
  line-height: $input-line-height;
117
+ color: $input-plaintext-color;
124
118
  background-color: transparent;
125
119
  border: solid transparent;
126
120
  border-width: $input-border-width 0;
@@ -138,35 +132,35 @@ select.form-control {
138
132
  // Build on `.form-control` with modifier classes to decrease or increase the
139
133
  // height and font-size of form controls.
140
134
  //
141
- // The `.form-group-* form-control` variations are sadly duplicated to avoid the
142
- // issue documented in https://github.com/twbs/bootstrap/issues/15074.
135
+ // Repeated in `_input_group.scss` to avoid Sass extend issues.
143
136
 
144
137
  .form-control-sm {
138
+ height: $input-height-sm;
145
139
  padding: $input-padding-y-sm $input-padding-x-sm;
146
- font-size: $font-size-sm;
140
+ @include font-size($input-font-size-sm);
147
141
  line-height: $input-line-height-sm;
148
142
  @include border-radius($input-border-radius-sm);
149
143
  }
150
144
 
151
- select.form-control-sm {
152
- &:not([size]):not([multiple]) {
153
- height: $input-height-sm;
154
- }
155
- }
156
-
157
145
  .form-control-lg {
146
+ height: $input-height-lg;
158
147
  padding: $input-padding-y-lg $input-padding-x-lg;
159
- font-size: $font-size-lg;
148
+ @include font-size($input-font-size-lg);
160
149
  line-height: $input-line-height-lg;
161
150
  @include border-radius($input-border-radius-lg);
162
151
  }
163
152
 
164
- select.form-control-lg {
165
- &:not([size]):not([multiple]) {
166
- height: $input-height-lg;
153
+ // stylelint-disable-next-line no-duplicate-selectors
154
+ select.form-control {
155
+ &[size],
156
+ &[multiple] {
157
+ height: auto;
167
158
  }
168
159
  }
169
160
 
161
+ textarea.form-control {
162
+ height: auto;
163
+ }
170
164
 
171
165
  // Form groups
172
166
  //
@@ -190,13 +184,13 @@ select.form-control-lg {
190
184
  .form-row {
191
185
  display: flex;
192
186
  flex-wrap: wrap;
193
- margin-right: -5px;
194
- margin-left: -5px;
187
+ margin-right: -$form-grid-gutter-width / 2;
188
+ margin-left: -$form-grid-gutter-width / 2;
195
189
 
196
190
  > .col,
197
191
  > [class*="col-"] {
198
- padding-right: 5px;
199
- padding-left: 5px;
192
+ padding-right: $form-grid-gutter-width / 2;
193
+ padding-left: $form-grid-gutter-width / 2;
200
194
  }
201
195
  }
202
196
 
@@ -248,8 +242,9 @@ select.form-control-lg {
248
242
  // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
249
243
  // server side validation.
250
244
 
251
- @include form-validation-state("valid", $form-feedback-valid-color);
252
- @include form-validation-state("invalid", $form-feedback-invalid-color);
245
+ @each $state, $data in $form-validation-states {
246
+ @include form-validation-state($state, map-get($data, color), map-get($data, icon));
247
+ }
253
248
 
254
249
  // Inline forms
255
250
  //
@@ -302,7 +297,8 @@ select.form-control-lg {
302
297
  display: inline-block;
303
298
  }
304
299
 
305
- .input-group {
300
+ .input-group,
301
+ .custom-select {
306
302
  width: auto;
307
303
  }
308
304
 
@@ -317,6 +313,7 @@ select.form-control-lg {
317
313
  }
318
314
  .form-check-input {
319
315
  position: relative;
316
+ flex-shrink: 0;
320
317
  margin-top: 0;
321
318
  margin-right: $form-check-input-margin-x;
322
319
  margin-left: 0;
@@ -1,6 +1,6 @@
1
1
  // Bootstrap functions
2
2
  //
3
- // Utility mixins and functions for evalutating source code across our variables, maps, and mixins.
3
+ // Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
4
4
 
5
5
  // Ascending
6
6
  // Used to evaluate Sass maps like our grid breakpoints.
@@ -8,7 +8,7 @@
8
8
  $prev-key: null;
9
9
  $prev-num: null;
10
10
  @each $key, $num in $map {
11
- @if $prev-num == null {
11
+ @if $prev-num == null or unit($num) == "%" {
12
12
  // Do nothing
13
13
  } @else if not comparable($prev-num, $num) {
14
14
  @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
@@ -21,12 +21,12 @@
21
21
  }
22
22
 
23
23
  // Starts at zero
24
- // Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.
25
- @mixin _assert-starts-at-zero($map) {
24
+ // Used to ensure the min-width of the lowest breakpoint starts at 0.
25
+ @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
26
26
  $values: map-values($map);
27
27
  $first-value: nth($values, 1);
28
28
  @if $first-value != 0 {
29
- @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.";
29
+ @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
30
30
  }
31
31
  }
32
32
 
@@ -49,7 +49,7 @@
49
49
  }
50
50
 
51
51
  // Color contrast
52
- @function color-yiq($color) {
52
+ @function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
53
53
  $r: red($color);
54
54
  $g: green($color);
55
55
  $b: blue($color);
@@ -57,9 +57,9 @@
57
57
  $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
58
58
 
59
59
  @if ($yiq >= $yiq-contrasted-threshold) {
60
- @return $yiq-text-dark;
60
+ @return $dark;
61
61
  } @else {
62
- @return $yiq-text-light;
62
+ @return $light;
63
63
  }
64
64
  }
65
65
 
@@ -79,7 +79,7 @@
79
79
  // Request a theme color level
80
80
  @function theme-color-level($color-name: "primary", $level: 0) {
81
81
  $color: theme-color($color-name);
82
- $color-base: if($level > 0, #000, #fff);
82
+ $color-base: if($level > 0, $black, $white);
83
83
  $level: abs($level);
84
84
 
85
85
  @return mix($color-base, $color, $level * $theme-color-interval);
@@ -32,11 +32,11 @@
32
32
  }
33
33
 
34
34
  .figure-img {
35
- margin-bottom: ($spacer / 2);
35
+ margin-bottom: $spacer / 2;
36
36
  line-height: 1;
37
37
  }
38
38
 
39
39
  .figure-caption {
40
- font-size: $figure-caption-font-size;
40
+ @include font-size($figure-caption-font-size);
41
41
  color: $figure-caption-color;
42
42
  }
@@ -12,6 +12,7 @@
12
12
  width: 100%;
13
13
 
14
14
  > .form-control,
15
+ > .form-control-plaintext,
15
16
  > .custom-select,
16
17
  > .custom-file {
17
18
  position: relative; // For focus state's z-index
@@ -21,11 +22,6 @@
21
22
  width: 1%;
22
23
  margin-bottom: 0;
23
24
 
24
- // Bring the "active" form control to the top of surrounding elements
25
- &:focus {
26
- z-index: 3;
27
- }
28
-
29
25
  + .form-control,
30
26
  + .custom-select,
31
27
  + .custom-file {
@@ -33,6 +29,18 @@
33
29
  }
34
30
  }
35
31
 
32
+ // Bring the "active" form control to the top of surrounding elements
33
+ > .form-control:focus,
34
+ > .custom-select:focus,
35
+ > .custom-file .custom-file-input:focus ~ .custom-file-label {
36
+ z-index: 3;
37
+ }
38
+
39
+ // Bring the custom file input above the label
40
+ > .custom-file .custom-file-input:focus {
41
+ z-index: 4;
42
+ }
43
+
36
44
  > .form-control,
37
45
  > .custom-select {
38
46
  &:not(:last-child) { @include border-right-radius(0); }
@@ -46,9 +54,8 @@
46
54
  align-items: center;
47
55
 
48
56
  &:not(:last-child) .custom-file-label,
49
- &:not(:last-child) .custom-file-label::before { @include border-right-radius(0); }
50
- &:not(:first-child) .custom-file-label,
51
- &:not(:first-child) .custom-file-label::before { @include border-left-radius(0); }
57
+ &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
58
+ &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
52
59
  }
53
60
  }
54
61
 
@@ -69,6 +76,10 @@
69
76
  .btn {
70
77
  position: relative;
71
78
  z-index: 2;
79
+
80
+ &:focus {
81
+ z-index: 3;
82
+ }
72
83
  }
73
84
 
74
85
  .btn + .btn,
@@ -93,7 +104,7 @@
93
104
  align-items: center;
94
105
  padding: $input-padding-y $input-padding-x;
95
106
  margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
96
- font-size: $font-size-base; // Match inputs
107
+ @include font-size($input-font-size); // Match inputs
97
108
  font-weight: $font-weight-normal;
98
109
  line-height: $input-line-height;
99
110
  color: $input-group-addon-color;
@@ -116,20 +127,43 @@
116
127
  // Remix the default form control sizing classes into new ones for easier
117
128
  // manipulation.
118
129
 
130
+ .input-group-lg > .form-control:not(textarea),
131
+ .input-group-lg > .custom-select {
132
+ height: $input-height-lg;
133
+ }
134
+
119
135
  .input-group-lg > .form-control,
136
+ .input-group-lg > .custom-select,
120
137
  .input-group-lg > .input-group-prepend > .input-group-text,
121
138
  .input-group-lg > .input-group-append > .input-group-text,
122
139
  .input-group-lg > .input-group-prepend > .btn,
123
140
  .input-group-lg > .input-group-append > .btn {
124
- @extend .form-control-lg;
141
+ padding: $input-padding-y-lg $input-padding-x-lg;
142
+ @include font-size($input-font-size-lg);
143
+ line-height: $input-line-height-lg;
144
+ @include border-radius($input-border-radius-lg);
145
+ }
146
+
147
+ .input-group-sm > .form-control:not(textarea),
148
+ .input-group-sm > .custom-select {
149
+ height: $input-height-sm;
125
150
  }
126
151
 
127
152
  .input-group-sm > .form-control,
153
+ .input-group-sm > .custom-select,
128
154
  .input-group-sm > .input-group-prepend > .input-group-text,
129
155
  .input-group-sm > .input-group-append > .input-group-text,
130
156
  .input-group-sm > .input-group-prepend > .btn,
131
157
  .input-group-sm > .input-group-append > .btn {
132
- @extend .form-control-sm;
158
+ padding: $input-padding-y-sm $input-padding-x-sm;
159
+ @include font-size($input-font-size-sm);
160
+ line-height: $input-line-height-sm;
161
+ @include border-radius($input-border-radius-sm);
162
+ }
163
+
164
+ .input-group-lg > .custom-select,
165
+ .input-group-sm > .custom-select {
166
+ padding-right: $custom-select-padding-x + $custom-select-indicator-padding;
133
167
  }
134
168
 
135
169
 
@@ -1,6 +1,7 @@
1
1
  .jumbotron {
2
2
  padding: $jumbotron-padding ($jumbotron-padding / 2);
3
3
  margin-bottom: $jumbotron-padding;
4
+ color: $jumbotron-color;
4
5
  background-color: $jumbotron-bg;
5
6
  @include border-radius($border-radius-lg);
6
7
 
@@ -24,6 +24,7 @@
24
24
 
25
25
  // Hover state
26
26
  @include hover-focus {
27
+ z-index: 1; // Place hover/focus items above their siblings for proper border styling
27
28
  color: $list-group-action-hover-color;
28
29
  text-decoration: none;
29
30
  background-color: $list-group-hover-bg;
@@ -46,6 +47,7 @@
46
47
  padding: $list-group-item-padding-y $list-group-item-padding-x;
47
48
  // Place the border on the list items and negative margin up for better styling
48
49
  margin-bottom: -$list-group-border-width;
50
+ color: $list-group-color;
49
51
  background-color: $list-group-bg;
50
52
  border: $list-group-border-width solid $list-group-border-color;
51
53
 
@@ -58,14 +60,10 @@
58
60
  @include border-bottom-radius($list-group-border-radius);
59
61
  }
60
62
 
61
- @include hover-focus {
62
- z-index: 1; // Place hover/active items above their siblings for proper border styling
63
- text-decoration: none;
64
- }
65
-
66
63
  &.disabled,
67
64
  &:disabled {
68
65
  color: $list-group-disabled-color;
66
+ pointer-events: none;
69
67
  background-color: $list-group-disabled-bg;
70
68
  }
71
69
 
@@ -79,6 +77,37 @@
79
77
  }
80
78
 
81
79
 
80
+ // Horizontal
81
+ //
82
+ // Change the layout of list group items from vertical (default) to horizontal.
83
+
84
+ @each $breakpoint in map-keys($grid-breakpoints) {
85
+ @include media-breakpoint-up($breakpoint) {
86
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
87
+
88
+ .list-group-horizontal#{$infix} {
89
+ flex-direction: row;
90
+
91
+ .list-group-item {
92
+ margin-right: -$list-group-border-width;
93
+ margin-bottom: 0;
94
+
95
+ &:first-child {
96
+ @include border-left-radius($list-group-border-radius);
97
+ @include border-top-right-radius(0);
98
+ }
99
+
100
+ &:last-child {
101
+ margin-right: 0;
102
+ @include border-right-radius($list-group-border-radius);
103
+ @include border-bottom-left-radius(0);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+
82
111
  // Flush list items
83
112
  //
84
113
  // Remove borders and border-radius to keep list group items edge-to-edge. Most
@@ -89,6 +118,10 @@
89
118
  border-right: 0;
90
119
  border-left: 0;
91
120
  @include border-radius(0);
121
+
122
+ &:last-child {
123
+ margin-bottom: -$list-group-border-width;
124
+ }
92
125
  }
93
126
 
94
127
  &:first-child {
@@ -99,6 +132,7 @@
99
132
 
100
133
  &:last-child {
101
134
  .list-group-item:last-child {
135
+ margin-bottom: 0;
102
136
  border-bottom: 0;
103
137
  }
104
138
  }
@@ -2,6 +2,12 @@
2
2
  //
3
3
  // Used in conjunction with global variables to enable certain theme features.
4
4
 
5
+ // Vendor
6
+ @import "vendor/rfs";
7
+
8
+ // Deprecate
9
+ @import "mixins/deprecate";
10
+
5
11
  // Utilities
6
12
  @import "mixins/breakpoints";
7
13
  @import "mixins/hover";
@@ -36,7 +42,6 @@
36
42
 
37
43
  // // Layout
38
44
  @import "mixins/clearfix";
39
- // @import "mixins/navbar-align";
40
45
  @import "mixins/grid-framework";
41
46
  @import "mixins/grid";
42
47
  @import "mixins/float";
@@ -4,20 +4,25 @@
4
4
  // .modal-content - actual modal w/ bg and corners and stuff
5
5
 
6
6
 
7
- // Kill the scroll on the body
8
7
  .modal-open {
8
+ // Kill the scroll on the body
9
9
  overflow: hidden;
10
+
11
+ .modal {
12
+ overflow-x: hidden;
13
+ overflow-y: auto;
14
+ }
10
15
  }
11
16
 
12
17
  // Container that the modal scrolls within
13
18
  .modal {
14
19
  position: fixed;
15
20
  top: 0;
16
- right: 0;
17
- bottom: 0;
18
21
  left: 0;
19
22
  z-index: $zindex-modal;
20
23
  display: none;
24
+ width: 100%;
25
+ height: 100%;
21
26
  overflow: hidden;
22
27
  // Prevent Chrome on Windows from adding a focus outline. For details, see
23
28
  // https://github.com/twbs/bootstrap/pull/10951.
@@ -25,11 +30,6 @@
25
30
  // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
26
31
  // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
27
32
  // See also https://github.com/twbs/bootstrap/issues/17695
28
-
29
- .modal-open & {
30
- overflow-x: hidden;
31
- overflow-y: auto;
32
- }
33
33
  }
34
34
 
35
35
  // Shell div to position the modal with bottom padding
@@ -43,17 +43,58 @@
43
43
  // When fading in the modal, animate it to slide down
44
44
  .modal.fade & {
45
45
  @include transition($modal-transition);
46
- transform: translate(0, -25%);
46
+ transform: $modal-fade-transform;
47
47
  }
48
48
  .modal.show & {
49
- transform: translate(0, 0);
49
+ transform: $modal-show-transform;
50
+ }
51
+ }
52
+
53
+ .modal-dialog-scrollable {
54
+ display: flex; // IE10/11
55
+ max-height: calc(100% - #{$modal-dialog-margin * 2});
56
+
57
+ .modal-content {
58
+ max-height: calc(100vh - #{$modal-dialog-margin * 2}); // IE10/11
59
+ overflow: hidden;
60
+ }
61
+
62
+ .modal-header,
63
+ .modal-footer {
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ .modal-body {
68
+ overflow-y: auto;
50
69
  }
51
70
  }
52
71
 
53
72
  .modal-dialog-centered {
54
73
  display: flex;
55
74
  align-items: center;
56
- min-height: calc(100% - (#{$modal-dialog-margin} * 2));
75
+ min-height: calc(100% - #{$modal-dialog-margin * 2});
76
+
77
+ // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)
78
+ &::before {
79
+ display: block; // IE10
80
+ height: calc(100vh - #{$modal-dialog-margin * 2});
81
+ content: "";
82
+ }
83
+
84
+ // Ensure `.modal-body` shows scrollbar (IE10/11)
85
+ &.modal-dialog-scrollable {
86
+ flex-direction: column;
87
+ justify-content: center;
88
+ height: 100%;
89
+
90
+ .modal-content {
91
+ max-height: none;
92
+ }
93
+
94
+ &::before {
95
+ content: none;
96
+ }
97
+ }
57
98
  }
58
99
 
59
100
  // Actual modal
@@ -63,11 +104,12 @@
63
104
  flex-direction: column;
64
105
  width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
65
106
  // counteract the pointer-events: none; in the .modal-dialog
107
+ color: $modal-content-color;
66
108
  pointer-events: auto;
67
109
  background-color: $modal-content-bg;
68
110
  background-clip: padding-box;
69
111
  border: $modal-content-border-width solid $modal-content-border-color;
70
- @include border-radius($border-radius-lg);
112
+ @include border-radius($modal-content-border-radius);
71
113
  @include box-shadow($modal-content-box-shadow-xs);
72
114
  // Remove focus outline from opened modal
73
115
  outline: 0;
@@ -77,10 +119,10 @@
77
119
  .modal-backdrop {
78
120
  position: fixed;
79
121
  top: 0;
80
- right: 0;
81
- bottom: 0;
82
122
  left: 0;
83
123
  z-index: $zindex-modal-backdrop;
124
+ width: 100vw;
125
+ height: 100vh;
84
126
  background-color: $modal-backdrop-bg;
85
127
 
86
128
  // Fade for backdrop
@@ -96,12 +138,12 @@
96
138
  justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
97
139
  padding: $modal-header-padding;
98
140
  border-bottom: $modal-header-border-width solid $modal-header-border-color;
99
- @include border-top-radius($border-radius-lg);
141
+ @include border-top-radius($modal-content-border-radius);
100
142
 
101
143
  .close {
102
144
  padding: $modal-header-padding;
103
145
  // auto on the left force icon to the right even when there is no .modal-title
104
- margin: (-$modal-header-padding) (-$modal-header-padding) (-$modal-header-padding) auto;
146
+ margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;
105
147
  }
106
148
  }
107
149
 
@@ -128,6 +170,7 @@
128
170
  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
129
171
  padding: $modal-inner-padding;
130
172
  border-top: $modal-footer-border-width solid $modal-footer-border-color;
173
+ @include border-bottom-radius($modal-content-border-radius);
131
174
 
132
175
  // Easily place margin between footer elements
133
176
  > :not(:first-child) { margin-left: .25rem; }
@@ -151,8 +194,20 @@
151
194
  margin: $modal-dialog-margin-y-sm-up auto;
152
195
  }
153
196
 
197
+ .modal-dialog-scrollable {
198
+ max-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
199
+
200
+ .modal-content {
201
+ max-height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
202
+ }
203
+ }
204
+
154
205
  .modal-dialog-centered {
155
- min-height: calc(100% - (#{$modal-dialog-margin-y-sm-up} * 2));
206
+ min-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
207
+
208
+ &::before {
209
+ height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
210
+ }
156
211
  }
157
212
 
158
213
  .modal-content {
@@ -160,9 +215,15 @@
160
215
  }
161
216
 
162
217
  .modal-sm { max-width: $modal-sm; }
163
-
164
218
  }
165
219
 
166
220
  @include media-breakpoint-up(lg) {
167
- .modal-lg { max-width: $modal-lg; }
221
+ .modal-lg,
222
+ .modal-xl {
223
+ max-width: $modal-lg;
224
+ }
225
+ }
226
+
227
+ @include media-breakpoint-up(xl) {
228
+ .modal-xl { max-width: $modal-xl; }
168
229
  }
@@ -22,6 +22,8 @@
22
22
  // Disabled state lightens text
23
23
  &.disabled {
24
24
  color: $nav-link-disabled-color;
25
+ pointer-events: none;
26
+ cursor: default;
25
27
  }
26
28
  }
27
29