@wwtdev/bsds-css 2.5.1 → 2.5.2
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.
- package/README.md +36 -8
- package/dist/components/_badge.scss +1 -1
- package/dist/components/_banner.scss +1 -1
- package/dist/components/_dropdown-options.scss +1 -1
- package/dist/components/_dropdown.scss +1 -1
- package/dist/components/_form-booleans.scss +41 -76
- package/dist/components/_form-character-count.scss +1 -1
- package/dist/components/_form-hints.scss +7 -3
- package/dist/components/_form-input-composite.scss +1 -1
- package/dist/components/_form-text-fields.scss +1 -1
- package/dist/components/_modal.scss +2 -1
- package/dist/components/_timeline.scss +1 -1
- package/dist/components/badge.css +1 -1
- package/dist/components/banner.css +1 -1
- package/dist/components/dropdown-options.css +1 -1
- package/dist/components/dropdown.css +1 -1
- package/dist/components/form-booleans.css +41 -76
- package/dist/components/form-character-count.css +1 -1
- package/dist/components/form-hints.css +7 -3
- package/dist/components/form-input-composite.css +1 -1
- package/dist/components/form-text-fields.css +1 -1
- package/dist/components/modal.css +2 -2
- package/dist/components/timeline.css +1 -1
- package/dist/wwt-bsds-wc-base.css +2 -2
- package/dist/wwt-bsds.css +84 -112
- package/dist/wwt-bsds.min.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,25 +56,53 @@ Since our CSS has its own reset and default styles, we prevent Tailwind's `base`
|
|
|
56
56
|
|
|
57
57
|
Once you have completed the Tailwind installation steps, you can use the classes generated from the preset.
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
We've extended the TW theme with color utilities that will automatically adjust when using dark mode. These classes require the CSS custom properties defined in the global stylesheet (`wwt-bsds.css`). If you're not bringing that stylesheet in, either disregard these classes or manually include the properties from [tokens.css](https://github.wwt.com/custom-apps/wwt-blue-steel/blob/main/packages/css-framework/src/styles/tokens.css) and [global.css](https://github.wwt.com/custom-apps/wwt-blue-steel/blob/main/packages/css-framework/src/styles/global.css) in your project.
|
|
59
|
+
#### Order matters!
|
|
62
60
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
In your project's stylesheet ordering, the base Tailwind styles should come first, _then_ the BSDS CSS framework.
|
|
61
|
+
In your project's stylesheet ordering, the BSDS CSS framework should come first, _then_ the base Tailwind styles for easier overriding via TW utilities.
|
|
66
62
|
|
|
67
63
|
```javascript
|
|
68
64
|
/* src/main.js */
|
|
69
65
|
|
|
70
|
-
// TW
|
|
71
|
-
import './styles/tailwind.css'
|
|
72
66
|
|
|
73
67
|
// Blue Steel Styles
|
|
74
68
|
import '@wwtdev/bsds-css/dist/wwt-bsds.min.css'
|
|
69
|
+
// TW
|
|
70
|
+
import './styles/tailwind.css'
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Alternatively, you can leverage native CSS `@layer` to ensure TW utilities will always trump these styles.
|
|
75
|
+
|
|
76
|
+
```css
|
|
77
|
+
/* src/styles/index.css (or wherever your styles live) */
|
|
78
|
+
|
|
79
|
+
@layer app-base, external, app, utils;
|
|
80
|
+
|
|
81
|
+
/* -- BASE -- */
|
|
82
|
+
@import "@wwtdev/bsds-css/dist/wwt-bsds.min.css" layer(app-base);
|
|
83
|
+
|
|
84
|
+
/* -- EXTERNAL: any external stylesheets, e.g. from other 3d party libs -- */
|
|
85
|
+
@import "some-other-pkg/dist/style.css" layer(external);
|
|
86
|
+
|
|
87
|
+
/* -- APP / INTERNAL STYLES, e.g. your site's base styles -- */
|
|
88
|
+
@import "some-content.css" layer(app);
|
|
89
|
+
|
|
90
|
+
/* -- UTILITY CLASSES --
|
|
91
|
+
Due to how native CSS @layer works, and our defined layer order at the top of this file, utility classes will always trump any other styles in the app (as long as those styles are in one of our defined layers)
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
@layer utils {
|
|
95
|
+
@tailwind base;
|
|
96
|
+
@tailwind utilities;
|
|
97
|
+
}
|
|
75
98
|
|
|
76
99
|
```
|
|
77
100
|
|
|
101
|
+
### 3. Dark Mode-compatible "semantic" color utilities
|
|
102
|
+
|
|
103
|
+
We've extended the TW theme with color utilities that will automatically adjust when using dark mode. These classes require the CSS custom properties defined in the global stylesheet (`wwt-bsds.css`). If you're not bringing that stylesheet in, either disregard these classes or manually include the properties from [tokens.css](https://github.wwt.com/custom-apps/wwt-blue-steel/blob/main/packages/css-framework/src/styles/tokens.css) and [global.css](https://github.wwt.com/custom-apps/wwt-blue-steel/blob/main/packages/css-framework/src/styles/global.css) in your project.
|
|
104
|
+
|
|
105
|
+
|
|
78
106
|
### Browser Support
|
|
79
107
|
|
|
80
108
|
Our styles are compiled using Post CSS and Autoprefixer using the [`defaults` setting](https://github.com/browserslist/browserslist#full-list).
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
/* Hover or data-selected */
|
|
97
97
|
.bs-dropdown-options :where(li:not([role="separator"]):hover),
|
|
98
98
|
.bs-dropdown-options :where(li[data-selected]) {
|
|
99
|
-
background-color: var(--bs-bg-medium);
|
|
99
|
+
background-color: var(--bs-bg-medium-to-light);
|
|
100
100
|
border-left: 4px solid var(--bs-ink-blue);
|
|
101
101
|
color: var(--bs-ink-blue);
|
|
102
102
|
outline: none;
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
--dropdown-width: 100%;
|
|
29
29
|
--dropdown-transform: translate(0, 100%);
|
|
30
30
|
|
|
31
|
-
background-color: var(--bs-bg-base-
|
|
31
|
+
background-color: var(--bs-bg-base-to-medium);
|
|
32
32
|
border-radius: 4px;
|
|
33
33
|
bottom: var(--dropdown-bottom);
|
|
34
34
|
box-shadow: var(--bs-shadow-contentMedium);
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
.bs-boolean:where([data-size='sm']) input {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
height: .75rem;
|
|
13
|
+
width: .75rem;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.bs-boolean label {
|
|
@@ -39,11 +39,8 @@
|
|
|
39
39
|
|
|
40
40
|
:where(input[type='checkbox'], input[type='radio']),
|
|
41
41
|
:is(.bs-boolean :where(input), .bs-checkbox) { /* .bs-checkbox added to accommodate 'fake' cbs */
|
|
42
|
-
--box-shadow: var(--bs-ink-base);
|
|
43
|
-
|
|
44
42
|
appearance: none;
|
|
45
|
-
|
|
46
|
-
box-shadow: inset 0 0 0 0.125rem var(--box-shadow);
|
|
43
|
+
box-shadow: inset 0 0 0 0.125rem var(--box-shadow, var(--bs-ink-base));
|
|
47
44
|
cursor: pointer;
|
|
48
45
|
display: grid;
|
|
49
46
|
height: 1rem;
|
|
@@ -71,79 +68,73 @@
|
|
|
71
68
|
border-radius: 50%;
|
|
72
69
|
}
|
|
73
70
|
|
|
74
|
-
/* Checkbox's checkmark */
|
|
71
|
+
/* Checkbox's checkbox, checkmark. Checkmark is hidden unless checked/indeterminate. */
|
|
75
72
|
input:where([type='checkbox'])::before,
|
|
76
73
|
:is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::before {
|
|
77
|
-
--filled-size: 1rem;
|
|
78
|
-
--check-fill-color: var(--bs-blue-base);
|
|
79
|
-
|
|
74
|
+
--cb-filled-size: var(--filled-size, 1rem);
|
|
80
75
|
content: '';
|
|
81
76
|
border-radius: 0.125rem;
|
|
82
|
-
box-shadow: inset var(--filled-size) var(--filled-size) var(--
|
|
83
|
-
height: var(--filled-size);
|
|
77
|
+
box-shadow: inset var(--cb-filled-size) var(--cb-filled-size) var(--fill-bg-color, var(--bs-blue-base));
|
|
78
|
+
height: var(--cb-filled-size);
|
|
84
79
|
visibility: hidden;
|
|
85
|
-
width: var(--filled-size);
|
|
80
|
+
width: var(--cb-filled-size);
|
|
86
81
|
}
|
|
87
82
|
|
|
88
83
|
input:where([type='checkbox'])::after,
|
|
89
84
|
:is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::after {
|
|
90
|
-
border: solid var(--bs-
|
|
85
|
+
border: solid var(--bs-bg-base);
|
|
91
86
|
border-width: 0 0.125rem 0.125rem 0;
|
|
92
87
|
content: '';
|
|
93
|
-
height: 0.75em;
|
|
88
|
+
height: var(--inner-check-height, 0.75em);
|
|
94
89
|
left: 50%;
|
|
95
90
|
position: absolute;
|
|
96
91
|
top: 50%;
|
|
97
92
|
transform-origin: center;
|
|
98
93
|
transform: translate(-50%, -60%) rotate(45deg);
|
|
99
94
|
visibility: hidden;
|
|
100
|
-
width: 0.375em;
|
|
95
|
+
width: var(--inner-check-width, 0.375em);
|
|
101
96
|
}
|
|
102
97
|
|
|
103
98
|
input:where([type='checkbox']):where(:indeterminate)::after,
|
|
104
99
|
.bs-boolean :where([type="checkbox"]):where(:indeterminate)::after,
|
|
105
100
|
.bs-checkbox:where([data-indeterminate="true"], :indeterminate)::after {
|
|
106
101
|
border: none;
|
|
107
|
-
background-color: var(--bs-
|
|
108
|
-
height: 0.125rem;
|
|
102
|
+
background-color: var(--bs-bg-base);
|
|
103
|
+
height: var(--inner-dash-height, 0.125rem);
|
|
109
104
|
transform: translate(-50%, -0.0625rem) rotate(0deg);
|
|
110
|
-
width: 0.625em;
|
|
105
|
+
width: var(--inner-dash-width, 0.625em);
|
|
111
106
|
}
|
|
112
107
|
|
|
113
|
-
/* Radio
|
|
108
|
+
/* Radio outer circle, Radio dot. Dot is hidden unless checked. */
|
|
114
109
|
input:where([type='radio'])::before,
|
|
115
110
|
.bs-boolean :where([type="radio"])::before {
|
|
116
|
-
--filled-size: 1rem;
|
|
117
|
-
--
|
|
118
|
-
|
|
119
|
-
background-color: var(--radio-fill-color);
|
|
111
|
+
--radio-filled-size: var(--filled-size, 1rem);
|
|
112
|
+
background-color: var(--fill-bg-color, var(--bs-blue-base));
|
|
120
113
|
border-radius: 50%;
|
|
121
114
|
box-sizing: content-box;
|
|
122
115
|
content: '';
|
|
123
|
-
height: var(--filled-size);
|
|
116
|
+
height: var(--radio-filled-size);
|
|
124
117
|
visibility: hidden;
|
|
125
|
-
width: var(--filled-size);
|
|
118
|
+
width: var(--radio-filled-size);
|
|
126
119
|
}
|
|
127
120
|
|
|
128
121
|
input:where([type='radio'])::after,
|
|
129
122
|
.bs-boolean :where([type="radio"])::after {
|
|
130
|
-
|
|
131
|
-
--inner-fill-color: var(--bs-white);
|
|
132
|
-
|
|
133
|
-
background-color: var(--inner-fill-color);
|
|
123
|
+
background-color: var(--bs-bg-base);
|
|
134
124
|
border-radius: 50%;
|
|
135
125
|
box-sizing: content-box;
|
|
136
126
|
content: '';
|
|
137
|
-
height: var(--inner-size);
|
|
127
|
+
height: var(--inner-dot-size, 0.375rem);
|
|
138
128
|
left: 50%;
|
|
139
129
|
position: absolute;
|
|
140
130
|
top: 50%;
|
|
141
131
|
transform: translate(-50%, -50%);
|
|
142
132
|
visibility: hidden;
|
|
143
|
-
width: var(--inner-size);
|
|
133
|
+
width: var(--inner-dot-size, 0.375rem);
|
|
144
134
|
}
|
|
145
135
|
|
|
146
136
|
/* Show checkmark, indeterminate mark, or radio dot */
|
|
137
|
+
|
|
147
138
|
.bs-checkbox:where([data-indeterminate="true"], [data-checked="true"], :checked, :indeterminate)::before,
|
|
148
139
|
.bs-checkbox:where([data-indeterminate="true"], [data-checked="true"], :checked, :indeterminate)::after,
|
|
149
140
|
input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::before,
|
|
@@ -153,61 +144,35 @@ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='r
|
|
|
153
144
|
visibility: visible;
|
|
154
145
|
}
|
|
155
146
|
|
|
156
|
-
|
|
157
|
-
.bs-checkbox:where([data-size="sm"])::before {
|
|
158
|
-
--filled-size: var(--bs-text-xs);
|
|
159
|
-
}
|
|
147
|
+
/* ---------- Sizes ----------- */
|
|
160
148
|
|
|
161
|
-
.bs-boolean:where([data-size=
|
|
162
|
-
.bs-checkbox:where([data-size="sm"])
|
|
163
|
-
|
|
164
|
-
|
|
149
|
+
.bs-boolean:where([data-size="sm"]),
|
|
150
|
+
.bs-checkbox:where([data-size="sm"]) {
|
|
151
|
+
--filled-size: 0.75rem;
|
|
152
|
+
--inner-check-height: 0.5625rem;
|
|
153
|
+
--inner-check-width: 0.3125rem;
|
|
154
|
+
--inner-dash-height: 0.125rem;
|
|
155
|
+
--inner-dash-width: .75em;
|
|
156
|
+
--inner-dot-size: 0.25rem;
|
|
165
157
|
}
|
|
166
158
|
|
|
167
|
-
|
|
168
|
-
.bs-checkbox:where([data-size="sm"][data-indeterminate="true"], [data-size="sm"]:indeterminate)::after {
|
|
169
|
-
height: 0.125rem;
|
|
170
|
-
width: .75em;
|
|
171
|
-
}
|
|
159
|
+
/* ---------- Disabled State ----------- */
|
|
172
160
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
/* Disabled State */
|
|
179
|
-
|
|
180
|
-
input:where([type='checkbox'], [type='radio']):disabled,
|
|
181
|
-
.bs-boolean :where(input):disabled,
|
|
182
|
-
.bs-checkbox:is([data-disabled="true"], :disabled) {
|
|
183
|
-
--box-shadow: var(--bs-bg-disabled);
|
|
161
|
+
:where(input[type="checkbox"], input[type="radio"]):disabled,
|
|
162
|
+
.bs-boolean:where([data-disabled="true"]),
|
|
163
|
+
.bs-checkbox:where([data-disabled="true"]) {
|
|
164
|
+
--box-shadow: var(--bs-ink-disabled);
|
|
165
|
+
--fill-bg-color: var(--bs-ink-disabled);
|
|
184
166
|
background-color: transparent;
|
|
185
167
|
cursor: default;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.bs-checkbox:where([data-disabled="true"]:not(input)) {
|
|
189
168
|
pointer-events: none;
|
|
190
169
|
}
|
|
191
170
|
|
|
192
|
-
|
|
193
|
-
input:where([type='checkbox']):indeterminate:disabled::before,
|
|
194
|
-
.bs-boolean :where(input[type="checkbox"]):checked:disabled::before,
|
|
195
|
-
.bs-boolean :where(input[type="checkbox"]):indeterminate:disabled::before,
|
|
196
|
-
.bs-checkbox:where([data-checked="true"][data-disabled="true"], :checked:disabled)::before,
|
|
197
|
-
.bs-checkbox:where([data-indeterminate="true"][data-disabled="true"], :indeterminate:disabled)::before {
|
|
198
|
-
--check-fill-color: var(--bs-bg-disabled);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
input:where([type='radio']):checked:disabled::before,
|
|
202
|
-
.bs-boolean :where(input[type="radio"]):checked:disabled::before {
|
|
203
|
-
--radio-fill-color: var(--bs-bg-disabled);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
/* Error state */
|
|
171
|
+
/* ---------- Error state ----------- */
|
|
208
172
|
|
|
209
173
|
input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-error="false"])),
|
|
210
|
-
.bs-boolean :where(input[data-error="true"]),
|
|
174
|
+
.bs-boolean :where(input[data-error="true"]), /* deprecate this one in favor of next line */
|
|
175
|
+
.bs-boolean:where([data-error="true"]),
|
|
211
176
|
.bs-checkbox:where([data-error="true"]) {
|
|
212
177
|
--box-shadow: var(--bs-red-base);
|
|
213
178
|
--outline-color: var(--bs-red-base);
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
:where(:disabled, [data-disabled="true"]) + .bs-character-count,
|
|
11
11
|
:where(:disabled, [data-disabled="true"]) .bs-character-count,
|
|
12
12
|
.bs-character-count:where([data-disabled="true"]) {
|
|
13
|
-
|
|
13
|
+
visibility: hidden;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.bs-character-count:where([data-error="true"]) {
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
@mixin form-hints() {
|
|
2
2
|
.bs-hint {
|
|
3
3
|
--hint-color: var(--bs-ink-light);
|
|
4
|
-
min-width: 0;
|
|
5
4
|
color: var(--hint-color);
|
|
6
5
|
font-size: var(--bs-text-xs);
|
|
7
|
-
padding: 0;
|
|
8
|
-
margin: 0;
|
|
9
6
|
list-style: none;
|
|
7
|
+
margin: 0;
|
|
8
|
+
min-width: 0;
|
|
10
9
|
overflow-wrap: break-word;
|
|
10
|
+
padding: 0;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.bs-hint:where([data-error]:not([data-error="false"])) {
|
|
14
14
|
--hint-color: var(--bs-ink-red);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
:where(:disabled, [data-disabled="true"]) .bs-hint {
|
|
18
|
+
--hint-color: var(--bs-ink-disabled);
|
|
19
|
+
}
|
|
20
|
+
|
|
17
21
|
}
|
|
18
22
|
|
|
@@ -22,7 +22,7 @@ textarea,
|
|
|
22
22
|
select,
|
|
23
23
|
:is(.bs-input, .bs-select, .bs-textarea) {
|
|
24
24
|
appearance: none;
|
|
25
|
-
background-color: var(--input-bg,
|
|
25
|
+
background-color: var(--input-bg, transparent);
|
|
26
26
|
border-color: var(--input-border, var(--bs-violet-medium));
|
|
27
27
|
border-radius: 0.25rem;
|
|
28
28
|
border-style: solid;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@mixin modal() {
|
|
2
2
|
.bs-modal {
|
|
3
|
-
background-color: var(--bs-bg-base-
|
|
3
|
+
background-color: var(--bs-bg-base-to-medium);
|
|
4
4
|
border-radius: 4px;
|
|
5
5
|
box-shadow: var(--bs-shadow-contentHigh);
|
|
6
6
|
left: 1.5rem;
|
|
@@ -55,5 +55,6 @@
|
|
|
55
55
|
width: 35rem;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
+
|
|
58
59
|
}
|
|
59
60
|
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
/* Hover or data-selected */
|
|
96
96
|
.bs-dropdown-options :where(li:not([role="separator"]):hover),
|
|
97
97
|
.bs-dropdown-options :where(li[data-selected]) {
|
|
98
|
-
background-color: var(--bs-bg-medium);
|
|
98
|
+
background-color: var(--bs-bg-medium-to-light);
|
|
99
99
|
border-left: 4px solid var(--bs-ink-blue);
|
|
100
100
|
color: var(--bs-ink-blue);
|
|
101
101
|
outline: none;
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
--dropdown-width: 100%;
|
|
28
28
|
--dropdown-transform: translate(0, 100%);
|
|
29
29
|
|
|
30
|
-
background-color: var(--bs-bg-base-
|
|
30
|
+
background-color: var(--bs-bg-base-to-medium);
|
|
31
31
|
border-radius: 4px;
|
|
32
32
|
bottom: var(--dropdown-bottom);
|
|
33
33
|
box-shadow: var(--bs-shadow-contentMedium);
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
.bs-boolean:where([data-size='sm']) input {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
height: .75rem;
|
|
12
|
+
width: .75rem;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.bs-boolean label {
|
|
@@ -38,11 +38,8 @@
|
|
|
38
38
|
|
|
39
39
|
:where(input[type='checkbox'], input[type='radio']),
|
|
40
40
|
:is(.bs-boolean :where(input), .bs-checkbox) { /* .bs-checkbox added to accommodate 'fake' cbs */
|
|
41
|
-
--box-shadow: var(--bs-ink-base);
|
|
42
|
-
|
|
43
41
|
appearance: none;
|
|
44
|
-
|
|
45
|
-
box-shadow: inset 0 0 0 0.125rem var(--box-shadow);
|
|
42
|
+
box-shadow: inset 0 0 0 0.125rem var(--box-shadow, var(--bs-ink-base));
|
|
46
43
|
cursor: pointer;
|
|
47
44
|
display: grid;
|
|
48
45
|
height: 1rem;
|
|
@@ -70,79 +67,73 @@
|
|
|
70
67
|
border-radius: 50%;
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
/* Checkbox's checkmark */
|
|
70
|
+
/* Checkbox's checkbox, checkmark. Checkmark is hidden unless checked/indeterminate. */
|
|
74
71
|
input:where([type='checkbox'])::before,
|
|
75
72
|
:is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::before {
|
|
76
|
-
--filled-size: 1rem;
|
|
77
|
-
--check-fill-color: var(--bs-blue-base);
|
|
78
|
-
|
|
73
|
+
--cb-filled-size: var(--filled-size, 1rem);
|
|
79
74
|
content: '';
|
|
80
75
|
border-radius: 0.125rem;
|
|
81
|
-
box-shadow: inset var(--filled-size) var(--filled-size) var(--
|
|
82
|
-
height: var(--filled-size);
|
|
76
|
+
box-shadow: inset var(--cb-filled-size) var(--cb-filled-size) var(--fill-bg-color, var(--bs-blue-base));
|
|
77
|
+
height: var(--cb-filled-size);
|
|
83
78
|
visibility: hidden;
|
|
84
|
-
width: var(--filled-size);
|
|
79
|
+
width: var(--cb-filled-size);
|
|
85
80
|
}
|
|
86
81
|
|
|
87
82
|
input:where([type='checkbox'])::after,
|
|
88
83
|
:is(.bs-boolean :where([type="checkbox"]), .bs-checkbox)::after {
|
|
89
|
-
border: solid var(--bs-
|
|
84
|
+
border: solid var(--bs-bg-base);
|
|
90
85
|
border-width: 0 0.125rem 0.125rem 0;
|
|
91
86
|
content: '';
|
|
92
|
-
height: 0.75em;
|
|
87
|
+
height: var(--inner-check-height, 0.75em);
|
|
93
88
|
left: 50%;
|
|
94
89
|
position: absolute;
|
|
95
90
|
top: 50%;
|
|
96
91
|
transform-origin: center;
|
|
97
92
|
transform: translate(-50%, -60%) rotate(45deg);
|
|
98
93
|
visibility: hidden;
|
|
99
|
-
width: 0.375em;
|
|
94
|
+
width: var(--inner-check-width, 0.375em);
|
|
100
95
|
}
|
|
101
96
|
|
|
102
97
|
input:where([type='checkbox']):where(:indeterminate)::after,
|
|
103
98
|
.bs-boolean :where([type="checkbox"]):where(:indeterminate)::after,
|
|
104
99
|
.bs-checkbox:where([data-indeterminate="true"], :indeterminate)::after {
|
|
105
100
|
border: none;
|
|
106
|
-
background-color: var(--bs-
|
|
107
|
-
height: 0.125rem;
|
|
101
|
+
background-color: var(--bs-bg-base);
|
|
102
|
+
height: var(--inner-dash-height, 0.125rem);
|
|
108
103
|
transform: translate(-50%, -0.0625rem) rotate(0deg);
|
|
109
|
-
width: 0.625em;
|
|
104
|
+
width: var(--inner-dash-width, 0.625em);
|
|
110
105
|
}
|
|
111
106
|
|
|
112
|
-
/* Radio
|
|
107
|
+
/* Radio outer circle, Radio dot. Dot is hidden unless checked. */
|
|
113
108
|
input:where([type='radio'])::before,
|
|
114
109
|
.bs-boolean :where([type="radio"])::before {
|
|
115
|
-
--filled-size: 1rem;
|
|
116
|
-
--
|
|
117
|
-
|
|
118
|
-
background-color: var(--radio-fill-color);
|
|
110
|
+
--radio-filled-size: var(--filled-size, 1rem);
|
|
111
|
+
background-color: var(--fill-bg-color, var(--bs-blue-base));
|
|
119
112
|
border-radius: 50%;
|
|
120
113
|
box-sizing: content-box;
|
|
121
114
|
content: '';
|
|
122
|
-
height: var(--filled-size);
|
|
115
|
+
height: var(--radio-filled-size);
|
|
123
116
|
visibility: hidden;
|
|
124
|
-
width: var(--filled-size);
|
|
117
|
+
width: var(--radio-filled-size);
|
|
125
118
|
}
|
|
126
119
|
|
|
127
120
|
input:where([type='radio'])::after,
|
|
128
121
|
.bs-boolean :where([type="radio"])::after {
|
|
129
|
-
|
|
130
|
-
--inner-fill-color: var(--bs-white);
|
|
131
|
-
|
|
132
|
-
background-color: var(--inner-fill-color);
|
|
122
|
+
background-color: var(--bs-bg-base);
|
|
133
123
|
border-radius: 50%;
|
|
134
124
|
box-sizing: content-box;
|
|
135
125
|
content: '';
|
|
136
|
-
height: var(--inner-size);
|
|
126
|
+
height: var(--inner-dot-size, 0.375rem);
|
|
137
127
|
left: 50%;
|
|
138
128
|
position: absolute;
|
|
139
129
|
top: 50%;
|
|
140
130
|
transform: translate(-50%, -50%);
|
|
141
131
|
visibility: hidden;
|
|
142
|
-
width: var(--inner-size);
|
|
132
|
+
width: var(--inner-dot-size, 0.375rem);
|
|
143
133
|
}
|
|
144
134
|
|
|
145
135
|
/* Show checkmark, indeterminate mark, or radio dot */
|
|
136
|
+
|
|
146
137
|
.bs-checkbox:where([data-indeterminate="true"], [data-checked="true"], :checked, :indeterminate)::before,
|
|
147
138
|
.bs-checkbox:where([data-indeterminate="true"], [data-checked="true"], :checked, :indeterminate)::after,
|
|
148
139
|
input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='radio']:checked)::before,
|
|
@@ -152,61 +143,35 @@ input:where([type='checkbox']:checked, [type='checkbox']:indeterminate, [type='r
|
|
|
152
143
|
visibility: visible;
|
|
153
144
|
}
|
|
154
145
|
|
|
155
|
-
|
|
156
|
-
.bs-checkbox:where([data-size="sm"])::before {
|
|
157
|
-
--filled-size: var(--bs-text-xs);
|
|
158
|
-
}
|
|
146
|
+
/* ---------- Sizes ----------- */
|
|
159
147
|
|
|
160
|
-
.bs-boolean:where([data-size=
|
|
161
|
-
.bs-checkbox:where([data-size="sm"])
|
|
162
|
-
|
|
163
|
-
|
|
148
|
+
.bs-boolean:where([data-size="sm"]),
|
|
149
|
+
.bs-checkbox:where([data-size="sm"]) {
|
|
150
|
+
--filled-size: 0.75rem;
|
|
151
|
+
--inner-check-height: 0.5625rem;
|
|
152
|
+
--inner-check-width: 0.3125rem;
|
|
153
|
+
--inner-dash-height: 0.125rem;
|
|
154
|
+
--inner-dash-width: .75em;
|
|
155
|
+
--inner-dot-size: 0.25rem;
|
|
164
156
|
}
|
|
165
157
|
|
|
166
|
-
|
|
167
|
-
.bs-checkbox:where([data-size="sm"][data-indeterminate="true"], [data-size="sm"]:indeterminate)::after {
|
|
168
|
-
height: 0.125rem;
|
|
169
|
-
width: .75em;
|
|
170
|
-
}
|
|
158
|
+
/* ---------- Disabled State ----------- */
|
|
171
159
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
/* Disabled State */
|
|
178
|
-
|
|
179
|
-
input:where([type='checkbox'], [type='radio']):disabled,
|
|
180
|
-
.bs-boolean :where(input):disabled,
|
|
181
|
-
.bs-checkbox:is([data-disabled="true"], :disabled) {
|
|
182
|
-
--box-shadow: var(--bs-bg-disabled);
|
|
160
|
+
:where(input[type="checkbox"], input[type="radio"]):disabled,
|
|
161
|
+
.bs-boolean:where([data-disabled="true"]),
|
|
162
|
+
.bs-checkbox:where([data-disabled="true"]) {
|
|
163
|
+
--box-shadow: var(--bs-ink-disabled);
|
|
164
|
+
--fill-bg-color: var(--bs-ink-disabled);
|
|
183
165
|
background-color: transparent;
|
|
184
166
|
cursor: default;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
.bs-checkbox:where([data-disabled="true"]:not(input)) {
|
|
188
167
|
pointer-events: none;
|
|
189
168
|
}
|
|
190
169
|
|
|
191
|
-
|
|
192
|
-
input:where([type='checkbox']):indeterminate:disabled::before,
|
|
193
|
-
.bs-boolean :where(input[type="checkbox"]):checked:disabled::before,
|
|
194
|
-
.bs-boolean :where(input[type="checkbox"]):indeterminate:disabled::before,
|
|
195
|
-
.bs-checkbox:where([data-checked="true"][data-disabled="true"], :checked:disabled)::before,
|
|
196
|
-
.bs-checkbox:where([data-indeterminate="true"][data-disabled="true"], :indeterminate:disabled)::before {
|
|
197
|
-
--check-fill-color: var(--bs-bg-disabled);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
input:where([type='radio']):checked:disabled::before,
|
|
201
|
-
.bs-boolean :where(input[type="radio"]):checked:disabled::before {
|
|
202
|
-
--radio-fill-color: var(--bs-bg-disabled);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
/* Error state */
|
|
170
|
+
/* ---------- Error state ----------- */
|
|
207
171
|
|
|
208
172
|
input:where([type='checkbox'], [type='radio'])[data-error]:where(:not([data-error="false"])),
|
|
209
|
-
.bs-boolean :where(input[data-error="true"]),
|
|
173
|
+
.bs-boolean :where(input[data-error="true"]), /* deprecate this one in favor of next line */
|
|
174
|
+
.bs-boolean:where([data-error="true"]),
|
|
210
175
|
.bs-checkbox:where([data-error="true"]) {
|
|
211
176
|
--box-shadow: var(--bs-red-base);
|
|
212
177
|
--outline-color: var(--bs-red-base);
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
:where(:disabled, [data-disabled="true"]) + .bs-character-count,
|
|
10
10
|
:where(:disabled, [data-disabled="true"]) .bs-character-count,
|
|
11
11
|
.bs-character-count:where([data-disabled="true"]) {
|
|
12
|
-
|
|
12
|
+
visibility: hidden;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.bs-character-count:where([data-error="true"]) {
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
.bs-hint {
|
|
2
2
|
--hint-color: var(--bs-ink-light);
|
|
3
|
-
min-width: 0;
|
|
4
3
|
color: var(--hint-color);
|
|
5
4
|
font-size: var(--bs-text-xs);
|
|
6
|
-
padding: 0;
|
|
7
|
-
margin: 0;
|
|
8
5
|
list-style: none;
|
|
6
|
+
margin: 0;
|
|
7
|
+
min-width: 0;
|
|
9
8
|
overflow-wrap: break-word;
|
|
9
|
+
padding: 0;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.bs-hint:where([data-error]:not([data-error="false"])) {
|
|
13
13
|
--hint-color: var(--bs-ink-red);
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
:where(:disabled, [data-disabled="true"]) .bs-hint {
|
|
17
|
+
--hint-color: var(--bs-ink-disabled);
|
|
18
|
+
}
|