bootstrap 4.6.2 → 5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/README.md +28 -5
  4. data/assets/javascripts/bootstrap/alert.js +50 -147
  5. data/assets/javascripts/bootstrap/base-component.js +83 -0
  6. data/assets/javascripts/bootstrap/button.js +40 -190
  7. data/assets/javascripts/bootstrap/carousel.js +282 -537
  8. data/assets/javascripts/bootstrap/collapse.js +166 -314
  9. data/assets/javascripts/bootstrap/dom/data.js +62 -0
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
  13. data/assets/javascripts/bootstrap/dropdown.js +297 -455
  14. data/assets/javascripts/bootstrap/modal.js +223 -566
  15. data/assets/javascripts/bootstrap/offcanvas.js +245 -0
  16. data/assets/javascripts/bootstrap/popover.js +59 -208
  17. data/assets/javascripts/bootstrap/scrollspy.js +213 -276
  18. data/assets/javascripts/bootstrap/tab.js +222 -200
  19. data/assets/javascripts/bootstrap/toast.js +137 -206
  20. data/assets/javascripts/bootstrap/tooltip.js +403 -746
  21. data/assets/javascripts/bootstrap/util/backdrop.js +139 -0
  22. data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
  23. data/assets/javascripts/bootstrap/util/config.js +67 -0
  24. data/assets/javascripts/bootstrap/util/focustrap.js +113 -0
  25. data/assets/javascripts/bootstrap/util/index.js +281 -0
  26. data/assets/javascripts/bootstrap/util/sanitizer.js +110 -0
  27. data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
  28. data/assets/javascripts/bootstrap/util/swipe.js +134 -0
  29. data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
  30. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  31. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  32. data/assets/javascripts/bootstrap-sprockets.js +21 -5
  33. data/assets/javascripts/bootstrap.js +3623 -3485
  34. data/assets/javascripts/bootstrap.min.js +3 -3
  35. data/assets/stylesheets/_bootstrap-grid.scss +53 -21
  36. data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
  37. data/assets/stylesheets/_bootstrap.scss +21 -13
  38. data/assets/stylesheets/bootstrap/_accordion.scss +158 -0
  39. data/assets/stylesheets/bootstrap/_alert.scss +32 -16
  40. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  41. data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -24
  42. data/assets/stylesheets/bootstrap/_button-group.scss +27 -48
  43. data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
  44. data/assets/stylesheets/bootstrap/_card.scss +66 -113
  45. data/assets/stylesheets/bootstrap/_carousel.scss +78 -34
  46. data/assets/stylesheets/bootstrap/_close.scss +51 -28
  47. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  48. data/assets/stylesheets/bootstrap/_dropdown.scss +129 -71
  49. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  50. data/assets/stylesheets/bootstrap/_functions.scss +135 -23
  51. data/assets/stylesheets/bootstrap/_grid.scss +18 -52
  52. data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
  53. data/assets/stylesheets/bootstrap/_list-group.scss +77 -34
  54. data/assets/stylesheets/bootstrap/_maps.scss +174 -0
  55. data/assets/stylesheets/bootstrap/_mixins.scss +10 -15
  56. data/assets/stylesheets/bootstrap/_modal.scss +107 -110
  57. data/assets/stylesheets/bootstrap/_nav.scss +99 -27
  58. data/assets/stylesheets/bootstrap/_navbar.scss +129 -172
  59. data/assets/stylesheets/bootstrap/_offcanvas.scss +146 -0
  60. data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
  61. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  62. data/assets/stylesheets/bootstrap/_popover.scss +99 -73
  63. data/assets/stylesheets/bootstrap/_progress.scss +35 -14
  64. data/assets/stylesheets/bootstrap/_reboot.scss +318 -192
  65. data/assets/stylesheets/bootstrap/_root.scss +174 -9
  66. data/assets/stylesheets/bootstrap/_spinners.scss +43 -23
  67. data/assets/stylesheets/bootstrap/_tables.scss +101 -115
  68. data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
  69. data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
  70. data/assets/stylesheets/bootstrap/_transitions.scss +3 -2
  71. data/assets/stylesheets/bootstrap/_type.scss +40 -59
  72. data/assets/stylesheets/bootstrap/_utilities.scss +806 -18
  73. data/assets/stylesheets/bootstrap/_variables-dark.scss +85 -0
  74. data/assets/stylesheets/bootstrap/_variables.scss +1202 -606
  75. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +19 -0
  76. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +95 -0
  77. data/assets/stylesheets/bootstrap/forms/_form-check.scss +188 -0
  78. data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
  79. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  82. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  83. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  84. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  85. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
  86. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
  87. data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
  88. data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
  89. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  90. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  91. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  92. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  93. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  94. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  95. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  96. data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
  97. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  98. data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
  99. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  100. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  101. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  102. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
  103. data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
  104. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  105. data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
  106. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  107. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  108. data/assets/stylesheets/bootstrap/mixins/_forms.scss +54 -96
  109. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  110. data/assets/stylesheets/bootstrap/mixins/_grid.scss +118 -36
  111. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  112. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
  113. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  114. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  115. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  116. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  117. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  118. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  119. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
  120. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  121. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +211 -91
  122. data/bootstrap.gemspec +3 -5
  123. data/lib/bootstrap/version.rb +2 -2
  124. data/tasks/updater/js.rb +17 -5
  125. data/tasks/updater/network.rb +2 -2
  126. data/tasks/updater/scss.rb +1 -1
  127. data/tasks/updater.rb +2 -2
  128. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  129. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  130. data/test/dummy_rails/app/views/pages/root.html +89 -0
  131. data/test/dummy_rails/config/application.rb +0 -3
  132. data/test/gemfiles/rails_5_2.gemfile +8 -0
  133. data/test/gemfiles/rails_6_1.gemfile +7 -0
  134. data/test/gemfiles/rails_7_0.gemfile +7 -0
  135. data/test/test_helper.rb +3 -2
  136. metadata +78 -82
  137. data/.travis.yml +0 -31
  138. data/assets/javascripts/bootstrap/util.js +0 -189
  139. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  140. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  141. data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
  142. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  143. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  144. data/assets/stylesheets/bootstrap/_print.scss +0 -132
  145. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  146. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  147. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  148. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  149. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  150. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  151. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  152. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  153. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  154. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  155. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  156. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  157. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  158. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  159. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  160. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  161. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  162. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  163. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  164. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  165. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  166. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  167. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  168. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  169. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  170. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  171. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  172. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  173. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  174. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  175. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -0,0 +1,19 @@
1
+ @import "mixins/banner";
2
+ @include bsBanner(Utilities);
3
+
4
+ // Configuration
5
+ @import "functions";
6
+ @import "variables";
7
+ @import "variables-dark";
8
+ @import "maps";
9
+ @import "mixins";
10
+ @import "utilities";
11
+
12
+ // Layout & components
13
+ @import "root";
14
+
15
+ // Helpers
16
+ @import "helpers";
17
+
18
+ // Utilities
19
+ @import "utilities/api";
@@ -0,0 +1,95 @@
1
+ .form-floating {
2
+ position: relative;
3
+
4
+ > .form-control,
5
+ > .form-control-plaintext,
6
+ > .form-select {
7
+ height: $form-floating-height;
8
+ min-height: $form-floating-height;
9
+ line-height: $form-floating-line-height;
10
+ }
11
+
12
+ > label {
13
+ position: absolute;
14
+ top: 0;
15
+ left: 0;
16
+ z-index: 2;
17
+ height: 100%; // allow textareas
18
+ padding: $form-floating-padding-y $form-floating-padding-x;
19
+ overflow: hidden;
20
+ text-align: start;
21
+ text-overflow: ellipsis;
22
+ white-space: nowrap;
23
+ pointer-events: none;
24
+ border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model
25
+ transform-origin: 0 0;
26
+ @include transition($form-floating-transition);
27
+ }
28
+
29
+ > .form-control,
30
+ > .form-control-plaintext {
31
+ padding: $form-floating-padding-y $form-floating-padding-x;
32
+
33
+ &::placeholder {
34
+ color: transparent;
35
+ }
36
+
37
+ &:focus,
38
+ &:not(:placeholder-shown) {
39
+ padding-top: $form-floating-input-padding-t;
40
+ padding-bottom: $form-floating-input-padding-b;
41
+ }
42
+ // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
43
+ &:-webkit-autofill {
44
+ padding-top: $form-floating-input-padding-t;
45
+ padding-bottom: $form-floating-input-padding-b;
46
+ }
47
+ }
48
+
49
+ > .form-select {
50
+ padding-top: $form-floating-input-padding-t;
51
+ padding-bottom: $form-floating-input-padding-b;
52
+ }
53
+
54
+ > .form-control:focus,
55
+ > .form-control:not(:placeholder-shown),
56
+ > .form-control-plaintext,
57
+ > .form-select {
58
+ ~ label {
59
+ color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});
60
+ transform: $form-floating-label-transform;
61
+
62
+ &::after {
63
+ position: absolute;
64
+ inset: $form-floating-padding-y ($form-floating-padding-x * .5);
65
+ z-index: -1;
66
+ height: $form-floating-label-height;
67
+ content: "";
68
+ background-color: $input-bg;
69
+ @include border-radius($input-border-radius);
70
+ }
71
+ }
72
+ }
73
+ // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
74
+ > .form-control:-webkit-autofill {
75
+ ~ label {
76
+ color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity});
77
+ transform: $form-floating-label-transform;
78
+ }
79
+ }
80
+
81
+ > .form-control-plaintext {
82
+ ~ label {
83
+ border-width: $input-border-width 0; // Required to properly position label text - as explained above
84
+ }
85
+ }
86
+
87
+ > :disabled ~ label,
88
+ > .form-control:disabled ~ label { // Required for `.form-control`s because of specificity
89
+ color: $form-floating-label-disabled-color;
90
+
91
+ &::after {
92
+ background-color: $input-disabled-bg;
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,188 @@
1
+ //
2
+ // Check/radio
3
+ //
4
+
5
+ .form-check {
6
+ display: block;
7
+ min-height: $form-check-min-height;
8
+ padding-left: $form-check-padding-start;
9
+ margin-bottom: $form-check-margin-bottom;
10
+
11
+ .form-check-input {
12
+ float: left;
13
+ margin-left: $form-check-padding-start * -1;
14
+ }
15
+ }
16
+
17
+ .form-check-reverse {
18
+ padding-right: $form-check-padding-start;
19
+ padding-left: 0;
20
+ text-align: right;
21
+
22
+ .form-check-input {
23
+ float: right;
24
+ margin-right: $form-check-padding-start * -1;
25
+ margin-left: 0;
26
+ }
27
+ }
28
+
29
+ .form-check-input {
30
+ --#{$prefix}form-check-bg: #{$form-check-input-bg};
31
+
32
+ width: $form-check-input-width;
33
+ height: $form-check-input-width;
34
+ margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height
35
+ vertical-align: top;
36
+ appearance: none;
37
+ background-color: var(--#{$prefix}form-check-bg);
38
+ background-image: var(--#{$prefix}form-check-bg-image);
39
+ background-repeat: no-repeat;
40
+ background-position: center;
41
+ background-size: contain;
42
+ border: $form-check-input-border;
43
+ print-color-adjust: exact; // Keep themed appearance for print
44
+ @include transition($form-check-transition);
45
+
46
+ &[type="checkbox"] {
47
+ @include border-radius($form-check-input-border-radius);
48
+ }
49
+
50
+ &[type="radio"] {
51
+ // stylelint-disable-next-line property-disallowed-list
52
+ border-radius: $form-check-radio-border-radius;
53
+ }
54
+
55
+ &:active {
56
+ filter: $form-check-input-active-filter;
57
+ }
58
+
59
+ &:focus {
60
+ border-color: $form-check-input-focus-border;
61
+ outline: 0;
62
+ box-shadow: $form-check-input-focus-box-shadow;
63
+ }
64
+
65
+ &:checked {
66
+ background-color: $form-check-input-checked-bg-color;
67
+ border-color: $form-check-input-checked-border-color;
68
+
69
+ &[type="checkbox"] {
70
+ @if $enable-gradients {
71
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);
72
+ } @else {
73
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};
74
+ }
75
+ }
76
+
77
+ &[type="radio"] {
78
+ @if $enable-gradients {
79
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);
80
+ } @else {
81
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};
82
+ }
83
+ }
84
+ }
85
+
86
+ &[type="checkbox"]:indeterminate {
87
+ background-color: $form-check-input-indeterminate-bg-color;
88
+ border-color: $form-check-input-indeterminate-border-color;
89
+
90
+ @if $enable-gradients {
91
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);
92
+ } @else {
93
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};
94
+ }
95
+ }
96
+
97
+ &:disabled {
98
+ pointer-events: none;
99
+ filter: none;
100
+ opacity: $form-check-input-disabled-opacity;
101
+ }
102
+
103
+ // Use disabled attribute in addition of :disabled pseudo-class
104
+ // See: https://github.com/twbs/bootstrap/issues/28247
105
+ &[disabled],
106
+ &:disabled {
107
+ ~ .form-check-label {
108
+ cursor: default;
109
+ opacity: $form-check-label-disabled-opacity;
110
+ }
111
+ }
112
+ }
113
+
114
+ .form-check-label {
115
+ color: $form-check-label-color;
116
+ cursor: $form-check-label-cursor;
117
+ }
118
+
119
+ //
120
+ // Switch
121
+ //
122
+
123
+ .form-switch {
124
+ padding-left: $form-switch-padding-start;
125
+
126
+ .form-check-input {
127
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};
128
+
129
+ width: $form-switch-width;
130
+ margin-left: $form-switch-padding-start * -1;
131
+ background-image: var(--#{$prefix}form-switch-bg);
132
+ background-position: left center;
133
+ @include border-radius($form-switch-border-radius);
134
+ @include transition($form-switch-transition);
135
+
136
+ &:focus {
137
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};
138
+ }
139
+
140
+ &:checked {
141
+ background-position: $form-switch-checked-bg-position;
142
+
143
+ @if $enable-gradients {
144
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);
145
+ } @else {
146
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};
147
+ }
148
+ }
149
+ }
150
+
151
+ &.form-check-reverse {
152
+ padding-right: $form-switch-padding-start;
153
+ padding-left: 0;
154
+
155
+ .form-check-input {
156
+ margin-right: $form-switch-padding-start * -1;
157
+ margin-left: 0;
158
+ }
159
+ }
160
+ }
161
+
162
+ .form-check-inline {
163
+ display: inline-block;
164
+ margin-right: $form-check-inline-margin-end;
165
+ }
166
+
167
+ .btn-check {
168
+ position: absolute;
169
+ clip: rect(0, 0, 0, 0);
170
+ pointer-events: none;
171
+
172
+ &[disabled],
173
+ &:disabled {
174
+ + .btn {
175
+ pointer-events: none;
176
+ filter: none;
177
+ opacity: $form-check-btn-check-disabled-opacity;
178
+ }
179
+ }
180
+ }
181
+
182
+ @if $enable-dark-mode {
183
+ @include color-mode(dark) {
184
+ .form-switch .form-check-input:not(:checked):not(:focus) {
185
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,214 @@
1
+ //
2
+ // General form controls (plus a few specific high-level interventions)
3
+ //
4
+
5
+ .form-control {
6
+ display: block;
7
+ width: 100%;
8
+ padding: $input-padding-y $input-padding-x;
9
+ font-family: $input-font-family;
10
+ @include font-size($input-font-size);
11
+ font-weight: $input-font-weight;
12
+ line-height: $input-line-height;
13
+ color: $input-color;
14
+ appearance: none; // Fix appearance for date inputs in Safari
15
+ background-color: $input-bg;
16
+ background-clip: padding-box;
17
+ border: $input-border-width solid $input-border-color;
18
+
19
+ // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.
20
+ @include border-radius($input-border-radius, 0);
21
+
22
+ @include box-shadow($input-box-shadow);
23
+ @include transition($input-transition);
24
+
25
+ &[type="file"] {
26
+ overflow: hidden; // prevent pseudo element button overlap
27
+
28
+ &:not(:disabled):not([readonly]) {
29
+ cursor: pointer;
30
+ }
31
+ }
32
+
33
+ // Customize the `:focus` state to imitate native WebKit styles.
34
+ &:focus {
35
+ color: $input-focus-color;
36
+ background-color: $input-focus-bg;
37
+ border-color: $input-focus-border-color;
38
+ outline: 0;
39
+ @if $enable-shadows {
40
+ @include box-shadow($input-box-shadow, $input-focus-box-shadow);
41
+ } @else {
42
+ // Avoid using mixin so we can pass custom focus shadow properly
43
+ box-shadow: $input-focus-box-shadow;
44
+ }
45
+ }
46
+
47
+ &::-webkit-date-and-time-value {
48
+ // On Android Chrome, form-control's "width: 100%" makes the input width too small
49
+ // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109
50
+ //
51
+ // On iOS Safari, form-control's "appearance: none" + "width: 100%" makes the input width too small
52
+ // Tested under iOS 16.2 / Safari 16.2
53
+ min-width: 85px; // Seems to be a good minimum safe width
54
+
55
+ // Add some height to date inputs on iOS
56
+ // https://github.com/twbs/bootstrap/issues/23307
57
+ // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved
58
+ // Multiply line-height by 1em if it has no unit
59
+ height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height);
60
+
61
+ // Android Chrome type="date" is taller than the other inputs
62
+ // because of "margin: 1px 24px 1px 4px" inside the shadow DOM
63
+ // Tested under Android 11 / Chrome 89, Android 12 / Chrome 100, Android 13 / Chrome 109
64
+ margin: 0;
65
+ }
66
+
67
+ // Prevent excessive date input height in Webkit
68
+ // https://github.com/twbs/bootstrap/issues/34433
69
+ &::-webkit-datetime-edit {
70
+ display: block;
71
+ padding: 0;
72
+ }
73
+
74
+ // Placeholder
75
+ &::placeholder {
76
+ color: $input-placeholder-color;
77
+ // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.
78
+ opacity: 1;
79
+ }
80
+
81
+ // Disabled inputs
82
+ //
83
+ // HTML5 says that controls under a fieldset > legend:first-child won't be
84
+ // disabled if the fieldset is disabled. Due to implementation difficulty, we
85
+ // don't honor that edge case; we style them as disabled anyway.
86
+ &:disabled {
87
+ color: $input-disabled-color;
88
+ background-color: $input-disabled-bg;
89
+ border-color: $input-disabled-border-color;
90
+ // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.
91
+ opacity: 1;
92
+ }
93
+
94
+ // File input buttons theming
95
+ &::file-selector-button {
96
+ padding: $input-padding-y $input-padding-x;
97
+ margin: (-$input-padding-y) (-$input-padding-x);
98
+ margin-inline-end: $input-padding-x;
99
+ color: $form-file-button-color;
100
+ @include gradient-bg($form-file-button-bg);
101
+ pointer-events: none;
102
+ border-color: inherit;
103
+ border-style: solid;
104
+ border-width: 0;
105
+ border-inline-end-width: $input-border-width;
106
+ border-radius: 0; // stylelint-disable-line property-disallowed-list
107
+ @include transition($btn-transition);
108
+ }
109
+
110
+ &:hover:not(:disabled):not([readonly])::file-selector-button {
111
+ background-color: $form-file-button-hover-bg;
112
+ }
113
+ }
114
+
115
+ // Readonly controls as plain text
116
+ //
117
+ // Apply class to a readonly input to make it appear like regular plain
118
+ // text (without any border, background color, focus indicator)
119
+
120
+ .form-control-plaintext {
121
+ display: block;
122
+ width: 100%;
123
+ padding: $input-padding-y 0;
124
+ margin-bottom: 0; // match inputs if this class comes on inputs with default margins
125
+ line-height: $input-line-height;
126
+ color: $input-plaintext-color;
127
+ background-color: transparent;
128
+ border: solid transparent;
129
+ border-width: $input-border-width 0;
130
+
131
+ &:focus {
132
+ outline: 0;
133
+ }
134
+
135
+ &.form-control-sm,
136
+ &.form-control-lg {
137
+ padding-right: 0;
138
+ padding-left: 0;
139
+ }
140
+ }
141
+
142
+ // Form control sizing
143
+ //
144
+ // Build on `.form-control` with modifier classes to decrease or increase the
145
+ // height and font-size of form controls.
146
+ //
147
+ // Repeated in `_input_group.scss` to avoid Sass extend issues.
148
+
149
+ .form-control-sm {
150
+ min-height: $input-height-sm;
151
+ padding: $input-padding-y-sm $input-padding-x-sm;
152
+ @include font-size($input-font-size-sm);
153
+ @include border-radius($input-border-radius-sm);
154
+
155
+ &::file-selector-button {
156
+ padding: $input-padding-y-sm $input-padding-x-sm;
157
+ margin: (-$input-padding-y-sm) (-$input-padding-x-sm);
158
+ margin-inline-end: $input-padding-x-sm;
159
+ }
160
+ }
161
+
162
+ .form-control-lg {
163
+ min-height: $input-height-lg;
164
+ padding: $input-padding-y-lg $input-padding-x-lg;
165
+ @include font-size($input-font-size-lg);
166
+ @include border-radius($input-border-radius-lg);
167
+
168
+ &::file-selector-button {
169
+ padding: $input-padding-y-lg $input-padding-x-lg;
170
+ margin: (-$input-padding-y-lg) (-$input-padding-x-lg);
171
+ margin-inline-end: $input-padding-x-lg;
172
+ }
173
+ }
174
+
175
+ // Make sure textareas don't shrink too much when resized
176
+ // https://github.com/twbs/bootstrap/pull/29124
177
+ // stylelint-disable selector-no-qualifying-type
178
+ textarea {
179
+ &.form-control {
180
+ min-height: $input-height;
181
+ }
182
+
183
+ &.form-control-sm {
184
+ min-height: $input-height-sm;
185
+ }
186
+
187
+ &.form-control-lg {
188
+ min-height: $input-height-lg;
189
+ }
190
+ }
191
+ // stylelint-enable selector-no-qualifying-type
192
+
193
+ .form-control-color {
194
+ width: $form-color-width;
195
+ height: $input-height;
196
+ padding: $input-padding-y;
197
+
198
+ &:not(:disabled):not([readonly]) {
199
+ cursor: pointer;
200
+ }
201
+
202
+ &::-moz-color-swatch {
203
+ border: 0 !important; // stylelint-disable-line declaration-no-important
204
+ @include border-radius($input-border-radius);
205
+ }
206
+
207
+ &::-webkit-color-swatch {
208
+ border: 0 !important; // stylelint-disable-line declaration-no-important
209
+ @include border-radius($input-border-radius);
210
+ }
211
+
212
+ &.form-control-sm { height: $input-height-sm; }
213
+ &.form-control-lg { height: $input-height-lg; }
214
+ }
@@ -0,0 +1,91 @@
1
+ // Range
2
+ //
3
+ // Style range inputs the same across browsers. Vendor-specific rules for pseudo
4
+ // elements cannot be mixed. As such, there are no shared styles for focus or
5
+ // active states on prefixed selectors.
6
+
7
+ .form-range {
8
+ width: 100%;
9
+ height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);
10
+ padding: 0; // Need to reset padding
11
+ appearance: none;
12
+ background-color: transparent;
13
+
14
+ &:focus {
15
+ outline: 0;
16
+
17
+ // Pseudo-elements must be split across multiple rulesets to have an effect.
18
+ // No box-shadow() mixin for focus accessibility.
19
+ &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
20
+ &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
21
+ }
22
+
23
+ &::-moz-focus-outer {
24
+ border: 0;
25
+ }
26
+
27
+ &::-webkit-slider-thumb {
28
+ width: $form-range-thumb-width;
29
+ height: $form-range-thumb-height;
30
+ margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific
31
+ appearance: none;
32
+ @include gradient-bg($form-range-thumb-bg);
33
+ border: $form-range-thumb-border;
34
+ @include border-radius($form-range-thumb-border-radius);
35
+ @include box-shadow($form-range-thumb-box-shadow);
36
+ @include transition($form-range-thumb-transition);
37
+
38
+ &:active {
39
+ @include gradient-bg($form-range-thumb-active-bg);
40
+ }
41
+ }
42
+
43
+ &::-webkit-slider-runnable-track {
44
+ width: $form-range-track-width;
45
+ height: $form-range-track-height;
46
+ color: transparent; // Why?
47
+ cursor: $form-range-track-cursor;
48
+ background-color: $form-range-track-bg;
49
+ border-color: transparent;
50
+ @include border-radius($form-range-track-border-radius);
51
+ @include box-shadow($form-range-track-box-shadow);
52
+ }
53
+
54
+ &::-moz-range-thumb {
55
+ width: $form-range-thumb-width;
56
+ height: $form-range-thumb-height;
57
+ appearance: none;
58
+ @include gradient-bg($form-range-thumb-bg);
59
+ border: $form-range-thumb-border;
60
+ @include border-radius($form-range-thumb-border-radius);
61
+ @include box-shadow($form-range-thumb-box-shadow);
62
+ @include transition($form-range-thumb-transition);
63
+
64
+ &:active {
65
+ @include gradient-bg($form-range-thumb-active-bg);
66
+ }
67
+ }
68
+
69
+ &::-moz-range-track {
70
+ width: $form-range-track-width;
71
+ height: $form-range-track-height;
72
+ color: transparent;
73
+ cursor: $form-range-track-cursor;
74
+ background-color: $form-range-track-bg;
75
+ border-color: transparent; // Firefox specific?
76
+ @include border-radius($form-range-track-border-radius);
77
+ @include box-shadow($form-range-track-box-shadow);
78
+ }
79
+
80
+ &:disabled {
81
+ pointer-events: none;
82
+
83
+ &::-webkit-slider-thumb {
84
+ background-color: $form-range-thumb-disabled-bg;
85
+ }
86
+
87
+ &::-moz-range-thumb {
88
+ background-color: $form-range-thumb-disabled-bg;
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,80 @@
1
+ // Select
2
+ //
3
+ // Replaces the browser default select with a custom one, mostly pulled from
4
+ // https://primer.github.io/.
5
+
6
+ .form-select {
7
+ --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};
8
+
9
+ display: block;
10
+ width: 100%;
11
+ padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;
12
+ font-family: $form-select-font-family;
13
+ @include font-size($form-select-font-size);
14
+ font-weight: $form-select-font-weight;
15
+ line-height: $form-select-line-height;
16
+ color: $form-select-color;
17
+ appearance: none;
18
+ background-color: $form-select-bg;
19
+ background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);
20
+ background-repeat: no-repeat;
21
+ background-position: $form-select-bg-position;
22
+ background-size: $form-select-bg-size;
23
+ border: $form-select-border-width solid $form-select-border-color;
24
+ @include border-radius($form-select-border-radius, 0);
25
+ @include box-shadow($form-select-box-shadow);
26
+ @include transition($form-select-transition);
27
+
28
+ &:focus {
29
+ border-color: $form-select-focus-border-color;
30
+ outline: 0;
31
+ @if $enable-shadows {
32
+ @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);
33
+ } @else {
34
+ // Avoid using mixin so we can pass custom focus shadow properly
35
+ box-shadow: $form-select-focus-box-shadow;
36
+ }
37
+ }
38
+
39
+ &[multiple],
40
+ &[size]:not([size="1"]) {
41
+ padding-right: $form-select-padding-x;
42
+ background-image: none;
43
+ }
44
+
45
+ &:disabled {
46
+ color: $form-select-disabled-color;
47
+ background-color: $form-select-disabled-bg;
48
+ border-color: $form-select-disabled-border-color;
49
+ }
50
+
51
+ // Remove outline from select box in FF
52
+ &:-moz-focusring {
53
+ color: transparent;
54
+ text-shadow: 0 0 0 $form-select-color;
55
+ }
56
+ }
57
+
58
+ .form-select-sm {
59
+ padding-top: $form-select-padding-y-sm;
60
+ padding-bottom: $form-select-padding-y-sm;
61
+ padding-left: $form-select-padding-x-sm;
62
+ @include font-size($form-select-font-size-sm);
63
+ @include border-radius($form-select-border-radius-sm);
64
+ }
65
+
66
+ .form-select-lg {
67
+ padding-top: $form-select-padding-y-lg;
68
+ padding-bottom: $form-select-padding-y-lg;
69
+ padding-left: $form-select-padding-x-lg;
70
+ @include font-size($form-select-font-size-lg);
71
+ @include border-radius($form-select-border-radius-lg);
72
+ }
73
+
74
+ @if $enable-dark-mode {
75
+ @include color-mode(dark) {
76
+ .form-select {
77
+ --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,11 @@
1
+ //
2
+ // Form text
3
+ //
4
+
5
+ .form-text {
6
+ margin-top: $form-text-margin-top;
7
+ @include font-size($form-text-font-size);
8
+ font-style: $form-text-font-style;
9
+ font-weight: $form-text-font-weight;
10
+ color: $form-text-color;
11
+ }