administrate-bootstrap-theme 0.1.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -31
  3. data/app/assets/javascripts/administrate-bootstrap-theme/bootstrap.bundle.js +6780 -0
  4. data/app/assets/stylesheets/administrate-bootstrap-theme/_base.scss +2 -10
  5. data/app/assets/stylesheets/administrate-bootstrap-theme/_variables.scss +8 -1
  6. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_accordion.scss +4 -2
  7. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_alert.scss +0 -0
  8. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_badge.scss +0 -0
  9. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_breadcrumb.scss +0 -0
  10. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_button-group.scss +0 -0
  11. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_buttons.scss +0 -0
  12. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_card.scss +7 -6
  13. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_carousel.scss +2 -2
  14. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_close.scss +0 -0
  15. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_containers.scss +0 -0
  16. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_dropdown.scss +11 -17
  17. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_forms.scss +0 -0
  18. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_functions.scss +94 -3
  19. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_grid.scss +33 -0
  20. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_helpers.scss +2 -0
  21. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_images.scss +1 -1
  22. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_list-group.scss +5 -5
  23. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_mixins.scss +2 -0
  24. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_modal.scss +7 -35
  25. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_nav.scss +0 -0
  26. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_navbar.scss +30 -1
  27. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_offcanvas.scss +19 -13
  28. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_pagination.scss +0 -0
  29. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_placeholders.scss +51 -0
  30. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_popover.scss +10 -10
  31. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_progress.scss +0 -0
  32. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_reboot.scss +12 -8
  33. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/_root.scss +53 -0
  34. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_spinners.scss +2 -2
  35. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_tables.scss +1 -0
  36. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_toasts.scss +3 -3
  37. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_tooltip.scss +4 -4
  38. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_transitions.scss +6 -0
  39. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_type.scss +0 -0
  40. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_utilities.scss +44 -8
  41. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/_variables.scss +193 -28
  42. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/bootstrap-grid.scss +1 -1
  43. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/bootstrap-reboot.scss +1 -1
  44. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/bootstrap-utilities.scss +1 -1
  45. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/bootstrap.scss +2 -1
  46. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_floating-labels.scss +3 -1
  47. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_form-check.scss +1 -1
  48. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_form-control.scss +1 -1
  49. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_form-range.scss +1 -1
  50. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_form-select.scss +3 -0
  51. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_form-text.scss +0 -0
  52. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_input-group.scss +0 -0
  53. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_labels.scss +0 -0
  54. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/forms/_validation.scss +0 -0
  55. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_clearfix.scss +0 -0
  56. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_colored-links.scss +0 -0
  57. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_position.scss +0 -0
  58. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_ratio.scss +0 -0
  59. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/helpers/_stacks.scss +15 -0
  60. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_stretched-link.scss +0 -0
  61. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_text-truncation.scss +0 -0
  62. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/helpers/_visually-hidden.scss +0 -0
  63. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/helpers/_vr.scss +8 -0
  64. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_alert.scss +0 -0
  65. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_backdrop.scss +14 -0
  66. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_border-radius.scss +0 -0
  67. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_box-shadow.scss +0 -0
  68. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_breakpoints.scss +0 -0
  69. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_buttons.scss +1 -1
  70. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_caret.scss +0 -0
  71. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_clearfix.scss +0 -0
  72. data/app/assets/stylesheets/administrate-bootstrap-theme/bootstrap/mixins/_color-scheme.scss +7 -0
  73. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_container.scss +0 -0
  74. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_deprecate.scss +0 -0
  75. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_forms.scss +15 -5
  76. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_gradients.scss +0 -0
  77. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_grid.scss +40 -10
  78. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_image.scss +0 -0
  79. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_list-group.scss +0 -0
  80. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_lists.scss +0 -0
  81. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_pagination.scss +0 -0
  82. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_reset-text.scss +0 -0
  83. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_resize.scss +0 -0
  84. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_table-variants.scss +0 -0
  85. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_text-truncate.scss +0 -0
  86. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_transition.scss +0 -0
  87. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_utilities.scss +27 -6
  88. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/mixins/_visually-hidden.scss +0 -0
  89. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/utilities/_api.scss +0 -0
  90. data/{node_modules/bootstrap/scss → app/assets/stylesheets/administrate-bootstrap-theme/bootstrap}/vendor/_rfs.scss +55 -13
  91. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_autumn.scss +8 -0
  92. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_default.scss +8 -0
  93. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_forest.scss +9 -0
  94. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_industrial.scss +8 -0
  95. data/app/assets/stylesheets/administrate-bootstrap-theme/colors/_water.scss +8 -0
  96. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_body.scss +21 -1
  97. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_content_header.scss +1 -1
  98. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_form.scss +2 -0
  99. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_navigation.scss +22 -3
  100. data/app/assets/stylesheets/administrate-bootstrap-theme/components/_pagination.scss +1 -1
  101. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_lato.scss +5 -0
  102. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_montserrat.scss +5 -0
  103. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_open_sans.scss +5 -0
  104. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_roboto.scss +5 -0
  105. data/app/assets/stylesheets/administrate-bootstrap-theme/fonts/_source_sans_pro.scss +5 -0
  106. data/app/assets/stylesheets/administrate-bootstrap-theme/theme.scss +10 -51
  107. data/lib/administrate-bootstrap-theme/engine.rb +0 -2
  108. data/lib/administrate-bootstrap-theme/version.rb +2 -1
  109. data/lib/generators/administrate_bootstrap_theme/install/USAGE +10 -0
  110. data/lib/generators/administrate_bootstrap_theme/install/install_generator.rb +33 -0
  111. data/package.json +10 -0
  112. metadata +113 -199
  113. data/Rakefile +0 -16
  114. data/app/assets/javascripts/administrate-bootstrap-theme/theme.js +0 -2
  115. data/node_modules/bootstrap/js/src/alert.js +0 -141
  116. data/node_modules/bootstrap/js/src/base-component.js +0 -46
  117. data/node_modules/bootstrap/js/src/button.js +0 -95
  118. data/node_modules/bootstrap/js/src/carousel.js +0 -624
  119. data/node_modules/bootstrap/js/src/collapse.js +0 -410
  120. data/node_modules/bootstrap/js/src/dom/data.js +0 -57
  121. data/node_modules/bootstrap/js/src/dom/event-handler.js +0 -331
  122. data/node_modules/bootstrap/js/src/dom/manipulator.js +0 -80
  123. data/node_modules/bootstrap/js/src/dom/selector-engine.js +0 -75
  124. data/node_modules/bootstrap/js/src/dropdown.js +0 -543
  125. data/node_modules/bootstrap/js/src/modal.js +0 -582
  126. data/node_modules/bootstrap/js/src/offcanvas.js +0 -279
  127. data/node_modules/bootstrap/js/src/popover.js +0 -171
  128. data/node_modules/bootstrap/js/src/scrollspy.js +0 -319
  129. data/node_modules/bootstrap/js/src/tab.js +0 -220
  130. data/node_modules/bootstrap/js/src/toast.js +0 -219
  131. data/node_modules/bootstrap/js/src/tooltip.js +0 -802
  132. data/node_modules/bootstrap/js/src/util/index.js +0 -253
  133. data/node_modules/bootstrap/js/src/util/sanitizer.js +0 -127
  134. data/node_modules/bootstrap/js/src/util/scrollbar.js +0 -70
  135. data/node_modules/bootstrap/scss/_grid.scss +0 -22
  136. data/node_modules/bootstrap/scss/_root.scss +0 -16
@@ -1,13 +1,3 @@
1
- @import "bootstrap/scss/bootstrap";
2
-
3
- @import "variables";
4
-
5
- @import "components/navigation";
6
- @import "components/content_header";
7
- @import "components/content_body";
8
- @import "components/form";
9
- @import "components/pagination";
10
-
11
1
  .app-container {
12
2
  display: flex;
13
3
  flex-wrap: nowrap;
@@ -32,6 +22,8 @@
32
22
  .main-content {
33
23
  @extend .d-flex, .flex-column;
34
24
 
25
+ background-color: $main-content-bg;
26
+ color: $main-content-fg;
35
27
  overflow-y: scroll;
36
28
  width: calc(100% - #{$navigation-width});
37
29
  }
@@ -1,2 +1,9 @@
1
-
1
+ // Navigation
2
+ $navigation-bg: $dark !default;
3
+ $navigation-bg-active: $primary !default;
4
+ $navigation-fg: $light !default;
2
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
+ }
@@ -0,0 +1,33 @@
1
+ // Row
2
+ //
3
+ // Rows contain your columns.
4
+
5
+ @if $enable-grid-classes {
6
+ .row {
7
+ @include make-row();
8
+
9
+ > * {
10
+ @include make-col-ready();
11
+ }
12
+ }
13
+ }
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
+
26
+
27
+ // Columns
28
+ //
29
+ // Common styles for small and large grid columns
30
+
31
+ @if $enable-grid-classes {
32
+ @include make-grid-columns();
33
+ }
@@ -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
+ }