@wwtdev/bsds-css 2.5.1 → 2.6.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 (34) hide show
  1. package/README.md +36 -8
  2. package/dist/components/_badge.scss +1 -1
  3. package/dist/components/_banner.scss +1 -1
  4. package/dist/components/_buttons.scss +85 -27
  5. package/dist/components/_circle-buttons.scss +108 -49
  6. package/dist/components/_dropdown-options.scss +1 -1
  7. package/dist/components/_dropdown.scss +1 -1
  8. package/dist/components/_filter-buttons.scss +15 -8
  9. package/dist/components/_form-booleans.scss +41 -76
  10. package/dist/components/_form-character-count.scss +1 -1
  11. package/dist/components/_form-hints.scss +7 -3
  12. package/dist/components/_form-input-composite.scss +1 -1
  13. package/dist/components/_form-text-fields.scss +1 -1
  14. package/dist/components/_modal.scss +2 -1
  15. package/dist/components/_timeline.scss +1 -1
  16. package/dist/components/badge.css +1 -1
  17. package/dist/components/banner.css +1 -1
  18. package/dist/components/buttons.css +84 -26
  19. package/dist/components/circle-buttons.css +108 -49
  20. package/dist/components/dropdown-options.css +1 -1
  21. package/dist/components/dropdown.css +1 -1
  22. package/dist/components/filter-buttons.css +15 -8
  23. package/dist/components/form-booleans.css +41 -76
  24. package/dist/components/form-character-count.css +1 -1
  25. package/dist/components/form-hints.css +7 -3
  26. package/dist/components/form-input-composite.css +1 -1
  27. package/dist/components/form-text-fields.css +1 -1
  28. package/dist/components/modal.css +2 -2
  29. package/dist/components/timeline.css +1 -1
  30. package/dist/wwt-bsds-preset.js +3 -0
  31. package/dist/wwt-bsds-wc-base.css +5 -2
  32. package/dist/wwt-bsds.css +280 -191
  33. package/dist/wwt-bsds.min.css +1 -1
  34. package/package.json +1 -1
@@ -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;
@@ -55,5 +55,6 @@
55
55
  width: 35rem;
56
56
  }
57
57
  }
58
+
58
59
  }
59
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
 
@@ -1,21 +1,47 @@
1
+ /*
2
+ --btn-main: (this is doing too much.. look into backwards-compatible way to break this up)
3
+ background color (base)
4
+ focus ring color
5
+
6
+ background colors:
7
+ --btn-secondary: background color (active, hover)
8
+ --btn-light: background color (ghost hover, ghost focus)
9
+
10
+ border / box-shadow:
11
+ --btn-ghost-ink: the box shadow color for ghost buttons is synced to ink
12
+ --btn-highlight: box shadow color (w/ --btn-main) (active)
13
+
14
+ padding:
15
+ --btn-padding: padding (changes by size, and on text btns)
16
+
17
+ text color:
18
+ --btn-ink: text color
19
+ --btn-ghost-ink: text color (ghost)
20
+
21
+ */
22
+
1
23
  .bs-button {
2
- --btn-main: var(--bs-blue-400);
3
- --btn-secondary: var(--bs-blue-medium);
4
- --btn-highlight: var(--bs-blue-100);
5
- --btn-padding: .25rem .75rem;
6
24
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
7
25
  --btn-ghost-ink: var(--bs-ink-blue);
26
+ --btn-highlight: var(--bs-blue-100);
8
27
  --btn-ink: var(--bs-white);
28
+ --btn-main: var(--bs-blue-400);
29
+ --btn-padding: .25rem .75rem;
30
+ --btn-secondary: var(--bs-blue-medium);
31
+ --btn-text-size: var(--bs-text-md);
32
+ --btn-weight: 600;
33
+ --btn-height: 2.5rem;
9
34
  align-items: center;
10
35
  background-color: var(--btn-main);
11
36
  border: none;
12
37
  border-radius: 0.25rem;
13
38
  color: var(--btn-ink);
39
+ column-gap: var(--bs-space-2);
14
40
  cursor: pointer;
15
41
  display: inline-flex;
16
- font-size: var(--btn-text-size, var(--bs-text-md));
17
- font-weight: var(--btn-weight, 600);
18
- height: var(--btn-height, 2.5rem);
42
+ font-size: var(--btn-text-size);
43
+ font-weight: var(--btn-weight);
44
+ height: var(--btn-height);
19
45
  justify-content: center;
20
46
  line-height: 1.5;
21
47
  outline: 2px solid transparent;
@@ -32,9 +58,9 @@
32
58
 
33
59
  .bs-button:active {
34
60
  background-color: var(--btn-secondary);
35
- transform: scale(0.97);
36
- transform-origin: center;
37
61
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
62
+ transform-origin: center;
63
+ transform: scale(0.97);
38
64
  }
39
65
 
40
66
  /* ------------ Focus Styles ------------ */
@@ -73,7 +99,7 @@
73
99
  --btn-light: var(--bs-blue-10);
74
100
  --btn-secondary: var(--bs-blue-10);
75
101
  background-color: transparent;
76
- box-shadow: inset 0 0 0 1px var(--btn-main);
102
+ box-shadow: inset 0 0 0 1px var(--btn-ghost-ink);
77
103
  }
78
104
  .bs-button:where([data-ghost]:not([data-ghost="false"]))::before {
79
105
  border-radius: 0.4375rem;
@@ -90,46 +116,73 @@
90
116
 
91
117
  /* ------------ VARIANTS ------------ */
92
118
  .bs-button:where([data-variant^='secondary']) {
119
+ --btn-ghost-ink: var(--bs-ink-plum);
120
+ --btn-highlight: var(--bs-plum-100);
121
+ --btn-light: var(--bs-plum-10);
93
122
  --btn-main: var(--bs-plum-400);
94
123
  --btn-secondary: var(--bs-plum-medium);
95
- --btn-light: var(--bs-plum-10);
96
- --btn-highlight: var(--bs-plum-100);
97
- --btn-ghost-ink: var(--bs-ink-plum);
98
124
  }
99
125
  .dark .bs-button:where([data-variant^='secondary']) {
126
+ --btn-highlight: var(--bs-plum-400);
127
+ --btn-light: var(--bs-navy-400);
100
128
  --btn-main: var(--bs-plum-200);
101
129
  --btn-secondary: var(--bs-plum-300);
102
- --btn-light: var(--bs-navy-400);
103
- --btn-highlight: var(--bs-plum-400);
104
130
  }
105
131
  .bs-button:where([data-variant^='positive']) {
132
+ --btn-ghost-ink: var(--bs-ink-purple);
133
+ --btn-highlight: var(--bs-purple-100);
134
+ --btn-light: var(--bs-purple-10);
106
135
  --btn-main: var(--bs-purple-400);
107
136
  --btn-secondary: var(--bs-purple-medium);
108
- --btn-light: var(--bs-purple-10);
109
- --btn-highlight: var(--bs-purple-100);
110
- --btn-ghost-ink: var(--bs-ink-purple);
111
137
  }
112
138
  .bs-button:where([data-variant^='warning']) {
139
+ --btn-ghost-ink: var(--bs-ink-orange);
140
+ --btn-highlight: var(--bs-orange-100);
141
+ --btn-light: var(--bs-orange-10);
113
142
  --btn-main: var(--bs-orange-warning);
114
143
  --btn-secondary: var(--bs-orange-base);
115
- --btn-light: var(--bs-orange-10);
116
- --btn-highlight: var(--bs-orange-100);
117
- --btn-ghost-ink: var(--bs-ink-orange);
118
144
  }
119
145
  .bs-button:where([data-variant^='negative']) {
146
+ --btn-ghost-ink: var(--bs-ink-red);
147
+ --btn-highlight: var(--bs-red-100);
148
+ --btn-light: var(--bs-red-10);
120
149
  --btn-main: var(--bs-red-400);
121
150
  --btn-secondary: var(--bs-red-medium);
122
- --btn-light: var(--bs-red-10);
123
- --btn-highlight: var(--bs-red-100);
124
- --btn-ghost-ink: var(--bs-ink-red);
151
+ }
152
+
153
+ /* pink variant */
154
+ .bs-button:where([data-variant^='pink']) {
155
+ --btn-ghost-ink: var(--bs-ink-pink);
156
+ --btn-highlight: var(--bs-pink-400);
157
+ --btn-light: var(--bs-pink-10);
158
+ --btn-main: var(--bs-pink-400);
159
+ --btn-secondary: var(--bs-pink-300);
160
+ }
161
+
162
+ /* royal blue variant */
163
+ .bs-button:where([data-variant^='royal']) {
164
+ --btn-ghost-ink: var(--bs-ink-royal);
165
+ --btn-highlight: var(--bs-royal-400);
166
+ --btn-light: var(--bs-royal-10);
167
+ --btn-main: var(--bs-royal-400);
168
+ --btn-secondary: var(--bs-royal-300);
169
+ }
170
+
171
+ /* white variant - for dark backgrounds + ghost btn only */
172
+ .bs-button:where([data-variant^='white'][data-ghost]:not([data-ghost="false"])) {
173
+ --btn-ghost-ink: var(--bs-ink-white);
174
+ --btn-highlight: var(--bs-ink-white);
175
+ --btn-light: var(--bs-white-10);
176
+ --btn-main: var(--bs-ink-white);
125
177
  }
126
178
 
127
179
  /* ------------ Text Button ------------ */
128
180
  .bs-button:where([data-text]:not([data-text="false"])) {
181
+ --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
129
182
  --btn-height: auto;
130
183
  --btn-ink: var(--bs-ink-blue);
131
184
  --btn-padding: 0;
132
- --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
185
+ --btn-secondary: transparent;
133
186
  --btn-text-size: var(--bs-text-md);
134
187
  --btn-weight: 400;
135
188
  background-color: transparent;
@@ -149,6 +202,11 @@
149
202
  transform: none;
150
203
  }
151
204
 
205
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])),
206
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])):hover {
207
+ --btn-ink: var(--bs-ink-red);
208
+ }
209
+
152
210
  /* ------------ Button Sizes, Media-based Text Sizing -------------- */
153
211
  /* Std button: Mobile text size, DT text size */
154
212
  .bs-button {
@@ -204,7 +262,7 @@
204
262
 
205
263
  .bs-button:where([data-ghost]:not([data-ghost="false"])):disabled,
206
264
  .bs-button:where([data-ghost]:not([data-ghost="false"]))[aria-disabled="true"] {
207
- box-shadow: inset 0 0 0 1px var(--bs-gray-400);
265
+ --btn-ghost-ink: var(--bs-ink-disabled);
208
266
  }
209
267
 
210
268
  .bs-button:where([data-text]:not([data-text="false"])):disabled,