bootstrap 4.3.1 → 5.3.0

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 (179) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +28 -5
  5. data/assets/javascripts/bootstrap/alert.js +54 -163
  6. data/assets/javascripts/bootstrap/base-component.js +83 -0
  7. data/assets/javascripts/bootstrap/button.js +44 -152
  8. data/assets/javascripts/bootstrap/carousel.js +289 -569
  9. data/assets/javascripts/bootstrap/collapse.js +170 -349
  10. data/assets/javascripts/bootstrap/dom/data.js +62 -0
  11. data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
  12. data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
  13. data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
  14. data/assets/javascripts/bootstrap/dropdown.js +303 -496
  15. data/assets/javascripts/bootstrap/modal.js +229 -559
  16. data/assets/javascripts/bootstrap/offcanvas.js +245 -0
  17. data/assets/javascripts/bootstrap/popover.js +61 -226
  18. data/assets/javascripts/bootstrap/scrollspy.js +217 -317
  19. data/assets/javascripts/bootstrap/tab.js +220 -212
  20. data/assets/javascripts/bootstrap/toast.js +145 -229
  21. data/assets/javascripts/bootstrap/tooltip.js +421 -782
  22. data/assets/javascripts/bootstrap/util/backdrop.js +139 -0
  23. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  24. data/assets/javascripts/bootstrap/util/config.js +67 -0
  25. data/assets/javascripts/bootstrap/util/focustrap.js +113 -0
  26. data/assets/javascripts/bootstrap/util/index.js +281 -0
  27. data/assets/javascripts/bootstrap/util/sanitizer.js +110 -0
  28. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  29. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  30. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  31. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  32. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  33. data/assets/javascripts/bootstrap-sprockets.js +23 -7
  34. data/assets/javascripts/bootstrap.js +3690 -3639
  35. data/assets/javascripts/bootstrap.min.js +4 -4
  36. data/assets/stylesheets/_bootstrap-grid.scss +53 -20
  37. data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
  38. data/assets/stylesheets/_bootstrap.scss +21 -13
  39. data/assets/stylesheets/bootstrap/_accordion.scss +158 -0
  40. data/assets/stylesheets/bootstrap/_alert.scss +32 -15
  41. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  42. data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -24
  43. data/assets/stylesheets/bootstrap/_button-group.scss +27 -48
  44. data/assets/stylesheets/bootstrap/_buttons.scss +139 -69
  45. data/assets/stylesheets/bootstrap/_card.scss +91 -141
  46. data/assets/stylesheets/bootstrap/_carousel.scss +86 -39
  47. data/assets/stylesheets/bootstrap/_close.scss +51 -29
  48. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  49. data/assets/stylesheets/bootstrap/_dropdown.scss +131 -72
  50. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  51. data/assets/stylesheets/bootstrap/_functions.scss +244 -28
  52. data/assets/stylesheets/bootstrap/_grid.scss +18 -31
  53. data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
  54. data/assets/stylesheets/bootstrap/_images.scss +3 -3
  55. data/assets/stylesheets/bootstrap/_list-group.scss +101 -53
  56. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  57. data/assets/stylesheets/bootstrap/_mixins.scss +13 -18
  58. data/assets/stylesheets/bootstrap/_modal.scss +120 -112
  59. data/assets/stylesheets/bootstrap/_nav.scss +113 -24
  60. data/assets/stylesheets/bootstrap/_navbar.scss +145 -150
  61. data/assets/stylesheets/bootstrap/_offcanvas.scss +146 -0
  62. data/assets/stylesheets/bootstrap/_pagination.scss +74 -38
  63. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  64. data/assets/stylesheets/bootstrap/_popover.scss +99 -74
  65. data/assets/stylesheets/bootstrap/_progress.scss +40 -15
  66. data/assets/stylesheets/bootstrap/_reboot.scss +342 -215
  67. data/assets/stylesheets/bootstrap/_root.scss +174 -9
  68. data/assets/stylesheets/bootstrap/_spinners.scss +52 -22
  69. data/assets/stylesheets/bootstrap/_tables.scss +101 -115
  70. data/assets/stylesheets/bootstrap/_toasts.scss +54 -25
  71. data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
  72. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  73. data/assets/stylesheets/bootstrap/_type.scss +42 -61
  74. data/assets/stylesheets/bootstrap/_utilities.scss +806 -17
  75. data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
  76. data/assets/stylesheets/bootstrap/_variables.scss +1235 -615
  77. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +19 -0
  78. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +94 -0
  79. data/assets/stylesheets/bootstrap/forms/_form-check.scss +188 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  82. data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
  83. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  84. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  85. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  86. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  87. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +8 -0
  88. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
  89. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  90. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  91. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  92. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  93. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  94. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  95. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  96. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  97. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  98. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
  99. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  100. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  101. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +37 -22
  102. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  103. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  104. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -97
  105. data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
  106. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  107. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  108. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  109. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  110. data/assets/stylesheets/bootstrap/mixins/_forms.scss +77 -116
  111. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  112. data/assets/stylesheets/bootstrap/mixins/_grid.scss +133 -33
  113. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  114. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
  115. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  116. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  117. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  118. data/assets/stylesheets/bootstrap/mixins/_transition.scss +18 -8
  119. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  120. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
  121. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  122. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +276 -132
  123. data/bootstrap.gemspec +4 -6
  124. data/lib/bootstrap/version.rb +2 -2
  125. data/tasks/updater/js.rb +31 -7
  126. data/tasks/updater/network.rb +10 -4
  127. data/tasks/updater/scss.rb +1 -1
  128. data/tasks/updater.rb +2 -2
  129. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  130. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  131. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  132. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  133. data/test/dummy_rails/app/views/pages/root.html +89 -0
  134. data/test/dummy_rails/config/application.rb +0 -3
  135. data/test/gemfiles/rails_5_2.gemfile +8 -0
  136. data/test/gemfiles/rails_6_0.gemfile +7 -0
  137. data/test/gemfiles/rails_6_1.gemfile +7 -0
  138. data/test/gemfiles/rails_7_0.gemfile +7 -0
  139. data/test/support/dummy_rails_integration.rb +3 -1
  140. data/test/test_helper.rb +18 -12
  141. metadata +86 -84
  142. data/.travis.yml +0 -17
  143. data/assets/javascripts/bootstrap/util.js +0 -171
  144. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  145. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  146. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  147. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  148. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  149. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  150. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  151. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  152. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  153. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  154. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  155. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  156. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -33
  157. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  158. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  159. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  160. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  161. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  162. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  163. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  164. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  165. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  166. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  167. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  168. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  169. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  170. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  171. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  172. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  173. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  174. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  175. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  176. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  177. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  178. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  179. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,29 +1,46 @@
1
+ // stylelint-disable function-disallowed-list
2
+
1
3
  // .modal-open - body class for killing the scroll
2
4
  // .modal - container to scroll within
3
5
  // .modal-dialog - positioning shell for the actual modal
4
6
  // .modal-content - actual modal w/ bg and corners and stuff
5
7
 
6
8
 
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
9
  // Container that the modal scrolls within
18
10
  .modal {
11
+ // scss-docs-start modal-css-vars
12
+ --#{$prefix}modal-zindex: #{$zindex-modal};
13
+ --#{$prefix}modal-width: #{$modal-md};
14
+ --#{$prefix}modal-padding: #{$modal-inner-padding};
15
+ --#{$prefix}modal-margin: #{$modal-dialog-margin};
16
+ --#{$prefix}modal-color: #{$modal-content-color};
17
+ --#{$prefix}modal-bg: #{$modal-content-bg};
18
+ --#{$prefix}modal-border-color: #{$modal-content-border-color};
19
+ --#{$prefix}modal-border-width: #{$modal-content-border-width};
20
+ --#{$prefix}modal-border-radius: #{$modal-content-border-radius};
21
+ --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};
22
+ --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};
23
+ --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};
24
+ --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};
25
+ --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y
26
+ --#{$prefix}modal-header-border-color: #{$modal-header-border-color};
27
+ --#{$prefix}modal-header-border-width: #{$modal-header-border-width};
28
+ --#{$prefix}modal-title-line-height: #{$modal-title-line-height};
29
+ --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};
30
+ --#{$prefix}modal-footer-bg: #{$modal-footer-bg};
31
+ --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};
32
+ --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};
33
+ // scss-docs-end modal-css-vars
34
+
19
35
  position: fixed;
20
36
  top: 0;
21
37
  left: 0;
22
- z-index: $zindex-modal;
38
+ z-index: var(--#{$prefix}modal-zindex);
23
39
  display: none;
24
40
  width: 100%;
25
41
  height: 100%;
26
- overflow: hidden;
42
+ overflow-x: hidden;
43
+ overflow-y: auto;
27
44
  // Prevent Chrome on Windows from adding a focus outline. For details, see
28
45
  // https://github.com/twbs/bootstrap/pull/10951.
29
46
  outline: 0;
@@ -36,7 +53,7 @@
36
53
  .modal-dialog {
37
54
  position: relative;
38
55
  width: auto;
39
- margin: $modal-dialog-margin;
56
+ margin: var(--#{$prefix}modal-margin);
40
57
  // allow clicks to pass through for custom click handling to close modal
41
58
  pointer-events: none;
42
59
 
@@ -48,22 +65,21 @@
48
65
  .modal.show & {
49
66
  transform: $modal-show-transform;
50
67
  }
68
+
69
+ // When trying to close, animate focus to scale
70
+ .modal.modal-static & {
71
+ transform: $modal-scale-transform;
72
+ }
51
73
  }
52
74
 
53
75
  .modal-dialog-scrollable {
54
- display: flex; // IE10/11
55
- max-height: calc(100% - #{$modal-dialog-margin * 2});
76
+ height: calc(100% - var(--#{$prefix}modal-margin) * 2);
56
77
 
57
78
  .modal-content {
58
- max-height: calc(100vh - #{$modal-dialog-margin * 2}); // IE10/11
79
+ max-height: 100%;
59
80
  overflow: hidden;
60
81
  }
61
82
 
62
- .modal-header,
63
- .modal-footer {
64
- flex-shrink: 0;
65
- }
66
-
67
83
  .modal-body {
68
84
  overflow-y: auto;
69
85
  }
@@ -72,29 +88,7 @@
72
88
  .modal-dialog-centered {
73
89
  display: flex;
74
90
  align-items: center;
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
- }
91
+ min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);
98
92
  }
99
93
 
100
94
  // Actual modal
@@ -104,53 +98,49 @@
104
98
  flex-direction: column;
105
99
  width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
106
100
  // counteract the pointer-events: none; in the .modal-dialog
107
- color: $modal-content-color;
101
+ color: var(--#{$prefix}modal-color);
108
102
  pointer-events: auto;
109
- background-color: $modal-content-bg;
103
+ background-color: var(--#{$prefix}modal-bg);
110
104
  background-clip: padding-box;
111
- border: $modal-content-border-width solid $modal-content-border-color;
112
- @include border-radius($modal-content-border-radius);
113
- @include box-shadow($modal-content-box-shadow-xs);
105
+ border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);
106
+ @include border-radius(var(--#{$prefix}modal-border-radius));
107
+ @include box-shadow(var(--#{$prefix}modal-box-shadow));
114
108
  // Remove focus outline from opened modal
115
109
  outline: 0;
116
110
  }
117
111
 
118
112
  // Modal background
119
113
  .modal-backdrop {
120
- position: fixed;
121
- top: 0;
122
- left: 0;
123
- z-index: $zindex-modal-backdrop;
124
- width: 100vw;
125
- height: 100vh;
126
- background-color: $modal-backdrop-bg;
127
-
128
- // Fade for backdrop
129
- &.fade { opacity: 0; }
130
- &.show { opacity: $modal-backdrop-opacity; }
114
+ // scss-docs-start modal-backdrop-css-vars
115
+ --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};
116
+ --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};
117
+ --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};
118
+ // scss-docs-end modal-backdrop-css-vars
119
+
120
+ @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));
131
121
  }
132
122
 
133
123
  // Modal header
134
124
  // Top section of the modal w/ title and dismiss
135
125
  .modal-header {
136
126
  display: flex;
137
- align-items: flex-start; // so the close btn always stays on the upper right corner
127
+ flex-shrink: 0;
128
+ align-items: center;
138
129
  justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
139
- padding: $modal-header-padding;
140
- border-bottom: $modal-header-border-width solid $modal-header-border-color;
141
- @include border-top-radius($modal-content-border-radius);
142
-
143
- .close {
144
- padding: $modal-header-padding;
145
- // auto on the left force icon to the right even when there is no .modal-title
146
- margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;
130
+ padding: var(--#{$prefix}modal-header-padding);
131
+ border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);
132
+ @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));
133
+
134
+ .btn-close {
135
+ padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);
136
+ margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;
147
137
  }
148
138
  }
149
139
 
150
140
  // Title text within header
151
141
  .modal-title {
152
142
  margin-bottom: 0;
153
- line-height: $modal-title-line-height;
143
+ line-height: var(--#{$prefix}modal-title-line-height);
154
144
  }
155
145
 
156
146
  // Modal body
@@ -158,72 +148,90 @@
158
148
  .modal-body {
159
149
  position: relative;
160
150
  // Enable `flex-grow: 1` so that the body take up as much space as possible
161
- // when should there be a fixed height on `.modal-dialog`.
151
+ // when there should be a fixed height on `.modal-dialog`.
162
152
  flex: 1 1 auto;
163
- padding: $modal-inner-padding;
153
+ padding: var(--#{$prefix}modal-padding);
164
154
  }
165
155
 
166
156
  // Footer (for actions)
167
157
  .modal-footer {
168
158
  display: flex;
159
+ flex-shrink: 0;
160
+ flex-wrap: wrap;
169
161
  align-items: center; // vertically center
170
162
  justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
171
- padding: $modal-inner-padding;
172
- border-top: $modal-footer-border-width solid $modal-footer-border-color;
173
- @include border-bottom-radius($modal-content-border-radius);
174
-
175
- // Easily place margin between footer elements
176
- > :not(:first-child) { margin-left: .25rem; }
177
- > :not(:last-child) { margin-right: .25rem; }
178
- }
179
-
180
- // Measure scrollbar width for padding body during modal show/hide
181
- .modal-scrollbar-measure {
182
- position: absolute;
183
- top: -9999px;
184
- width: 50px;
185
- height: 50px;
186
- overflow: scroll;
163
+ padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);
164
+ background-color: var(--#{$prefix}modal-footer-bg);
165
+ border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);
166
+ @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));
167
+
168
+ // Place margin between footer elements
169
+ // This solution is far from ideal because of the universal selector usage,
170
+ // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
171
+ > * {
172
+ margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class
173
+ }
187
174
  }
188
175
 
189
176
  // Scale up the modal
190
177
  @include media-breakpoint-up(sm) {
191
- // Automatically set modal's width for larger viewports
192
- .modal-dialog {
193
- max-width: $modal-md;
194
- margin: $modal-dialog-margin-y-sm-up auto;
195
- }
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
- }
178
+ .modal {
179
+ --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};
180
+ --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};
203
181
  }
204
182
 
205
- .modal-dialog-centered {
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
- }
183
+ // Automatically set modal's width for larger viewports
184
+ .modal-dialog {
185
+ max-width: var(--#{$prefix}modal-width);
186
+ margin-right: auto;
187
+ margin-left: auto;
211
188
  }
212
189
 
213
- .modal-content {
214
- @include box-shadow($modal-content-box-shadow-sm-up);
190
+ .modal-sm {
191
+ --#{$prefix}modal-width: #{$modal-sm};
215
192
  }
216
-
217
- .modal-sm { max-width: $modal-sm; }
218
193
  }
219
194
 
220
195
  @include media-breakpoint-up(lg) {
221
196
  .modal-lg,
222
197
  .modal-xl {
223
- max-width: $modal-lg;
198
+ --#{$prefix}modal-width: #{$modal-lg};
224
199
  }
225
200
  }
226
201
 
227
202
  @include media-breakpoint-up(xl) {
228
- .modal-xl { max-width: $modal-xl; }
203
+ .modal-xl {
204
+ --#{$prefix}modal-width: #{$modal-xl};
205
+ }
206
+ }
207
+
208
+ // scss-docs-start modal-fullscreen-loop
209
+ @each $breakpoint in map-keys($grid-breakpoints) {
210
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
211
+ $postfix: if($infix != "", $infix + "-down", "");
212
+
213
+ @include media-breakpoint-down($breakpoint) {
214
+ .modal-fullscreen#{$postfix} {
215
+ width: 100vw;
216
+ max-width: none;
217
+ height: 100%;
218
+ margin: 0;
219
+
220
+ .modal-content {
221
+ height: 100%;
222
+ border: 0;
223
+ @include border-radius(0);
224
+ }
225
+
226
+ .modal-header,
227
+ .modal-footer {
228
+ @include border-radius(0);
229
+ }
230
+
231
+ .modal-body {
232
+ overflow-y: auto;
233
+ }
234
+ }
235
+ }
229
236
  }
237
+ // scss-docs-end modal-fullscreen-loop
@@ -1,9 +1,19 @@
1
1
  // Base class
2
2
  //
3
3
  // Kickstart any navigation component with a set of style resets. Works with
4
- // `<nav>`s or `<ul>`s.
4
+ // `<nav>`s, `<ul>`s or `<ol>`s.
5
5
 
6
6
  .nav {
7
+ // scss-docs-start nav-css-vars
8
+ --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};
9
+ --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};
10
+ @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);
11
+ --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};
12
+ --#{$prefix}nav-link-color: #{$nav-link-color};
13
+ --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};
14
+ --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};
15
+ // scss-docs-end nav-css-vars
16
+
7
17
  display: flex;
8
18
  flex-wrap: wrap;
9
19
  padding-left: 0;
@@ -13,15 +23,29 @@
13
23
 
14
24
  .nav-link {
15
25
  display: block;
16
- padding: $nav-link-padding-y $nav-link-padding-x;
26
+ padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);
27
+ @include font-size(var(--#{$prefix}nav-link-font-size));
28
+ font-weight: var(--#{$prefix}nav-link-font-weight);
29
+ color: var(--#{$prefix}nav-link-color);
30
+ text-decoration: if($link-decoration == none, null, none);
31
+ background: none;
32
+ border: 0;
33
+ @include transition($nav-link-transition);
34
+
35
+ &:hover,
36
+ &:focus {
37
+ color: var(--#{$prefix}nav-link-hover-color);
38
+ text-decoration: if($link-hover-decoration == underline, none, null);
39
+ }
17
40
 
18
- @include hover-focus {
19
- text-decoration: none;
41
+ &:focus-visible {
42
+ outline: 0;
43
+ box-shadow: $nav-link-focus-box-shadow;
20
44
  }
21
45
 
22
46
  // Disabled state lightens text
23
47
  &.disabled {
24
- color: $nav-link-disabled-color;
48
+ color: var(--#{$prefix}nav-link-disabled-color);
25
49
  pointer-events: none;
26
50
  cursor: default;
27
51
  }
@@ -32,22 +56,33 @@
32
56
  //
33
57
 
34
58
  .nav-tabs {
35
- border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
36
-
37
- .nav-item {
38
- margin-bottom: -$nav-tabs-border-width;
39
- }
59
+ // scss-docs-start nav-tabs-css-vars
60
+ --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};
61
+ --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};
62
+ --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};
63
+ --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};
64
+ --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};
65
+ --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};
66
+ --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};
67
+ // scss-docs-end nav-tabs-css-vars
68
+
69
+ border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);
40
70
 
41
71
  .nav-link {
42
- border: $nav-tabs-border-width solid transparent;
43
- @include border-top-radius($nav-tabs-border-radius);
44
-
45
- @include hover-focus {
46
- border-color: $nav-tabs-link-hover-border-color;
72
+ margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list
73
+ border: var(--#{$prefix}nav-tabs-border-width) solid transparent;
74
+ @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));
75
+
76
+ &:hover,
77
+ &:focus {
78
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
79
+ isolation: isolate;
80
+ border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);
47
81
  }
48
82
 
49
- &.disabled {
50
- color: $nav-link-disabled-color;
83
+ &.disabled,
84
+ &:disabled {
85
+ color: var(--#{$prefix}nav-link-disabled-color);
51
86
  background-color: transparent;
52
87
  border-color: transparent;
53
88
  }
@@ -55,14 +90,14 @@
55
90
 
56
91
  .nav-link.active,
57
92
  .nav-item.show .nav-link {
58
- color: $nav-tabs-link-active-color;
59
- background-color: $nav-tabs-link-active-bg;
60
- border-color: $nav-tabs-link-active-border-color;
93
+ color: var(--#{$prefix}nav-tabs-link-active-color);
94
+ background-color: var(--#{$prefix}nav-tabs-link-active-bg);
95
+ border-color: var(--#{$prefix}nav-tabs-link-active-border-color);
61
96
  }
62
97
 
63
98
  .dropdown-menu {
64
99
  // Make dropdown border overlap tab border
65
- margin-top: -$nav-tabs-border-width;
100
+ margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list
66
101
  // Remove the top rounded corners here since there is a hard edge above the menu
67
102
  @include border-top-radius(0);
68
103
  }
@@ -74,14 +109,59 @@
74
109
  //
75
110
 
76
111
  .nav-pills {
112
+ // scss-docs-start nav-pills-css-vars
113
+ --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};
114
+ --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};
115
+ --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};
116
+ // scss-docs-end nav-pills-css-vars
117
+
77
118
  .nav-link {
78
- @include border-radius($nav-pills-border-radius);
119
+ @include border-radius(var(--#{$prefix}nav-pills-border-radius));
120
+
121
+ &:disabled {
122
+ color: var(--#{$prefix}nav-link-disabled-color);
123
+ background-color: transparent;
124
+ border-color: transparent;
125
+ }
79
126
  }
80
127
 
81
128
  .nav-link.active,
82
129
  .show > .nav-link {
83
- color: $nav-pills-link-active-color;
84
- background-color: $nav-pills-link-active-bg;
130
+ color: var(--#{$prefix}nav-pills-link-active-color);
131
+ @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));
132
+ }
133
+ }
134
+
135
+
136
+ //
137
+ // Underline
138
+ //
139
+
140
+ .nav-underline {
141
+ // scss-docs-start nav-underline-css-vars
142
+ --#{$prefix}nav-underline-gap: #{$nav-underline-gap};
143
+ --#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};
144
+ --#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};
145
+ // scss-docs-end nav-underline-css-vars
146
+
147
+ gap: var(--#{$prefix}nav-underline-gap);
148
+
149
+ .nav-link {
150
+ padding-right: 0;
151
+ padding-left: 0;
152
+ border-bottom: var(--#{$prefix}nav-underline-border-width) solid transparent;
153
+
154
+ &:hover,
155
+ &:focus {
156
+ border-bottom-color: currentcolor;
157
+ }
158
+ }
159
+
160
+ .nav-link.active,
161
+ .show > .nav-link {
162
+ font-weight: $font-weight-bold;
163
+ color: var(--#{$prefix}nav-underline-link-active-color);
164
+ border-bottom-color: currentcolor;
85
165
  }
86
166
  }
87
167
 
@@ -91,6 +171,7 @@
91
171
  //
92
172
 
93
173
  .nav-fill {
174
+ > .nav-link,
94
175
  .nav-item {
95
176
  flex: 1 1 auto;
96
177
  text-align: center;
@@ -98,6 +179,7 @@
98
179
  }
99
180
 
100
181
  .nav-justified {
182
+ > .nav-link,
101
183
  .nav-item {
102
184
  flex-basis: 0;
103
185
  flex-grow: 1;
@@ -105,6 +187,13 @@
105
187
  }
106
188
  }
107
189
 
190
+ .nav-fill,
191
+ .nav-justified {
192
+ .nav-item .nav-link {
193
+ width: 100%; // Make sure button will grow
194
+ }
195
+ }
196
+
108
197
 
109
198
  // Tabbable tabs
110
199
  //