administrate-bootstrap-theme 0.2.0 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -37
  3. data/app/assets/javascripts/administrate-bootstrap-theme/{bootstrap/bootstrap.bundle.js → bootstrap.bundle.js} +1376 -1310
  4. data/app/assets/stylesheets/administrate-bootstrap-theme/_base.scss +4 -21
  5. data/app/assets/stylesheets/administrate-bootstrap-theme/_variables.scss +4 -0
  6. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_accordion.scss +4 -2
  7. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_card.scss +7 -6
  8. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_carousel.scss +2 -2
  9. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_dropdown.scss +11 -17
  10. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_functions.scss +94 -3
  11. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_grid.scss +11 -0
  12. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_helpers.scss +2 -0
  13. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_images.scss +1 -1
  14. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_list-group.scss +5 -5
  15. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_mixins.scss +2 -0
  16. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_modal.scss +7 -35
  17. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_navbar.scss +30 -1
  18. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_offcanvas.scss +19 -13
  19. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_placeholders.scss +51 -0
  20. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_popover.scss +10 -10
  21. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_reboot.scss +12 -8
  22. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_root.scss +39 -2
  23. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_spinners.scss +2 -2
  24. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_tables.scss +1 -0
  25. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_toasts.scss +3 -3
  26. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_tooltip.scss +4 -4
  27. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_transitions.scss +6 -0
  28. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_utilities.scss +44 -8
  29. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_variables.scss +193 -28
  30. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/bootstrap-grid.scss +1 -1
  31. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/bootstrap-reboot.scss +1 -1
  32. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/bootstrap-utilities.scss +1 -1
  33. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/bootstrap.scss +2 -1
  34. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/forms/_floating-labels.scss +3 -1
  35. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/forms/_form-check.scss +1 -1
  36. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/forms/_form-control.scss +1 -1
  37. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/forms/_form-range.scss +1 -1
  38. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/forms/_form-select.scss +3 -0
  39. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/helpers/_stacks.scss +15 -0
  40. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/helpers/_vr.scss +8 -0
  41. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_backdrop.scss +14 -0
  42. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_buttons.scss +1 -1
  43. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_color-scheme.scss +7 -0
  44. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_forms.scss +15 -5
  45. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_grid.scss +40 -10
  46. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_utilities.scss +27 -6
  47. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/vendor/_rfs.scss +55 -13
  48. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_autumn.scss +8 -0
  49. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_default.scss +8 -0
  50. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_forest.scss +9 -0
  51. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_industrial.scss +8 -0
  52. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_water.scss +8 -0
  53. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_body.scss +28 -10
  54. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_header.scss +4 -6
  55. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_form.scss +6 -6
  56. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_navigation.scss +26 -3
  57. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_pagination.scss +1 -1
  58. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_lato.scss +5 -0
  59. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_montserrat.scss +5 -0
  60. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_open_sans.scss +5 -0
  61. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_roboto.scss +5 -0
  62. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_source_sans_pro.scss +5 -0
  63. data/app/assets/stylesheets/administrate-bootstrap-theme/theme.scss +10 -61
  64. data/lib/administrate-bootstrap-theme/version.rb +2 -1
  65. data/lib/generators/administrate_bootstrap_theme/install/USAGE +10 -0
  66. data/lib/generators/administrate_bootstrap_theme/install/install_generator.rb +33 -0
  67. data/package.json +10 -0
  68. metadata +24 -9
  69. data/Rakefile +0 -16
  70. data/app/assets/javascripts/administrate-bootstrap-theme/flatpickr/flatpickr.js +0 -2673
  71. data/app/assets/javascripts/administrate-bootstrap-theme/theme.js +0 -22
  72. data/app/assets/stylesheets/administrate-bootstrap-theme/flatpickr/flatpickr.css +0 -791
@@ -1,28 +1,9 @@
1
- // from: node_modules/bootstrap/scss
2
- @import "bootstrap/bootstrap";
3
- // from: node_modules/flatpickr/dist/flatpickr.css
4
- @import "flatpickr/flatpickr.css";
5
- @import "selectize";
6
-
7
- @import "variables";
8
-
9
- @import "components/navigation";
10
- @import "components/content_header";
11
- @import "components/content_body";
12
- @import "components/form";
13
- @import "components/pagination";
14
-
15
1
  .app-container {
16
- display: flex;
17
- flex-wrap: nowrap;
18
- height: 100vh;
2
+ @extend .d-flex, .flex-nowrap, .vh-100;
19
3
  }
20
4
 
21
5
  .flashes {
22
- pointer-events: none;
23
- position: fixed;
24
- text-align: center;
25
- width: calc(100% - #{$navigation-width});
6
+ @extend .pe-none, .fixed-top, .text-center;
26
7
 
27
8
  > .flash {
28
9
  @extend .alert, .d-inline-block;
@@ -36,6 +17,8 @@
36
17
  .main-content {
37
18
  @extend .d-flex, .flex-column;
38
19
 
20
+ background-color: $main-content-bg;
21
+ color: $main-content-fg;
39
22
  overflow-y: scroll;
40
23
  width: calc(100% - #{$navigation-width});
41
24
  }
@@ -3,3 +3,7 @@ $navigation-bg: $dark !default;
3
3
  $navigation-bg-active: $primary !default;
4
4
  $navigation-fg: $light !default;
5
5
  $navigation-width: 250px !default;
6
+
7
+ // Main content
8
+ $main-content-bg: $gray-100 !default;
9
+ $main-content-fg: $gray-900 !default;
@@ -58,7 +58,6 @@
58
58
  }
59
59
 
60
60
  .accordion-item {
61
- margin-bottom: -$accordion-border-width;
62
61
  background-color: $accordion-bg;
63
62
  border: $accordion-border-width solid $accordion-border-color;
64
63
 
@@ -70,9 +69,12 @@
70
69
  }
71
70
  }
72
71
 
72
+ &:not(:first-of-type) {
73
+ border-top: 0;
74
+ }
75
+
73
76
  // Only set a border-radius on the last item if the accordion is collapsed
74
77
  &:last-of-type {
75
- margin-bottom: 0;
76
78
  @include border-bottom-radius($accordion-border-radius);
77
79
 
78
80
  .accordion-button {
@@ -13,6 +13,7 @@
13
13
  background-clip: border-box;
14
14
  border: $card-border-width solid $card-border-color;
15
15
  @include border-radius($card-border-radius);
16
+ @include box-shadow($card-box-shadow);
16
17
 
17
18
  > hr {
18
19
  margin-right: 0;
@@ -55,7 +56,7 @@
55
56
  }
56
57
 
57
58
  .card-subtitle {
58
- margin-top: -$card-title-spacer-y / 2;
59
+ margin-top: -$card-title-spacer-y * .5;
59
60
  margin-bottom: 0;
60
61
  }
61
62
 
@@ -65,7 +66,7 @@
65
66
 
66
67
  .card-link {
67
68
  &:hover {
68
- text-decoration: none;
69
+ text-decoration: if($link-hover-decoration == underline, none, null);
69
70
  }
70
71
 
71
72
  + .card-link {
@@ -106,9 +107,9 @@
106
107
  //
107
108
 
108
109
  .card-header-tabs {
109
- margin-right: -$card-cap-padding-x / 2;
110
+ margin-right: -$card-cap-padding-x * .5;
110
111
  margin-bottom: -$card-cap-padding-y;
111
- margin-left: -$card-cap-padding-x / 2;
112
+ margin-left: -$card-cap-padding-x * .5;
112
113
  border-bottom: 0;
113
114
 
114
115
  @if $nav-tabs-link-active-bg != $card-bg {
@@ -120,8 +121,8 @@
120
121
  }
121
122
 
122
123
  .card-header-pills {
123
- margin-right: -$card-cap-padding-x / 2;
124
- margin-left: -$card-cap-padding-x / 2;
124
+ margin-right: -$card-cap-padding-x * .5;
125
+ margin-left: -$card-cap-padding-x * .5;
125
126
  }
126
127
 
127
128
  // Card image
@@ -202,9 +202,9 @@
202
202
 
203
203
  .carousel-caption {
204
204
  position: absolute;
205
- right: (100% - $carousel-caption-width) / 2;
205
+ right: (100% - $carousel-caption-width) * .5;
206
206
  bottom: $carousel-caption-spacer;
207
- left: (100% - $carousel-caption-width) / 2;
207
+ left: (100% - $carousel-caption-width) * .5;
208
208
  padding-top: $carousel-caption-padding-y;
209
209
  padding-bottom: $carousel-caption-padding-y;
210
210
  color: $carousel-caption-color;
@@ -16,7 +16,6 @@
16
16
  // The dropdown menu
17
17
  .dropdown-menu {
18
18
  position: absolute;
19
- top: 100%;
20
19
  z-index: $zindex-dropdown;
21
20
  display: none; // none by default, but block on "open" of the menu
22
21
  min-width: $dropdown-min-width;
@@ -33,6 +32,7 @@
33
32
  @include box-shadow($dropdown-box-shadow);
34
33
 
35
34
  &[data-bs-popper] {
35
+ top: 100%;
36
36
  left: 0;
37
37
  margin-top: $dropdown-spacer;
38
38
  }
@@ -50,8 +50,8 @@
50
50
  --bs-position: start;
51
51
 
52
52
  &[data-bs-popper] {
53
- right: auto #{"/* rtl:ignore */"};
54
- left: 0 #{"/* rtl:ignore */"};
53
+ right: auto;
54
+ left: 0;
55
55
  }
56
56
  }
57
57
 
@@ -59,8 +59,8 @@
59
59
  --bs-position: end;
60
60
 
61
61
  &[data-bs-popper] {
62
- right: 0 #{"/* rtl:ignore */"};
63
- left: auto #{"/* rtl:ignore */"};
62
+ right: 0;
63
+ left: auto;
64
64
  }
65
65
  }
66
66
  }
@@ -83,15 +83,12 @@
83
83
  }
84
84
 
85
85
  .dropend {
86
- .dropdown-menu {
86
+ .dropdown-menu[data-bs-popper] {
87
87
  top: 0;
88
88
  right: auto;
89
89
  left: 100%;
90
-
91
- &[data-bs-popper] {
92
- margin-top: 0;
93
- margin-left: $dropdown-spacer;
94
- }
90
+ margin-top: 0;
91
+ margin-left: $dropdown-spacer;
95
92
  }
96
93
 
97
94
  .dropdown-toggle {
@@ -103,15 +100,12 @@
103
100
  }
104
101
 
105
102
  .dropstart {
106
- .dropdown-menu {
103
+ .dropdown-menu[data-bs-popper] {
107
104
  top: 0;
108
105
  right: 100%;
109
106
  left: auto;
110
-
111
- &[data-bs-popper] {
112
- margin-top: 0;
113
- margin-right: $dropdown-spacer;
114
- }
107
+ margin-top: 0;
108
+ margin-right: $dropdown-spacer;
115
109
  }
116
110
 
117
111
  .dropdown-toggle {
@@ -32,6 +32,41 @@
32
32
  }
33
33
  }
34
34
 
35
+ // Colors
36
+ @function to-rgb($value) {
37
+ @return red($value), green($value), blue($value);
38
+ }
39
+
40
+ @function rgba-css-var($identifier, $target) {
41
+ @return rgba(var(--#{$variable-prefix}#{$identifier}-rgb), var(--#{$variable-prefix}#{$target}-opacity));
42
+ }
43
+
44
+ // stylelint-disable scss/dollar-variable-pattern
45
+ @function map-loop($map, $func, $args...) {
46
+ $_map: ();
47
+
48
+ @each $key, $value in $map {
49
+ // allow to pass the $key and $value of the map as an function argument
50
+ $_args: ();
51
+ @each $arg in $args {
52
+ $_args: append($_args, if($arg == "$key", $key, if($arg == "$value", $value, $arg)));
53
+ }
54
+
55
+ $_map: map-merge($_map, ($key: call(get-function($func), $_args...)));
56
+ }
57
+
58
+ @return $_map;
59
+ }
60
+ // stylelint-enable scss/dollar-variable-pattern
61
+
62
+ @function varify($list) {
63
+ $result: null;
64
+ @each $entry in $list {
65
+ $result: append($result, var(--#{$variable-prefix}#{$entry}), space);
66
+ }
67
+ @return $result;
68
+ }
69
+
35
70
  // Internal Bootstrap function to turn maps into its negative variant.
36
71
  // It prefixes the keys with `n` and makes the value negative.
37
72
  @function negativify-map($map) {
@@ -55,6 +90,16 @@
55
90
  @return $result;
56
91
  }
57
92
 
93
+ // Merge multiple maps
94
+ @function map-merge-multiple($maps...) {
95
+ $merged-maps: ();
96
+
97
+ @each $map in $maps {
98
+ $merged-maps: map-merge($merged-maps, $map);
99
+ }
100
+ @return $merged-maps;
101
+ }
102
+
58
103
  // Replace `$search` with `$replace` in `$string`
59
104
  // Used on our SVG icon backgrounds for custom forms.
60
105
  //
@@ -95,7 +140,7 @@
95
140
  // Color contrast
96
141
  // See https://github.com/twbs/bootstrap/pull/30168
97
142
 
98
- // A list of pre-calculated numbers of pow(($value / 255 + .055) / 1.055, 2.4). (from 0 to 255)
143
+ // A list of pre-calculated numbers of pow(divide((divide($value, 255) + .055), 1.055), 2.4). (from 0 to 255)
99
144
  // stylelint-disable-next-line scss/dollar-variable-default, scss/dollar-variable-pattern
100
145
  $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003 .0033 .0037 .004 .0044 .0048 .0052 .0056 .006 .0065 .007 .0075 .008 .0086 .0091 .0097 .0103 .011 .0116 .0123 .013 .0137 .0144 .0152 .016 .0168 .0176 .0185 .0194 .0203 .0212 .0222 .0232 .0242 .0252 .0262 .0273 .0284 .0296 .0307 .0319 .0331 .0343 .0356 .0369 .0382 .0395 .0409 .0423 .0437 .0452 .0467 .0482 .0497 .0513 .0529 .0545 .0561 .0578 .0595 .0612 .063 .0648 .0666 .0685 .0704 .0723 .0742 .0762 .0782 .0802 .0823 .0844 .0865 .0887 .0908 .0931 .0953 .0976 .0999 .1022 .1046 .107 .1095 .1119 .1144 .117 .1195 .1221 .1248 .1274 .1301 .1329 .1356 .1384 .1413 .1441 .147 .15 .1529 .1559 .159 .162 .1651 .1683 .1714 .1746 .1779 .1812 .1845 .1878 .1912 .1946 .1981 .2016 .2051 .2086 .2122 .2159 .2195 .2232 .227 .2307 .2346 .2384 .2423 .2462 .2502 .2542 .2582 .2623 .2664 .2705 .2747 .2789 .2831 .2874 .2918 .2961 .3005 .305 .3095 .314 .3185 .3231 .3278 .3325 .3372 .3419 .3467 .3515 .3564 .3613 .3663 .3712 .3763 .3813 .3864 .3916 .3968 .402 .4072 .4125 .4179 .4233 .4287 .4342 .4397 .4452 .4508 .4564 .4621 .4678 .4735 .4793 .4851 .491 .4969 .5029 .5089 .5149 .521 .5271 .5333 .5395 .5457 .552 .5583 .5647 .5711 .5776 .5841 .5906 .5972 .6038 .6105 .6172 .624 .6308 .6376 .6445 .6514 .6584 .6654 .6724 .6795 .6867 .6939 .7011 .7084 .7157 .7231 .7305 .7379 .7454 .7529 .7605 .7682 .7758 .7835 .7913 .7991 .807 .8148 .8228 .8308 .8388 .8469 .855 .8632 .8714 .8796 .8879 .8963 .9047 .9131 .9216 .9301 .9387 .9473 .956 .9647 .9734 .9823 .9911 1;
101
146
 
@@ -123,7 +168,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
123
168
  $l1: luminance($background);
124
169
  $l2: luminance(opaque($background, $foreground));
125
170
 
126
- @return if($l1 > $l2, ($l1 + .05) / ($l2 + .05), ($l2 + .05) / ($l1 + .05));
171
+ @return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));
127
172
  }
128
173
 
129
174
  // Return WCAG2.0 relative luminance
@@ -137,7 +182,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
137
182
  );
138
183
 
139
184
  @each $name, $value in $rgb {
140
- $value: if($value / 255 < .03928, $value / 255 / 12.92, nth($_luminance-list, $value + 1));
185
+ $value: if(divide($value, 255) < .03928, divide(divide($value, 255), 12.92), nth($_luminance-list, $value + 1));
141
186
  $rgb: map-merge($rgb, ($name: $value));
142
187
  }
143
188
 
@@ -201,5 +246,51 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
201
246
  @return $value1 - $value2;
202
247
  }
203
248
 
249
+ @if type-of($value2) != number {
250
+ $value2: unquote("(") + $value2 + unquote(")");
251
+ }
252
+
204
253
  @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2);
205
254
  }
255
+
256
+ @function divide($dividend, $divisor, $precision: 10) {
257
+ $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
258
+ $dividend: abs($dividend);
259
+ $divisor: abs($divisor);
260
+ @if $dividend == 0 {
261
+ @return 0;
262
+ }
263
+ @if $divisor == 0 {
264
+ @error "Cannot divide by 0";
265
+ }
266
+ $remainder: $dividend;
267
+ $result: 0;
268
+ $factor: 10;
269
+ @while ($remainder > 0 and $precision >= 0) {
270
+ $quotient: 0;
271
+ @while ($remainder >= $divisor) {
272
+ $remainder: $remainder - $divisor;
273
+ $quotient: $quotient + 1;
274
+ }
275
+ $result: $result * 10 + $quotient;
276
+ $factor: $factor * .1;
277
+ $remainder: $remainder * 10;
278
+ $precision: $precision - 1;
279
+ @if ($precision < 0 and $remainder >= $divisor * 5) {
280
+ $result: $result + 1;
281
+ }
282
+ }
283
+ $result: $result * $factor * $sign;
284
+ $dividend-unit: unit($dividend);
285
+ $divisor-unit: unit($divisor);
286
+ $unit-map: (
287
+ "px": 1px,
288
+ "rem": 1rem,
289
+ "em": 1em,
290
+ "%": 1%
291
+ );
292
+ @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
293
+ $result: $result * map-get($unit-map, $dividend-unit);
294
+ }
295
+ @return $result;
296
+ }
@@ -12,6 +12,17 @@
12
12
  }
13
13
  }
14
14
 
15
+ @if $enable-cssgrid {
16
+ .grid {
17
+ display: grid;
18
+ grid-template-rows: repeat(var(--#{$variable-prefix}rows, 1), 1fr);
19
+ grid-template-columns: repeat(var(--#{$variable-prefix}columns, #{$grid-columns}), 1fr);
20
+ gap: var(--#{$variable-prefix}gap, #{$grid-gutter-width});
21
+
22
+ @include make-cssgrid();
23
+ }
24
+ }
25
+
15
26
 
16
27
  // Columns
17
28
  //
@@ -2,6 +2,8 @@
2
2
  @import "helpers/colored-links";
3
3
  @import "helpers/ratio";
4
4
  @import "helpers/position";
5
+ @import "helpers/stacks";
5
6
  @import "helpers/visually-hidden";
6
7
  @import "helpers/stretched-link";
7
8
  @import "helpers/text-truncation";
9
+ @import "helpers/vr";
@@ -32,7 +32,7 @@
32
32
  }
33
33
 
34
34
  .figure-img {
35
- margin-bottom: $spacer / 2;
35
+ margin-bottom: $spacer * .5;
36
36
  line-height: 1;
37
37
  }
38
38
 
@@ -163,12 +163,12 @@
163
163
  // Organizationally, this must come after the `:hover` states.
164
164
 
165
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($alert-color-scale));
166
+ $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);
167
+ $list-group-variant-color: shift-color($value, $list-group-item-color-scale);
168
+ @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {
169
+ $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));
170
170
  }
171
171
 
172
- @include list-group-item-variant($state, $list-group-background, $list-group-color);
172
+ @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);
173
173
  }
174
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";
@@ -21,6 +22,7 @@
21
22
 
22
23
  // Components
23
24
  @import "mixins/alert";
25
+ @import "mixins/backdrop";
24
26
  @import "mixins/buttons";
25
27
  @import "mixins/caret";
26
28
  @import "mixins/pagination";
@@ -4,16 +4,6 @@
4
4
  // .modal-content - actual modal w/ bg and corners and stuff
5
5
 
6
6
 
7
- .modal-open {
8
- // Kill the scroll on the body
9
- overflow: hidden;
10
-
11
- .modal {
12
- overflow-x: hidden;
13
- overflow-y: auto;
14
- }
15
- }
16
-
17
7
  // Container that the modal scrolls within
18
8
  .modal {
19
9
  position: fixed;
@@ -23,7 +13,8 @@
23
13
  display: none;
24
14
  width: 100%;
25
15
  height: 100%;
26
- overflow: hidden;
16
+ overflow-x: hidden;
17
+ overflow-y: auto;
27
18
  // Prevent Chrome on Windows from adding a focus outline. For details, see
28
19
  // https://github.com/twbs/bootstrap/pull/10951.
29
20
  outline: 0;
@@ -94,17 +85,7 @@
94
85
 
95
86
  // Modal background
96
87
  .modal-backdrop {
97
- position: fixed;
98
- top: 0;
99
- left: 0;
100
- z-index: $zindex-modal-backdrop;
101
- width: 100vw;
102
- height: 100vh;
103
- background-color: $modal-backdrop-bg;
104
-
105
- // Fade for backdrop
106
- &.fade { opacity: 0; }
107
- &.show { opacity: $modal-backdrop-opacity; }
88
+ @include overlay-backdrop($zindex-modal-backdrop, $modal-backdrop-bg, $modal-backdrop-opacity);
108
89
  }
109
90
 
110
91
  // Modal header
@@ -119,8 +100,8 @@
119
100
  @include border-top-radius($modal-content-inner-border-radius);
120
101
 
121
102
  .btn-close {
122
- padding: ($modal-header-padding-y / 2) ($modal-header-padding-x / 2);
123
- margin: ($modal-header-padding-y / -2) ($modal-header-padding-x / -2) ($modal-header-padding-y / -2) auto;
103
+ padding: ($modal-header-padding-y * .5) ($modal-header-padding-x * .5);
104
+ margin: ($modal-header-padding-y * -.5) ($modal-header-padding-x * -.5) ($modal-header-padding-y * -.5) auto;
124
105
  }
125
106
  }
126
107
 
@@ -147,7 +128,7 @@
147
128
  flex-shrink: 0;
148
129
  align-items: center; // vertically center
149
130
  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
150
- padding: $modal-inner-padding - $modal-footer-margin-between / 2;
131
+ padding: $modal-inner-padding - $modal-footer-margin-between * .5;
151
132
  border-top: $modal-footer-border-width solid $modal-footer-border-color;
152
133
  @include border-bottom-radius($modal-content-inner-border-radius);
153
134
 
@@ -155,19 +136,10 @@
155
136
  // This solution is far from ideal because of the universal selector usage,
156
137
  // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
157
138
  > * {
158
- margin: $modal-footer-margin-between / 2;
139
+ margin: $modal-footer-margin-between * .5;
159
140
  }
160
141
  }
161
142
 
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
143
  // Scale up the modal
172
144
  @include media-breakpoint-up(sm) {
173
145
  // Automatically set modal's width for larger viewports
@@ -193,13 +193,42 @@
193
193
  .navbar-toggler {
194
194
  display: none;
195
195
  }
196
+
197
+ .offcanvas-header {
198
+ display: none;
199
+ }
200
+
201
+ .offcanvas {
202
+ position: inherit;
203
+ bottom: 0;
204
+ z-index: 1000;
205
+ flex-grow: 1;
206
+ visibility: visible !important; // stylelint-disable-line declaration-no-important
207
+ background-color: transparent;
208
+ border-right: 0;
209
+ border-left: 0;
210
+ @include transition(none);
211
+ transform: none;
212
+ }
213
+ .offcanvas-top,
214
+ .offcanvas-bottom {
215
+ height: auto;
216
+ border-top: 0;
217
+ border-bottom: 0;
218
+ }
219
+
220
+ .offcanvas-body {
221
+ display: flex;
222
+ flex-grow: 0;
223
+ padding: 0;
224
+ overflow-y: visible;
225
+ }
196
226
  }
197
227
  }
198
228
  }
199
229
  }
200
230
  // scss-docs-end navbar-expand-loop
201
231
 
202
-
203
232
  // Navbar themes
204
233
  //
205
234
  // Styles for switching between navbars with light or dark background.
@@ -14,14 +14,21 @@
14
14
  @include transition(transform $offcanvas-transition-duration ease-in-out);
15
15
  }
16
16
 
17
+ .offcanvas-backdrop {
18
+ @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);
19
+ }
20
+
17
21
  .offcanvas-header {
18
22
  display: flex;
23
+ align-items: center;
19
24
  justify-content: space-between;
20
25
  padding: $offcanvas-padding-y $offcanvas-padding-x;
21
26
 
22
27
  .btn-close {
23
- padding: ($offcanvas-padding-y / 2) ($offcanvas-padding-x / 2);
24
- margin: ($offcanvas-padding-y / -2) ($offcanvas-padding-x / -2) ($offcanvas-padding-y / -2) auto;
28
+ padding: ($offcanvas-padding-y * .5) ($offcanvas-padding-x * .5);
29
+ margin-top: $offcanvas-padding-y * -.5;
30
+ margin-right: $offcanvas-padding-x * -.5;
31
+ margin-bottom: $offcanvas-padding-y * -.5;
25
32
  }
26
33
  }
27
34
 
@@ -52,6 +59,16 @@
52
59
  transform: translateX(100%);
53
60
  }
54
61
 
62
+ .offcanvas-top {
63
+ top: 0;
64
+ right: 0;
65
+ left: 0;
66
+ height: $offcanvas-vertical-height;
67
+ max-height: 100%;
68
+ border-bottom: $offcanvas-border-width solid $offcanvas-border-color;
69
+ transform: translateY(-100%);
70
+ }
71
+
55
72
  .offcanvas-bottom {
56
73
  right: 0;
57
74
  left: 0;
@@ -64,14 +81,3 @@
64
81
  .offcanvas.show {
65
82
  transform: none;
66
83
  }
67
-
68
- .offcanvas-backdrop::before {
69
- position: fixed;
70
- top: 0;
71
- left: 0;
72
- z-index: $zindex-offcanvas - 1;
73
- width: 100vw;
74
- height: 100vh;
75
- content: "";
76
- background-color: $offcanvas-body-backdrop-color;
77
- }
@@ -0,0 +1,51 @@
1
+ .placeholder {
2
+ display: inline-block;
3
+ min-height: 1em;
4
+ vertical-align: middle;
5
+ cursor: wait;
6
+ background-color: currentColor;
7
+ opacity: $placeholder-opacity-max;
8
+
9
+ &.btn::before {
10
+ display: inline-block;
11
+ content: "";
12
+ }
13
+ }
14
+
15
+ // Sizing
16
+ .placeholder-xs {
17
+ min-height: .6em;
18
+ }
19
+
20
+ .placeholder-sm {
21
+ min-height: .8em;
22
+ }
23
+
24
+ .placeholder-lg {
25
+ min-height: 1.2em;
26
+ }
27
+
28
+ // Animation
29
+ .placeholder-glow {
30
+ .placeholder {
31
+ animation: placeholder-glow 2s ease-in-out infinite;
32
+ }
33
+ }
34
+
35
+ @keyframes placeholder-glow {
36
+ 50% {
37
+ opacity: $placeholder-opacity-min;
38
+ }
39
+ }
40
+
41
+ .placeholder-wave {
42
+ mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);
43
+ mask-size: 200% 100%;
44
+ animation: placeholder-wave 2s linear infinite;
45
+ }
46
+
47
+ @keyframes placeholder-wave {
48
+ 100% {
49
+ mask-position: -200% 0%;
50
+ }
51
+ }