@wwtdev/bsds-css 2.29.0 → 3.0.0-rc.21

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 (94) hide show
  1. package/README.md +4 -4
  2. package/dist/wwt-bsds-preset.js +196 -68
  3. package/dist/wwt-bsds.css +2182 -1460
  4. package/dist/wwt-bsds.min.css +1 -1
  5. package/package.json +7 -11
  6. package/dist/components/_accordions.scss +0 -122
  7. package/dist/components/_alert.scss +0 -143
  8. package/dist/components/_badge.scss +0 -95
  9. package/dist/components/_banner.scss +0 -68
  10. package/dist/components/_buttons.scss +0 -289
  11. package/dist/components/_chart.scss +0 -169
  12. package/dist/components/_circle-buttons.scss +0 -231
  13. package/dist/components/_dropdown-options.scss +0 -236
  14. package/dist/components/_dropdown.scss +0 -189
  15. package/dist/components/_empty-state.scss +0 -99
  16. package/dist/components/_filter-buttons.scss +0 -116
  17. package/dist/components/_flyout.scss +0 -75
  18. package/dist/components/_form-booleans.scss +0 -182
  19. package/dist/components/_form-character-count.scss +0 -21
  20. package/dist/components/_form-container.scss +0 -111
  21. package/dist/components/_form-elements.scss +0 -40
  22. package/dist/components/_form-field-details.scss +0 -19
  23. package/dist/components/_form-hints.scss +0 -22
  24. package/dist/components/_form-input-composite.scss +0 -312
  25. package/dist/components/_form-input-phone.scss +0 -21
  26. package/dist/components/_form-input-search.scss +0 -74
  27. package/dist/components/_form-labels.scss +0 -40
  28. package/dist/components/_form-switches.scss +0 -154
  29. package/dist/components/_form-text-fields.scss +0 -205
  30. package/dist/components/_horizontal-navigation-mobile.scss +0 -238
  31. package/dist/components/_horizontal-navigation.scss +0 -220
  32. package/dist/components/_inline-tabs.scss +0 -86
  33. package/dist/components/_loader.scss +0 -105
  34. package/dist/components/_modal.scss +0 -185
  35. package/dist/components/_overlay.scss +0 -34
  36. package/dist/components/_pagination.scss +0 -85
  37. package/dist/components/_pills.scss +0 -216
  38. package/dist/components/_profile-details.scss +0 -44
  39. package/dist/components/_profile-img.scss +0 -73
  40. package/dist/components/_profile-layout.scss +0 -29
  41. package/dist/components/_spinner.scss +0 -95
  42. package/dist/components/_tab-list.scss +0 -151
  43. package/dist/components/_table.scss +0 -331
  44. package/dist/components/_tables.scss +0 -84
  45. package/dist/components/_timeline.scss +0 -122
  46. package/dist/components/_toast.scss +0 -149
  47. package/dist/components/_toaster.scss +0 -27
  48. package/dist/components/_tooltip.scss +0 -183
  49. package/dist/components/_vertical-navigation.scss +0 -280
  50. package/dist/components/accordions.css +0 -118
  51. package/dist/components/alert.css +0 -139
  52. package/dist/components/badge.css +0 -91
  53. package/dist/components/banner.css +0 -64
  54. package/dist/components/buttons.css +0 -285
  55. package/dist/components/chart.css +0 -165
  56. package/dist/components/circle-buttons.css +0 -227
  57. package/dist/components/dropdown-options.css +0 -232
  58. package/dist/components/dropdown.css +0 -185
  59. package/dist/components/empty-state.css +0 -95
  60. package/dist/components/filter-buttons.css +0 -112
  61. package/dist/components/flyout.css +0 -71
  62. package/dist/components/form-booleans.css +0 -178
  63. package/dist/components/form-character-count.css +0 -17
  64. package/dist/components/form-container.css +0 -108
  65. package/dist/components/form-elements.css +0 -36
  66. package/dist/components/form-field-details.css +0 -15
  67. package/dist/components/form-hints.css +0 -18
  68. package/dist/components/form-input-composite.css +0 -308
  69. package/dist/components/form-input-phone.css +0 -17
  70. package/dist/components/form-input-search.css +0 -70
  71. package/dist/components/form-labels.css +0 -36
  72. package/dist/components/form-switches.css +0 -150
  73. package/dist/components/form-text-fields.css +0 -201
  74. package/dist/components/horizontal-navigation-mobile.css +0 -234
  75. package/dist/components/horizontal-navigation.css +0 -216
  76. package/dist/components/inline-tabs.css +0 -83
  77. package/dist/components/loader.css +0 -101
  78. package/dist/components/modal.css +0 -181
  79. package/dist/components/overlay.css +0 -30
  80. package/dist/components/pagination.css +0 -81
  81. package/dist/components/pills.css +0 -212
  82. package/dist/components/profile-details.css +0 -40
  83. package/dist/components/profile-img.css +0 -69
  84. package/dist/components/profile-layout.css +0 -25
  85. package/dist/components/spinner.css +0 -91
  86. package/dist/components/tab-list.css +0 -147
  87. package/dist/components/table.css +0 -327
  88. package/dist/components/tables.css +0 -80
  89. package/dist/components/timeline.css +0 -118
  90. package/dist/components/toast.css +0 -145
  91. package/dist/components/toaster.css +0 -23
  92. package/dist/components/tooltip.css +0 -179
  93. package/dist/components/vertical-navigation.css +0 -276
  94. package/dist/wwt-bsds-wc-base.css +0 -1129
@@ -1,289 +0,0 @@
1
- @mixin buttons() {
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 {
25
- --btn-focus-inset: -0.25rem;
26
- --btn-focus-pseudo-width: calc(100% + 0.5rem);
27
- --btn-ghost-ink: var(--bs-ink-blue);
28
- --btn-highlight: var(--bs-blue-100);
29
- --btn-ink: var(--bs-white);
30
- --btn-main: var(--bs-blue-400);
31
- --btn-padding: .25rem .75rem;
32
- --btn-secondary: var(--bs-blue-medium);
33
- --btn-text-size: var(--bs-text-md);
34
- --btn-weight: 600;
35
- --btn-height: 2.5rem;
36
- align-items: center;
37
- background-color: var(--btn-main);
38
- border: none;
39
- border-radius: 0.25rem;
40
- color: var(--btn-ink);
41
- column-gap: var(--bs-space-2);
42
- cursor: pointer;
43
- display: inline-flex;
44
- font-size: var(--btn-text-size);
45
- font-weight: var(--btn-weight);
46
- height: max(fit-content, var(--btn-height));
47
- justify-content: center;
48
- line-height: 1.5;
49
- outline: 2px solid transparent;
50
- padding: var(--btn-padding);
51
- position: relative;
52
- text-decoration: none;
53
- transition: all 100ms ease-in-out;
54
- vertical-align: middle;
55
- }
56
-
57
- .bs-button:where(:not(:disabled):not([aria-disabled="true"]):hover) {
58
- background-color: var(--btn-secondary);
59
- }
60
-
61
- .bs-button:where(:not(:disabled):not([aria-disabled="true"]):active) {
62
- background-color: var(--btn-secondary);
63
- box-shadow: inset 0px 0px 4px 1px var(--btn-main);
64
- transform-origin: center;
65
- transform: scale(0.97);
66
- }
67
-
68
- /* ------------ Focus Styles ------------ */
69
- .bs-button::before {
70
- border-color: transparent;
71
- border-radius: 0.5rem;
72
- border-style: solid;
73
- border-width: 0.125rem;
74
- content: '';
75
- height: calc(100% + 0.5rem);
76
- inset: var(--btn-focus-inset);
77
- position: absolute;
78
- transition: border-color 0.125s ease-in-out;
79
- width: var(--btn-focus-pseudo-width);
80
- }
81
-
82
- .bs-button:where(:focus:not(:disabled):not([aria-disabled="true"]))::before {
83
- border-color: var(--btn-main);
84
- }
85
-
86
- .bs-button:where(:focus-visible:not(:disabled):not([aria-disabled="true"]))::before {
87
- border-color: var(--btn-main);
88
- box-shadow: none;
89
- }
90
-
91
- .bs-button:where(:focus:not(:focus-visible):not(:disabled):not([aria-disabled="true"]))::before {
92
- border-color: transparent;
93
- box-shadow: none;
94
- }
95
-
96
- /* ------------ Ghost Buttons ------------ */
97
- .bs-button:where([data-ghost]:not([data-ghost="false"])) {
98
- --btn-ink: var(--btn-ghost-ink);
99
- --btn-light: var(--bs-blue-10);
100
- --btn-secondary: var(--bs-blue-10);
101
- background-color: transparent;
102
- box-shadow: inset 0 0 0 1px var(--btn-ghost-ink);
103
- }
104
- .bs-button:where([data-ghost]:not([data-ghost="false"]))::before {
105
- border-radius: 0.4375rem;
106
- }
107
- .bs-button:where([data-ghost]:not([data-ghost="false"]):not(:disabled):not([aria-disabled="true"]):hover),
108
- .bs-button:where([data-ghost]:not([data-ghost="false"]):not(:disabled):not([aria-disabled="true"]):focus) {
109
- background-color: var(--btn-light);
110
- }
111
- .bs-button:where([data-ghost]:not([data-ghost="false"]):not(:disabled):not([aria-disabled="true"]):active) {
112
- box-shadow:
113
- inset 0 0 0 1px var(--btn-main),
114
- inset 0px 0px 4px 1px var(--btn-highlight);
115
- }
116
-
117
- /* ------------ VARIANTS ------------ */
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);
122
- --btn-main: var(--bs-plum-base);
123
- --btn-secondary: var(--bs-plum-medium);
124
- }
125
- .dark .bs-button:where([data-variant^='secondary']) {
126
- --btn-highlight: var(--bs-plum-400);
127
- --btn-light: var(--bs-navy-400);
128
- }
129
- .bs-button:where([data-variant^='positive']) {
130
- --btn-ghost-ink: var(--bs-ink-purple);
131
- --btn-highlight: var(--bs-purple-100);
132
- --btn-light: var(--bs-purple-10);
133
- --btn-main: var(--bs-purple-400);
134
- --btn-secondary: var(--bs-purple-medium);
135
- }
136
- .bs-button:where([data-variant^='warning']) {
137
- --btn-ghost-ink: var(--bs-ink-orange);
138
- --btn-highlight: var(--bs-orange-100);
139
- --btn-light: var(--bs-orange-10);
140
- --btn-main: var(--bs-orange-warning);
141
- --btn-secondary: var(--bs-orange-base);
142
- }
143
- .bs-button:where([data-variant^='negative']) {
144
- --btn-ghost-ink: var(--bs-ink-red);
145
- --btn-highlight: var(--bs-red-100);
146
- --btn-light: var(--bs-red-10);
147
- --btn-main: var(--bs-red-400);
148
- --btn-secondary: var(--bs-red-medium);
149
- }
150
-
151
- /* pink variant */
152
- .bs-button:where([data-variant^='pink']) {
153
- --btn-ghost-ink: var(--bs-ink-pink);
154
- --btn-highlight: var(--bs-pink-400);
155
- --btn-light: var(--bs-pink-10);
156
- --btn-main: var(--bs-pink-400);
157
- --btn-secondary: var(--bs-pink-300);
158
- }
159
-
160
- /* royal blue variant */
161
- .bs-button:where([data-variant^='royal']) {
162
- --btn-ghost-ink: var(--bs-ink-royal);
163
- --btn-highlight: var(--bs-royal-400);
164
- --btn-light: var(--bs-royal-10);
165
- --btn-main: var(--bs-royal-400);
166
- --btn-secondary: var(--bs-royal-300);
167
- }
168
-
169
- /* white variant - for dark backgrounds + ghost btn or text btn only */
170
- .bs-button:where([data-variant^='white'][data-ghost]:not([data-ghost="false"])) {
171
- --btn-ghost-ink: var(--bs-ink-white);
172
- --btn-highlight: var(--bs-ink-white);
173
- --btn-light: var(--bs-white-10);
174
- --btn-main: var(--bs-ink-white);
175
- }
176
-
177
- /* ------------ Text Button ------------ */
178
- .bs-button:where([data-text]:not([data-text="false"])) {
179
- --btn-focus-inset: -0.25rem -0.5rem;
180
- --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
181
- --btn-height: auto;
182
- --btn-ink: var(--bs-ink-blue);
183
- --btn-padding: 0;
184
- --btn-secondary: transparent;
185
- --btn-text-size: var(--bs-text-md);
186
- --btn-weight: 400;
187
- background-color: transparent;
188
- cursor: pointer;
189
- line-height: 150%;
190
- }
191
- .bs-button:where([data-text]:not([data-text="false"]):not(:disabled):not([aria-disabled="true"]):hover) {
192
- --btn-ink: var(--bs-blue-base);
193
- background-color: transparent;
194
- text-decoration: underline;
195
- }
196
- .bs-button:where([data-text]:not([data-text="false"]):not(:disabled):not([aria-disabled="true"]):hover):has(svg) {
197
- text-decoration: none;
198
- }
199
- .bs-button:where([data-text]:not([data-text="false"]):not(:disabled):not([aria-disabled="true"]):active) {
200
- box-shadow: none;
201
- transform: none;
202
- }
203
-
204
- .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"])),
205
- .bs-button:where([data-variant^='negative'][data-text]:not([data-text="false"]):not(:disabled):not([aria-disabled="true"]):hover) {
206
- --btn-ink: var(--bs-ink-red);
207
- }
208
-
209
- .bs-button:where([data-variant^='white'][data-text]:not([data-text="false"])),
210
- .bs-button:where([data-variant^='white'][data-text]:not([data-text="false"]):not(:disabled):not([aria-disabled="true"]):hover) {
211
- --btn-ink: var(--bs-ink-white);
212
- --btn-main: var(--bs-ink-white);
213
- }
214
-
215
- /* ------------ Button Sizes, Media-based Text Sizing -------------- */
216
- /* Std button: Mobile text size, DT text size */
217
- .bs-button {
218
- --btn-text-size: 1rem;
219
- }
220
-
221
- @media (min-width: 1166px) {
222
- .bs-button {
223
- --btn-text-size: 1.125rem;
224
- }
225
- }
226
-
227
- .bs-button:where([data-size^='sm']) {
228
- --btn-height: 1.75rem;
229
- --btn-padding: .25rem .75rem .375rem;
230
- /* Std button size="sm" text size is same across all media sizes */
231
- --btn-text-size: var(--bs-text-sm);
232
- }
233
-
234
- /* Text buttons: For now, text size not dependent on media size */
235
- .bs-button:where([data-text]:not([data-text="false"])) {
236
- --btn-height: auto;
237
- --btn-padding: 0;
238
- --btn-text-size: var(--bs-text-md);
239
- }
240
-
241
- .bs-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
242
- --btn-text-size: var(--bs-text-base);
243
- }
244
-
245
- /* Size XS & XXS only applies to text buttons */
246
- .bs-button:where([data-size^='xs'][data-text]:not([data-text="false"])) {
247
- --btn-text-size: var(--bs-text-sm);
248
- }
249
-
250
- .bs-button:where([data-size^='xxs'][data-text]:not([data-text="false"])) {
251
- --btn-text-size: var(--bs-text-xs);
252
- --btn-weight: 600;
253
- }
254
-
255
-
256
- /* ------------ Disabled Styling ------------ */
257
- :where(button:disabled),
258
- .bs-button:where(:disabled),
259
- .bs-button:where([aria-disabled="true"]) /* for links as buttons */ {
260
- pointer-events: none;
261
- }
262
- .bs-button:where(:disabled),
263
- .bs-button:where([aria-disabled="true"]) {
264
- --btn-ink: var(--bs-ink-disabled);
265
- --btn-main: var(--bs-bg-disabled);
266
- box-shadow: none;
267
- transform: none;
268
- }
269
-
270
- .bs-button:where([data-ghost]:not([data-ghost="false"])):disabled,
271
- .bs-button:where([data-ghost]:not([data-ghost="false"]))[aria-disabled="true"] {
272
- --btn-ghost-ink: var(--bs-ink-disabled);
273
- }
274
-
275
- .bs-button:where([data-text]:not([data-text="false"])):disabled,
276
- .bs-button:where([data-text]:not([data-text="false"]))[aria-disabled="true"] {
277
- --btn-main: transparent;
278
- }
279
-
280
- /* ------------ links as buttons ------------ */
281
- a.bs-button {
282
- align-items: center;
283
- display: inline-flex;
284
- outline: none;
285
- vertical-align: middle;
286
- }
287
-
288
- }
289
-
@@ -1,169 +0,0 @@
1
- @mixin chart() {
2
- .bs-chart {
3
- display: block;
4
- height: 100%;
5
- width: 100%;
6
- }
7
-
8
- .bs-chart :where(figure) {
9
- column-gap: 2.5rem;
10
- display: grid;
11
- font-size: .875rem;
12
- grid-template-areas: var(--chart-gridareas, "chart" "legend");
13
- grid-template-columns: var(--chart-gridcols, 100%);
14
- grid-template-rows: var(--chart-gridrows, minmax(0px, auto) minmax(0px, min-content));
15
- height: 100%;
16
- margin-block: unset;
17
- margin-inline: unset;
18
- position: relative;
19
- width: 100%;
20
- }
21
-
22
- .bs-chart :where(figure > :first-child) {
23
- grid-area: chart;
24
- }
25
-
26
- .bs-chart :where(figure > :last-child) {
27
- grid-area: legend;
28
- }
29
-
30
- .bs-chart :where(figure > div) {
31
- min-width: 100%;
32
- width: 100%;
33
- }
34
- .bs-chart :where(canvas) {
35
- width: 100%;
36
- }
37
-
38
- /* --------- Legend Styles --------- */
39
-
40
- .bs-chart :where(figcaption) {
41
- background-color: var(--legend-bg-color, transparent);
42
- border-radius: .5rem;
43
- border: 1px solid var(--legend-border-color, transparent);
44
- clip-path: var(--legend-clip-path, none);
45
- max-height: var(--legend-max-height, 100%);
46
- overflow-y: var(--legend-overflow-y, hidden);
47
- }
48
-
49
- .bs-chart :where(figcaption[data-hidden="true"]) {
50
- border: 0;
51
- clip: rect(0 0 0 0);
52
- height: 1px;
53
- margin: 0;
54
- overflow: hidden;
55
- padding: 0;
56
- position: absolute;
57
- white-space: nowrap;
58
- width: 1px;
59
- }
60
-
61
- .bs-chart :where(ul) {
62
- align-items: var(--legend-flexalign, center);
63
- display: flex;
64
- column-gap: 2.5rem;
65
- flex-direction: var(--legend-flexdir, row);
66
- flex-wrap: var(--legend-flexwrap, wrap);
67
- padding-block: var(--legend-padding-block, .25rem);
68
- /* cjs-legend-padding is set dynamically by chart.js for bar charts */
69
- padding-inline: var(--legend-padding-inline, var(--cjs-legend-padding-inline, 2.5rem));
70
- row-gap: .75rem;
71
- }
72
-
73
- .bs-chart :where(li, li:focus, li:active, li:focus-visible) {
74
- align-items: center;
75
- cursor: pointer;
76
- display: flex;
77
- flex-direction: row;
78
- outline: 0;
79
- position: relative;
80
- width: var(--legend-item-width, auto);
81
- }
82
-
83
- .bs-chart :where(li)::after {
84
- border: solid var(--focus-color, transparent) 2px;
85
- border-radius: 0.25rem;
86
- content: '';
87
- display: block;
88
- inset: -.25rem;
89
- position: absolute;
90
- }
91
-
92
- .bs-chart :where(li:focus-visible) {
93
- --focus-color: var(--bs-blue-base);
94
- }
95
-
96
- .bs-chart :where(li span) {
97
- background: var(--legend-item-box-fill);
98
- border-color: var(--legend-item-box-stroke);
99
- border-radius: var(--legend-item-swatch-radius, 3px);
100
- display: inline-block;
101
- height: var(--bs-text-f-md);
102
- margin-right: 10px;
103
- width: var(--bs-text-f-md);
104
- }
105
-
106
- .bs-chart :where(li p) {
107
- color: var(--legend-item-text-color);
108
- font-size: var(--bs-text-f-md);
109
- margin: 0;
110
- padding: 0;
111
- text-decoration: var(--legend-item-text-decoration);
112
- }
113
-
114
- /* --------- Chart Layout Variants --------- */
115
- /*
116
- For now, per design team instructions, these are NOT responsive as we're only to expose these
117
- variants for a very specific, single use-case that involves horizontal scroll...
118
- If we want to make these responsive in the future, can wrap in media query.
119
- */
120
- .bs-chart:where([data-layout="chart-right"], [data-layout="chart-left"]) {
121
- --chart-gridrows: minmax(0px, auto);
122
- --legend-bg-color: var(--bs-bg-base);
123
- --legend-border-color: var(--bs-gray-light);
124
- --legend-clip-path: border-box;
125
- --legend-flexalign: start;
126
- --legend-flexdir: column;
127
- --legend-flexwrap: nowrap;
128
- --legend-item-width: 100%;
129
- --legend-max-height: 17.1875rem;
130
- --legend-overflow-y: auto;
131
- --legend-padding-block: .75rem;
132
- --legend-padding-inline: .75rem;
133
- }
134
-
135
- .bs-chart:where([data-layout="chart-left"]) {
136
- --chart-gridareas: "chart legend";
137
- --chart-gridcols: auto minmax(150px, auto);
138
- }
139
-
140
- .bs-chart:where([data-layout="chart-right"]) {
141
- --chart-gridareas: "legend chart";
142
- --chart-gridcols: minmax(150px, auto) auto;
143
- }
144
-
145
- .bs-chart-table {
146
- border: 0;
147
- clip: rect(0 0 0 0);
148
- height: 1px;
149
- margin: 0;
150
- overflow: hidden;
151
- padding: 0;
152
- position: absolute;
153
- white-space: nowrap;
154
- width: 1px;
155
- }
156
- /*
157
- uncomment to make visible when testing
158
- .bs-chart-table {
159
- clip: none;
160
- overflow: auto;
161
- height: auto;
162
- position: relative;
163
- width: auto;
164
- }
165
-
166
- */
167
-
168
- }
169
-
@@ -1,231 +0,0 @@
1
- @mixin circle-buttons() {
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);
22
- --btn-border-color: transparent;
23
- --btn-focus-inset: -0.25rem;
24
- --btn-gap: .5rem;
25
- --btn-icon-bg-color: var(--btn-main);
26
- --btn-icon-padding: .75rem;
27
- --btn-icon-size: 1.5rem;
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);
33
- --btn-text-color: var(--bs-ink-base);
34
- --btn-text-size: 1.125rem;
35
- --btn-text-weight: 400;
36
- }
37
-
38
- .bs-circle-button {
39
- align-items: center;
40
- background-color: transparent;
41
- color: var(--btn-text-color);
42
- cursor: pointer;
43
- display: inline-flex;
44
- font-size: var(--btn-text-size);
45
- font-weight: var(--btn-text-weight);
46
- gap: var(--btn-gap);
47
- outline: none;
48
- position: relative;
49
- vertical-align: middle;
50
- }
51
-
52
- a.bs-circle-button {
53
- align-items: center;
54
- display: inline-flex;
55
- outline: none;
56
- text-decoration: none;
57
- }
58
-
59
- .bs-circle-button :where(.bs-circle-button-icon) {
60
- align-items: center;
61
- background-color: var(--btn-icon-bg-color);
62
- border: none;
63
- border-radius: 50%;
64
- color: var(--btn-icon-stroke-color);
65
- display: inline-flex;
66
- justify-content: center;
67
- outline: 2px solid transparent;
68
- padding: var(--btn-icon-padding);
69
- position: relative;
70
- transition: all 100ms ease-in-out;
71
- }
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
-
84
- .bs-circle-button :where(.bs-circle-button-icon) :where(.bs-icon) {
85
- --icon-size: var(--btn-icon-size);
86
- }
87
-
88
- /* non-bs-icon svgs */
89
- .bs-circle-button :where(.bs-circle-button-icon) > :where(svg) {
90
- height: var(--btn-icon-size);
91
- width: var(--btn-icon-size);
92
- }
93
-
94
- /* Icon Buttons with Text */
95
- .bs-circle-button:where([data-text]:not([data-text="false"])) {
96
- --btn-text-size: var(--bs-text-md);
97
- --btn-icon-size: 0.75rem;
98
- --btn-icon-padding: 0.375rem;
99
- }
100
-
101
- /* Ghost Buttons */
102
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])) {
103
- --btn-icon-bg-color: transparent;
104
- --btn-icon-stroke-color: var(--btn-main);
105
- --btn-light: var(--bs-blue-10);
106
- --btn-secondary: var(--bs-blue-10);
107
- }
108
-
109
- /* Active, Hover, Focus states */
110
- .bs-circle-button:active, .bs-circle-button:hover {
111
- --btn-icon-bg-color: var(--btn-secondary);
112
- --btn-text-color: var(--btn-text-color-hovered);
113
- }
114
- .bs-circle-button:active :where(.bs-circle-button-icon) {
115
- box-shadow: inset 0px 0px 4px 1px var(--btn-shadow-color-active);
116
- transform-origin: center;
117
- transform: scale(0.97);
118
- }
119
-
120
- .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
121
- .bs-circle-button:where([data-direction="right"]):hover::before {
122
- transform: translateX(.25rem);
123
- }
124
- .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon),
125
- .bs-circle-button:where([data-direction="left"]):hover::before {
126
- transform: translateX(-.25rem);
127
- }
128
-
129
- .bs-circle-button:where([data-ghost]:not([data-ghost="false"])):hover {
130
- --btn-icon-bg-color: var(--btn-light);
131
- }
132
-
133
- .bs-circle-button:where(:focus-visible) {
134
- --btn-border-color: var(--btn-border-color-focused);
135
- }
136
-
137
- /* Disabled State */
138
- .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) /* for links as buttons */ {
139
- --btn-icon-stroke-color: var(--bs-ink-disabled);
140
- --btn-text-color: var(--bs-ink-disabled);
141
- pointer-events: none;
142
- }
143
- .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
144
- --btn-icon-bg-color: var(--bs-bg-disabled);
145
- }
146
-
147
- /* Button Size */
148
- .bs-circle-button:where([data-size^='sm']) {
149
- --btn-icon-padding: .375rem;
150
- --btn-icon-size: .75rem;
151
- --btn-text-size: .875rem;
152
- }
153
-
154
- .bs-circle-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
155
- --btn-icon-padding: .3125rem;
156
- --btn-icon-size: .625rem;
157
- --btn-text-size: 1rem;
158
- }
159
-
160
- .bs-circle-button:where([data-size='xs'][data-text]:not([data-text="false"])) {
161
- --btn-icon-padding: .25rem;
162
- --btn-icon-size: .5rem;
163
- --btn-text-size: .875rem;
164
- }
165
-
166
- /* Color Variants */
167
- .bs-circle-button:where([data-variant^="color"]) {
168
- --btn-gap: .5rem;
169
- --btn-icon-bg-color: transparent;
170
- --btn-icon-padding: 0;
171
- --btn-icon-size: .75rem; /* stays the same for all sizes */
172
- --btn-icon-stroke-color: var(--btn-text-color);
173
- --btn-secondary: transparent;
174
- --btn-shadow-color-active: transparent;
175
- }
176
- .bs-circle-button:where([data-variant="color-blue"]) {
177
- --btn-border-color-focused: var(--bs-ink-blue);
178
- --btn-text-color: var(--bs-ink-blue);
179
- --btn-text-color-hovered: var(--bs-blue-base);
180
- }
181
-
182
- .bs-circle-button:where([data-variant="color-royal"]) {
183
- --btn-border-color-focused: var(--bs-ink-royal);
184
- --btn-text-color: var(--bs-ink-royal);
185
- --btn-text-color-hovered: var(--bs-royal-medium);
186
- }
187
-
188
- .bs-circle-button:where([data-variant="color-purple"]) {
189
- --btn-border-color-focused: var(--bs-purple-400);
190
- --btn-text-color: var(--bs-ink-purple);
191
- --btn-text-color-hovered: var(--bs-purple-medium);
192
- }
193
-
194
- .bs-circle-button:where([data-variant="color-pink"]) {
195
- --btn-border-color-focused: var(--bs-pink-400);
196
- --btn-text-color: var(--bs-ink-pink);
197
- --btn-text-color-hovered: var(--bs-pink-base);
198
- }
199
-
200
- .bs-circle-button:where([data-variant="color-orange"]) {
201
- --btn-border-color-focused: var(--bs-ink-orange);
202
- --btn-text-color: var(--bs-ink-orange);
203
- --btn-text-color-hovered: var(--bs-orange-base);
204
- }
205
-
206
- .bs-circle-button:where([data-variant="color-red"]) {
207
- --btn-border-color-focused: var(--bs-ink-red);
208
- --btn-text-color: var(--bs-ink-red);
209
- --btn-text-color-hovered: var(--bs-red-base);
210
- }
211
-
212
- .bs-circle-button:where([data-variant="color-white"]) {
213
- --btn-border-color-focused: var(--bs-ink-white);
214
- --btn-text-color: var(--bs-ink-white);
215
- /* 80% of --bs-white */
216
- --btn-text-color-hovered: rgba(255, 255, 255, 0.8);
217
- }
218
-
219
- .bs-circle-button:where([data-variant^="color"]):where(:disabled, [aria-disabled]:not([aria-disabled="false"])) {
220
- --btn-icon-bg-color: transparent;
221
- --btn-text-color: var(--bs-ink-disabled);
222
- }
223
-
224
- /* size XXS only supported for color variants */
225
- .bs-circle-button:where([data-variant^="color"]):where([data-size='xxs'][data-text]:not([data-text="false"])) {
226
- --btn-text-size: .75rem;
227
- --btn-text-weight: 600;
228
- }
229
-
230
- }
231
-