@wwtdev/bsds-css 2.5.2 → 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.
@@ -1,22 +1,48 @@
1
1
  @mixin buttons() {
2
- .bs-button {
3
- --btn-main: var(--bs-blue-400);
4
- --btn-secondary: var(--bs-blue-medium);
5
- --btn-highlight: var(--bs-blue-100);
6
- --btn-padding: .25rem .75rem;
2
+ /*
3
+ --btn-main: (this is doing too much.. look into backwards-compatible way to break this up)
4
+ background color (base)
5
+ focus ring color
6
+
7
+ background colors:
8
+ --btn-secondary: background color (active, hover)
9
+ --btn-light: background color (ghost hover, ghost focus)
10
+
11
+ border / box-shadow:
12
+ --btn-ghost-ink: the box shadow color for ghost buttons is synced to ink
13
+ --btn-highlight: box shadow color (w/ --btn-main) (active)
14
+
15
+ padding:
16
+ --btn-padding: padding (changes by size, and on text btns)
17
+
18
+ text color:
19
+ --btn-ink: text color
20
+ --btn-ghost-ink: text color (ghost)
21
+
22
+ */
23
+
24
+ .bs-button {
7
25
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
8
26
  --btn-ghost-ink: var(--bs-ink-blue);
27
+ --btn-highlight: var(--bs-blue-100);
9
28
  --btn-ink: var(--bs-white);
29
+ --btn-main: var(--bs-blue-400);
30
+ --btn-padding: .25rem .75rem;
31
+ --btn-secondary: var(--bs-blue-medium);
32
+ --btn-text-size: var(--bs-text-md);
33
+ --btn-weight: 600;
34
+ --btn-height: 2.5rem;
10
35
  align-items: center;
11
36
  background-color: var(--btn-main);
12
37
  border: none;
13
38
  border-radius: 0.25rem;
14
39
  color: var(--btn-ink);
40
+ column-gap: var(--bs-space-2);
15
41
  cursor: pointer;
16
42
  display: inline-flex;
17
- font-size: var(--btn-text-size, var(--bs-text-md));
18
- font-weight: var(--btn-weight, 600);
19
- height: var(--btn-height, 2.5rem);
43
+ font-size: var(--btn-text-size);
44
+ font-weight: var(--btn-weight);
45
+ height: var(--btn-height);
20
46
  justify-content: center;
21
47
  line-height: 1.5;
22
48
  outline: 2px solid transparent;
@@ -33,9 +59,9 @@
33
59
 
34
60
  .bs-button:active {
35
61
  background-color: var(--btn-secondary);
36
- transform: scale(0.97);
37
- transform-origin: center;
38
62
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
63
+ transform-origin: center;
64
+ transform: scale(0.97);
39
65
  }
40
66
 
41
67
  /* ------------ Focus Styles ------------ */
@@ -74,7 +100,7 @@
74
100
  --btn-light: var(--bs-blue-10);
75
101
  --btn-secondary: var(--bs-blue-10);
76
102
  background-color: transparent;
77
- box-shadow: inset 0 0 0 1px var(--btn-main);
103
+ box-shadow: inset 0 0 0 1px var(--btn-ghost-ink);
78
104
  }
79
105
  .bs-button:where([data-ghost]:not([data-ghost="false"]))::before {
80
106
  border-radius: 0.4375rem;
@@ -91,46 +117,73 @@
91
117
 
92
118
  /* ------------ VARIANTS ------------ */
93
119
  .bs-button:where([data-variant^='secondary']) {
120
+ --btn-ghost-ink: var(--bs-ink-plum);
121
+ --btn-highlight: var(--bs-plum-100);
122
+ --btn-light: var(--bs-plum-10);
94
123
  --btn-main: var(--bs-plum-400);
95
124
  --btn-secondary: var(--bs-plum-medium);
96
- --btn-light: var(--bs-plum-10);
97
- --btn-highlight: var(--bs-plum-100);
98
- --btn-ghost-ink: var(--bs-ink-plum);
99
125
  }
100
126
  .dark .bs-button:where([data-variant^='secondary']) {
127
+ --btn-highlight: var(--bs-plum-400);
128
+ --btn-light: var(--bs-navy-400);
101
129
  --btn-main: var(--bs-plum-200);
102
130
  --btn-secondary: var(--bs-plum-300);
103
- --btn-light: var(--bs-navy-400);
104
- --btn-highlight: var(--bs-plum-400);
105
131
  }
106
132
  .bs-button:where([data-variant^='positive']) {
133
+ --btn-ghost-ink: var(--bs-ink-purple);
134
+ --btn-highlight: var(--bs-purple-100);
135
+ --btn-light: var(--bs-purple-10);
107
136
  --btn-main: var(--bs-purple-400);
108
137
  --btn-secondary: var(--bs-purple-medium);
109
- --btn-light: var(--bs-purple-10);
110
- --btn-highlight: var(--bs-purple-100);
111
- --btn-ghost-ink: var(--bs-ink-purple);
112
138
  }
113
139
  .bs-button:where([data-variant^='warning']) {
140
+ --btn-ghost-ink: var(--bs-ink-orange);
141
+ --btn-highlight: var(--bs-orange-100);
142
+ --btn-light: var(--bs-orange-10);
114
143
  --btn-main: var(--bs-orange-warning);
115
144
  --btn-secondary: var(--bs-orange-base);
116
- --btn-light: var(--bs-orange-10);
117
- --btn-highlight: var(--bs-orange-100);
118
- --btn-ghost-ink: var(--bs-ink-orange);
119
145
  }
120
146
  .bs-button:where([data-variant^='negative']) {
147
+ --btn-ghost-ink: var(--bs-ink-red);
148
+ --btn-highlight: var(--bs-red-100);
149
+ --btn-light: var(--bs-red-10);
121
150
  --btn-main: var(--bs-red-400);
122
151
  --btn-secondary: var(--bs-red-medium);
123
- --btn-light: var(--bs-red-10);
124
- --btn-highlight: var(--bs-red-100);
125
- --btn-ghost-ink: var(--bs-ink-red);
152
+ }
153
+
154
+ /* pink variant */
155
+ .bs-button:where([data-variant^='pink']) {
156
+ --btn-ghost-ink: var(--bs-ink-pink);
157
+ --btn-highlight: var(--bs-pink-400);
158
+ --btn-light: var(--bs-pink-10);
159
+ --btn-main: var(--bs-pink-400);
160
+ --btn-secondary: var(--bs-pink-300);
161
+ }
162
+
163
+ /* royal blue variant */
164
+ .bs-button:where([data-variant^='royal']) {
165
+ --btn-ghost-ink: var(--bs-ink-royal);
166
+ --btn-highlight: var(--bs-royal-400);
167
+ --btn-light: var(--bs-royal-10);
168
+ --btn-main: var(--bs-royal-400);
169
+ --btn-secondary: var(--bs-royal-300);
170
+ }
171
+
172
+ /* white variant - for dark backgrounds + ghost btn only */
173
+ .bs-button:where([data-variant^='white'][data-ghost]:not([data-ghost="false"])) {
174
+ --btn-ghost-ink: var(--bs-ink-white);
175
+ --btn-highlight: var(--bs-ink-white);
176
+ --btn-light: var(--bs-white-10);
177
+ --btn-main: var(--bs-ink-white);
126
178
  }
127
179
 
128
180
  /* ------------ Text Button ------------ */
129
181
  .bs-button:where([data-text]:not([data-text="false"])) {
182
+ --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
130
183
  --btn-height: auto;
131
184
  --btn-ink: var(--bs-ink-blue);
132
185
  --btn-padding: 0;
133
- --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
186
+ --btn-secondary: transparent;
134
187
  --btn-text-size: var(--bs-text-md);
135
188
  --btn-weight: 400;
136
189
  background-color: transparent;
@@ -150,6 +203,11 @@
150
203
  transform: none;
151
204
  }
152
205
 
206
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])),
207
+ .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])):hover {
208
+ --btn-ink: var(--bs-ink-red);
209
+ }
210
+
153
211
  /* ------------ Button Sizes, Media-based Text Sizing -------------- */
154
212
  /* Std button: Mobile text size, DT text size */
155
213
  .bs-button {
@@ -205,7 +263,7 @@
205
263
 
206
264
  .bs-button:where([data-ghost]:not([data-ghost="false"])):disabled,
207
265
  .bs-button:where([data-ghost]:not([data-ghost="false"]))[aria-disabled="true"] {
208
- box-shadow: inset 0 0 0 1px var(--bs-gray-400);
266
+ --btn-ghost-ink: var(--bs-ink-disabled);
209
267
  }
210
268
 
211
269
  .bs-button:where([data-text]:not([data-text="false"])):disabled,
@@ -1,24 +1,49 @@
1
1
  @mixin circle-buttons() {
2
- .bs-circle-button {
3
- --btn-main: var(--bs-blue-base);
4
- --btn-secondary: var(--bs-blue-medium);
5
- --btn-highlight: var(--bs-blue-lightest);
2
+ /*
3
+ Properties : Defaults // Description
4
+ ====================================
5
+ --btn-icon-bg-color: var(--btn-main); // icon bg color (base state)
6
+ --btn-icon-padding: .75rem; // padding around icon svg
7
+ --btn-icon-size: 1.5rem; // svg width and height
8
+ --btn-icon-stroke-color: var(--bs-white);
9
+ --btn-main: var(--bs-blue-base); // many things... should probably break this up
10
+ --btn-text-color: var(--bs-ink-base);
11
+ --btn-text-size: var(--bs-text-md);
12
+
13
+ --btn-border-color: transparent; // focus state outline color - transparent base state, --btn-main base focus state
14
+ --btn-border-color-focused: var(--btn-main); // focus state ring color set on variants
15
+ --btn-secondary: var(--bs-blue-medium); // hover state icon bg
16
+ --btn-shadow-color-active: var(--btn-main); // active state shadow color (icon bg)
17
+ --btn-text-color-hovered: var(--bs-ink-base); // hover state text color
18
+ */
19
+
20
+ :where(.bs-circle-button) {
21
+ --btn-border-color-focused: var(--btn-main);
6
22
  --btn-border-color: transparent;
7
- --btn-border-radius: 50%;
23
+ --btn-focus-inset: -0.25rem;
24
+ --btn-gap: .5rem;
8
25
  --btn-icon-bg-color: var(--btn-main);
9
26
  --btn-icon-padding: .75rem;
10
27
  --btn-icon-size: 1.5rem;
11
28
  --btn-icon-stroke-color: var(--bs-white);
29
+ --btn-main: var(--bs-blue-base);
30
+ --btn-secondary: var(--bs-blue-medium);
31
+ --btn-shadow-color-active: var(--btn-main);
32
+ --btn-text-color-hovered: var(--bs-ink-base);
12
33
  --btn-text-color: var(--bs-ink-base);
13
- --btn-text-size: var(--bs-text-md);
34
+ --btn-text-size: 1.125rem;
35
+ --btn-text-weight: 400;
36
+ }
37
+
38
+ .bs-circle-button {
14
39
  align-items: center;
15
40
  background-color: transparent;
16
- border-radius: var(--btn-border-radius);
17
41
  color: var(--btn-text-color);
18
42
  cursor: pointer;
19
43
  display: inline-flex;
20
44
  font-size: var(--btn-text-size);
21
- gap: .5rem;
45
+ font-weight: var(--btn-text-weight);
46
+ gap: var(--btn-gap);
22
47
  outline: none;
23
48
  position: relative;
24
49
  vertical-align: middle;
@@ -31,18 +56,6 @@ a.bs-circle-button {
31
56
  text-decoration: none;
32
57
  }
33
58
 
34
- .bs-circle-button :where(.bs-circle-button-icon)::before {
35
- border-color: var(--btn-border-color);
36
- border-radius: var(--btn-border-radius);
37
- border-style: solid;
38
- border-width: 0.125rem;
39
- height: calc(100% + 0.5rem);
40
- inset: -0.25rem;
41
- position: absolute;
42
- transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
43
- width: calc(100% + 0.5rem);
44
- }
45
-
46
59
  .bs-circle-button :where(.bs-circle-button-icon) {
47
60
  align-items: center;
48
61
  background-color: var(--btn-icon-bg-color);
@@ -57,6 +70,17 @@ a.bs-circle-button {
57
70
  transition: all 100ms ease-in-out;
58
71
  }
59
72
 
73
+ .bs-circle-button :where(.bs-circle-button-icon)::before {
74
+ border-color: var(--btn-border-color);
75
+ border-radius: 50%;
76
+ border-style: solid;
77
+ border-width: 0.125rem;
78
+ content: '';
79
+ inset: var(--btn-focus-inset);
80
+ position: absolute;
81
+ transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
82
+ }
83
+
60
84
  .bs-circle-button :where(.bs-circle-button-icon) :where(.bs-icon) {
61
85
  --icon-size: var(--btn-icon-size);
62
86
  }
@@ -76,27 +100,21 @@ a.bs-circle-button {
76
100
 
77
101
  /* Ghost Buttons */
78
102
  .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) {
103
+ --btn-icon-bg-color: transparent;
79
104
  --btn-icon-stroke-color: var(--btn-main);
80
105
  --btn-light: var(--bs-blue-10);
81
106
  --btn-secondary: var(--bs-blue-10);
82
107
  }
83
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) :where(.bs-circle-button-icon) {
84
- background-color: transparent;
85
- box-shadow: inset 0 0 0 1px transparent;
86
- color: var(--btn-icon-stroke-color);
87
- }
88
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) :where(.bs-circle-button-icon)::before {
89
- border-radius: 50%;
90
- }
91
108
 
92
109
  /* Active, Hover, Focus states */
93
110
  .bs-circle-button:active, .bs-circle-button:hover {
94
111
  --btn-icon-bg-color: var(--btn-secondary);
112
+ --btn-text-color: var(--btn-text-color-hovered);
95
113
  }
96
114
  .bs-circle-button:active :where(.bs-circle-button-icon) {
97
- transform: scale(0.97);
115
+ box-shadow: inset 0px 0px 4px 1px var(--btn-shadow-color-active);
98
116
  transform-origin: center;
99
- box-shadow: inset 0px 0px 4px 1px var(--btn-main);
117
+ transform: scale(0.97);
100
118
  }
101
119
 
102
120
  .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
@@ -108,22 +126,12 @@ a.bs-circle-button {
108
126
  transform: translateX(-.25rem);
109
127
  }
110
128
 
111
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover :where(.bs-circle-button-icon) {
112
- background-color: var(--btn-light);
113
- }
114
-
115
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):active {
116
- box-shadow:
117
- inset 0 0 0 1px var(--btn-main),
118
- inset 0px 0px 4px 1px var(--btn-highlight);
129
+ .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover {
130
+ --btn-icon-bg-color: var(--btn-light);
119
131
  }
120
132
 
121
133
  .bs-circle-button:where(:focus-visible) {
122
- --btn-border-color: var(--btn-main);
123
- }
124
-
125
- .bs-circle-button:where(:focus-visible) :where(.bs-circle-button-icon)::before {
126
- content: '';
134
+ --btn-border-color: var(--btn-border-color-focused);
127
135
  }
128
136
 
129
137
  /* Disabled State */
@@ -132,28 +140,79 @@ a.bs-circle-button {
132
140
  --btn-text-color: var(--bs-ink-disabled);
133
141
  pointer-events: none;
134
142
  }
135
- .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) :where(.bs-circle-button-icon) {
136
- background-color: var(--bs-bg-disabled);
143
+ .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
144
+ --btn-icon-bg-color: var(--bs-bg-disabled);
137
145
  }
138
146
 
139
-
140
147
  /* Button Size */
141
148
  .bs-circle-button:where([data-size^='sm']) {
142
149
  --btn-icon-padding: .375rem;
143
150
  --btn-icon-size: .75rem;
144
- --btn-text-size: var(--bs-text-sm);
151
+ --btn-text-size: .875rem;
145
152
  }
146
153
 
147
154
  .bs-circle-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
148
155
  --btn-icon-padding: .3125rem;
149
156
  --btn-icon-size: .625rem;
150
- --btn-text-size: var(--bs-text-base);
157
+ --btn-text-size: 1rem;
151
158
  }
152
159
 
153
160
  .bs-circle-button:where([data-size='xs'][data-text]:not([data-text="false"])) {
154
161
  --btn-icon-padding: .25rem;
155
162
  --btn-icon-size: .5rem;
156
- --btn-text-size: var(--bs-text-sm);
163
+ --btn-text-size: .875rem;
164
+ }
165
+
166
+ /* Color Variants */
167
+ .bs-circle-button:where([data-variant^="color"]) {
168
+ --btn-focus-inset: .125rem;
169
+ --btn-gap: 0;
170
+ --btn-icon-bg-color: transparent;
171
+ --btn-icon-padding: .5rem;
172
+ --btn-icon-size: .75rem; /* stays the same for all sizes */
173
+ --btn-icon-stroke-color: var(--btn-text-color);
174
+ --btn-secondary: transparent;
175
+ --btn-shadow-color-active: transparent;
176
+ }
177
+ .bs-circle-button:where([data-variant="color-blue"]) {
178
+ --btn-border-color-focused: var(--bs-ink-blue);
179
+ --btn-text-color: var(--bs-ink-blue);
180
+ --btn-text-color-hovered: var(--bs-blue-base);
181
+ }
182
+
183
+ .bs-circle-button:where([data-variant="color-royal"]) {
184
+ --btn-border-color-focused: var(--bs-ink-royal);
185
+ --btn-text-color: var(--bs-ink-royal);
186
+ --btn-text-color-hovered: var(--bs-royal-medium);
187
+ }
188
+
189
+ .bs-circle-button:where([data-variant="color-purple"]) {
190
+ --btn-border-color-focused: var(--bs-purple-400);
191
+ --btn-text-color: var(--bs-ink-purple);
192
+ --btn-text-color-hovered: var(--bs-purple-medium);
193
+ }
194
+
195
+ .bs-circle-button:where([data-variant="color-pink"]) {
196
+ --btn-border-color-focused: var(--bs-pink-400);
197
+ --btn-text-color: var(--bs-ink-pink);
198
+ --btn-text-color-hovered: var(--bs-pink-base);
199
+ }
200
+
201
+ .bs-circle-button:where([data-variant="color-red"]) {
202
+ --btn-border-color-focused: var(--bs-ink-red);
203
+ --btn-text-color: var(--bs-ink-red);
204
+ --btn-text-color-hovered: var(--bs-red-base);
205
+ }
206
+
207
+ .bs-circle-button:where([data-variant^="color"]):where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
208
+ --btn-icon-bg-color: transparent;
209
+ --btn-text-color: var(--bs-ink-disabled);
210
+ }
211
+
212
+ /* size XXS only supported for color variants */
213
+ .bs-circle-button:where([data-variant^="color"]):where([data-size='xxs'][data-text]:not([data-text="false"])) {
214
+ --btn-text-size: .75rem;
215
+ --btn-text-weight: 600;
157
216
  }
158
217
 
159
218
  }
@@ -11,25 +11,32 @@ custom properties:
11
11
  */
12
12
 
13
13
  button:where(.bs-filter-button) {
14
+ --filterbtn-caret-size: 1rem;
15
+ --filterbtn-caret-transform: rotate(0deg);
16
+ --filterbtn-color: var(--bs-ink-blue);
17
+ --filterbtn-focus-color: transparent;
18
+ --filterbtn-height: 1.5rem;
19
+ --filterbtn-text-size: var(--bs-text-base);
20
+ --filterbtn-weight: 400;
14
21
  flex-shrink: 0;
15
22
  position: relative;
16
23
  }
17
24
 
18
25
  .bs-filter-button {
19
26
  align-items: center;
20
- color: var(--filterbtn-color, var(--bs-ink-blue));
27
+ color: var(--filterbtn-color);
21
28
  column-gap: 0.5rem;
22
29
  cursor: pointer;
23
30
  display: inline-flex;
24
- font-size: var(--filterbtn-text-size, var(--bs-text-base));
25
- font-weight: var(--filterbtn-weight, 400);
26
- height: var(--filterbtn-height, 1.5rem);
31
+ font-size: var(--filterbtn-text-size);
32
+ font-weight: var(--filterbtn-weight);
33
+ height: var(--filterbtn-height);
27
34
  line-height: 1.5;
28
35
  transition: outline-color 100ms ease-in-out;
29
36
  width: max-content;
30
37
  }
31
38
  .bs-filter-button::after {
32
- border: solid var(--filterbtn-focus-color, transparent) 2px;
39
+ border: solid var(--filterbtn-focus-color) 2px;
33
40
  border-radius: 0.25rem;
34
41
  content: '';
35
42
  display: block;
@@ -42,12 +49,12 @@ button:where(.bs-filter-button) {
42
49
  .bs-filter-button :where(.bs-icon),
43
50
  .bs-filter-button :where(span:has(svg:only-child)) {
44
51
  display: block;
45
- height: var(--filterbtn-caret-size, 1rem);
52
+ height: var(--filterbtn-caret-size);
46
53
  line-height: 1;
47
- transform: var(--filterbtn-caret-transform, rotate(0deg));
54
+ transform: var(--filterbtn-caret-transform);
48
55
  transform-origin: center;
49
56
  transition: var(--bs-trans-rotate180);
50
- width: var(--filterbtn-caret-size, 1rem);
57
+ width: var(--filterbtn-caret-size);
51
58
  }
52
59
 
53
60
  .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
@@ -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,