@wwtdev/bsds-css 2.5.0 → 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 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
- ### 3. Dark Mode-compatible "semantic" color utilities
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
- ### 4. Order matters!
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).
@@ -1,6 +1,6 @@
1
1
  @mixin badge() {
2
2
  .bs-badge {
3
- --badge-bg: var(--bs-red-base);
3
+ --badge-bg: var(--bs-red-400);
4
4
  --badge-text: var(--bs-white);
5
5
  display: inline-block;
6
6
  }
@@ -34,7 +34,7 @@
34
34
  }
35
35
 
36
36
  .bs-banner :where(.bs-banner-content p a) {
37
- color: var(--bs-pink-light);
37
+ color: var(--bs-blue-lightest);
38
38
  text-decoration: underline;
39
39
  }
40
40
 
@@ -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-elevated);
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
- width: var(--bs-text-xs);
13
- height: var(--bs-text-xs);
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
- background-color: var(--bs-bg-base);
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(--check-fill-color);
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-white);
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-white);
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's dot */
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
- --radio-fill-color: var(--bs-blue-base);
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
- --inner-size: 0.375rem;
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
- .bs-boolean:where([data-size='sm']) input::before,
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='sm']) input[type='checkbox']::after,
162
- .bs-checkbox:where([data-size="sm"])::after {
163
- height: 0.5625rem;
164
- width: 0.3125rem;
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
- .bs-boolean:where([data-size='sm']) input[type='checkbox']:where(:indeterminate)::after,
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
- .bs-boolean:where([data-size='sm']) input[type='radio']::after {
174
- --inner-size: 0.25rem;
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
- input:where([type='checkbox']):checked:disabled::before,
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
- color: var(--bs-ink-disabled);
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
 
@@ -7,7 +7,7 @@
7
7
  .bs-input-addon {
8
8
  --input-border: var(--bs-violet-300);
9
9
  align-items: center;
10
- background-color: var(--input-bg, var(--bs-bg-base));
10
+ background-color: var(--input-bg, transparent);
11
11
  border-radius: .25rem;
12
12
  color: var(--bs-ink-base);
13
13
  display: flex;
@@ -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, var(--bs-bg-base));
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-elevated);
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;
@@ -31,6 +31,9 @@
31
31
 
32
32
  .bs-modal :where(.modal-title) {
33
33
  flex-grow: 1;
34
+ font-size: var(--bs-text-md);
35
+ font-weight: 600;
36
+ margin: 0;
34
37
  }
35
38
 
36
39
  .bs-modal :where(.only-close-button-modal-header) {
@@ -52,5 +55,6 @@
52
55
  width: 35rem;
53
56
  }
54
57
  }
58
+
55
59
  }
56
60
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  .bs-timeline :where(.bs-step-item) {
24
24
  align-items: center;
25
- color: var(--step-color, var(--bs-ink-disabled));
25
+ color: var(--step-color, var(--bs-ink-light));
26
26
  display: flex;
27
27
  flex-direction: column;
28
28
  padding-inline: 1rem;
@@ -1,5 +1,5 @@
1
1
  .bs-badge {
2
- --badge-bg: var(--bs-red-base);
2
+ --badge-bg: var(--bs-red-400);
3
3
  --badge-text: var(--bs-white);
4
4
  display: inline-block;
5
5
  }
@@ -33,7 +33,7 @@
33
33
  }
34
34
 
35
35
  .bs-banner :where(.bs-banner-content p a) {
36
- color: var(--bs-pink-light);
36
+ color: var(--bs-blue-lightest);
37
37
  text-decoration: underline;
38
38
  }
39
39
 
@@ -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-elevated);
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
- width: var(--bs-text-xs);
12
- height: var(--bs-text-xs);
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
- background-color: var(--bs-bg-base);
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(--check-fill-color);
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-white);
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-white);
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's dot */
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
- --radio-fill-color: var(--bs-blue-base);
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
- --inner-size: 0.375rem;
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
- .bs-boolean:where([data-size='sm']) input::before,
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='sm']) input[type='checkbox']::after,
161
- .bs-checkbox:where([data-size="sm"])::after {
162
- height: 0.5625rem;
163
- width: 0.3125rem;
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
- .bs-boolean:where([data-size='sm']) input[type='checkbox']:where(:indeterminate)::after,
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
- .bs-boolean:where([data-size='sm']) input[type='radio']::after {
173
- --inner-size: 0.25rem;
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
- input:where([type='checkbox']):checked:disabled::before,
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
- color: var(--bs-ink-disabled);
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
+ }