@actabldesign/bellhop-styles 0.0.4 → 0.0.12

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 (60) hide show
  1. package/README.md +105 -70
  2. package/dist/index.css +33 -0
  3. package/dist/utilities.css +5730 -0
  4. package/llms.txt +2765 -119
  5. package/package.json +6 -1
  6. package/rollup.config.js +39 -24
  7. package/src/bh-tokens/_primitives.scss +296 -0
  8. package/src/bh-tokens/_semantic.scss +158 -0
  9. package/src/bh-tokens/components/_avatar.tokens.scss +64 -0
  10. package/src/bh-tokens/components/_badge-dot.tokens.scss +33 -0
  11. package/src/bh-tokens/components/_badge.tokens.scss +61 -0
  12. package/src/bh-tokens/components/_button-icon.tokens.scss +65 -0
  13. package/src/bh-tokens/components/_button.tokens.scss +185 -0
  14. package/src/bh-tokens/components/_checkbox.tokens.scss +67 -0
  15. package/src/bh-tokens/components/_dropdown.tokens.scss +103 -0
  16. package/src/bh-tokens/components/_featured-icon.tokens.scss +57 -0
  17. package/src/bh-tokens/components/_input-number.tokens.scss +50 -0
  18. package/src/bh-tokens/components/_input.tokens.scss +86 -0
  19. package/src/bh-tokens/components/_label.tokens.scss +37 -0
  20. package/src/bh-tokens/components/_modal.tokens.scss +42 -0
  21. package/src/bh-tokens/components/_pagination.tokens.scss +104 -0
  22. package/src/bh-tokens/components/_password.tokens.scss +63 -0
  23. package/src/bh-tokens/components/_progress-bar.tokens.scss +34 -0
  24. package/src/bh-tokens/components/_progress-spinner.tokens.scss +51 -0
  25. package/src/bh-tokens/components/_radiobutton.tokens.scss +90 -0
  26. package/src/bh-tokens/components/_skeleton.tokens.scss +22 -0
  27. package/src/bh-tokens/components/_textarea.tokens.scss +76 -0
  28. package/src/bh-tokens/components/_toggle.tokens.scss +74 -0
  29. package/src/bh-tokens/components/avatar.scss +288 -0
  30. package/src/bh-tokens/components/badge-dot.scss +177 -0
  31. package/src/bh-tokens/components/badge.scss +497 -0
  32. package/src/bh-tokens/components/button-icon.scss +227 -0
  33. package/src/bh-tokens/components/button.scss +640 -0
  34. package/src/bh-tokens/components/checkbox.scss +254 -0
  35. package/src/bh-tokens/components/dropdown.scss +231 -0
  36. package/src/bh-tokens/components/featured-icon.scss +219 -0
  37. package/src/bh-tokens/components/input-number.scss +147 -0
  38. package/src/bh-tokens/components/input.scss +271 -0
  39. package/src/bh-tokens/components/label.scss +176 -0
  40. package/src/bh-tokens/components/modal.scss +103 -0
  41. package/src/bh-tokens/components/pagination.scss +324 -0
  42. package/src/bh-tokens/components/password.scss +193 -0
  43. package/src/bh-tokens/components/progress-bar.scss +124 -0
  44. package/src/bh-tokens/components/progress-spinner.scss +130 -0
  45. package/src/bh-tokens/components/radiobutton.scss +193 -0
  46. package/src/bh-tokens/components/skeleton.scss +50 -0
  47. package/src/bh-tokens/components/textarea.scss +228 -0
  48. package/src/bh-tokens/components/toggle.scss +320 -0
  49. package/src/mixins/_responsive.scss +167 -0
  50. package/src/tokens/bellhop-typography.css +34 -0
  51. package/src/utilities/_breakpoints.scss +19 -0
  52. package/src/utilities/_flex.scss +228 -0
  53. package/src/utilities/_grid.scss +189 -0
  54. package/src/utilities/_index.scss +32 -0
  55. package/src/utilities/_scrollable.scss +239 -0
  56. package/src/utilities/_sizing.scss +229 -0
  57. package/src/utilities/_spacing.scss +187 -0
  58. package/src/utilities/_truncation.scss +126 -0
  59. package/src/utilities/_visibility.scss +117 -0
  60. package/src/utilities.scss +32 -0
@@ -0,0 +1,497 @@
1
+ /* ==========================================================================
2
+ BH-BADGE COMPONENT STYLES
3
+ Uses tokens from _badge.tokens.scss
4
+ ========================================================================== */
5
+
6
+ @use './badge.tokens' as *;
7
+
8
+ /* Badge styles are defined in ../components/badge.css using CSS custom properties */
9
+ /* This file exists for consistency with other components that use the bh-tokens pattern */
10
+
11
+ /* ==========================================================================
12
+ BH-BADGE COMPONENT TOKENS
13
+ ========================================================================== */
14
+
15
+ .badge {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ gap: var(--bh-spacing-sm);
20
+ font-family: var(--bh-badge-font-family);
21
+ font-weight: var(--bh-badge-font-weight);
22
+ border-radius: var(--bh-badge-radius);
23
+ white-space: nowrap;
24
+ text-align: center;
25
+ transition: var(--bh-badge-transition);
26
+ border: 1px solid var(--bh-badge-border);
27
+ background-color: var(--bh-badge-bg);
28
+ color: var(--bh-badge-text);
29
+ user-select: none;
30
+ cursor: default;
31
+
32
+ // --- Sizes ---
33
+ &.badge-sm {
34
+ max-height: var(--bh-badge-height-sm);
35
+ padding: var(--bh-badge-padding-y-sm) var(--bh-badge-padding-x-sm);
36
+
37
+ .badge-label {
38
+ font-size: var(--bh-badge-font-size-sm);
39
+ line-height: var(--bh-badge-line-height-sm);
40
+ }
41
+
42
+ .badge-icon-dot {
43
+ width: var(--bh-badge-icon-dot-size-sm);
44
+ height: var(--bh-badge-icon-dot-size-sm);
45
+ font-size: var(--bh-badge-font-size-sm);
46
+ }
47
+ .badge-icon-custom {
48
+ font-size: var(--bh-badge-icon-custom-size-sm) !important;
49
+ }
50
+
51
+ .badge-dismiss {
52
+ font-size: var(--bh-badge-dismiss-size-sm);
53
+ }
54
+ }
55
+
56
+ &.badge-md {
57
+ max-height: var(--bh-badge-height-md);
58
+ padding: var(--bh-badge-padding-y-md) var(--bh-badge-padding-x-md);
59
+
60
+ .badge-label {
61
+ font-size: var(--bh-badge-font-size-sm);
62
+ line-height: var(--bh-badge-line-height-md);
63
+ }
64
+ .badge-icon-dot {
65
+ width: var(--bh-badge-icon-dot-size-md);
66
+ height: var(--bh-badge-icon-dot-size-md);
67
+ font-size: var(--bh-font-size-md);
68
+ }
69
+ .badge-icon-custom {
70
+ font-size: var(--bh-badge-icon-custom-size-md) !important;
71
+ }
72
+ .badge-dismiss {
73
+ font-size: var(--bh-badge-dismiss-size-md);
74
+ }
75
+ }
76
+
77
+ &.badge-lg {
78
+ max-height: var(--bh-badge-height-lg);
79
+ padding: var(--bh-badge-padding-y-lg) var(--bh-badge-padding-x-lg);
80
+ font-size: var(--bh-badge-font-size-lg);
81
+ line-height: var(--bh-badge-line-height-lg);
82
+
83
+ .badge-icon-dot {
84
+ width: var(--bh-badge-icon-dot-size-lg);
85
+ height: var(--bh-badge-icon-dot-size-lg);
86
+ font-size: var(--bh-font-size-lg);
87
+ }
88
+ .badge-icon-custom {
89
+ font-size: var(--bh-badge-icon-custom-size-lg) !important;
90
+ }
91
+ .badge-dismiss {
92
+ font-size: var(--bh-badge-dismiss-size-lg);
93
+ }
94
+ }
95
+
96
+ // --- Elements ---
97
+ &.badge-label {
98
+ flex-shrink: 0;
99
+ font-weight: inherit;
100
+ }
101
+
102
+ .badge-icon-custom {
103
+ font-size: 20px !important;
104
+ }
105
+
106
+ .badge-icon-dot {
107
+ font-size: 12px !important;
108
+ flex-shrink: 0;
109
+ font-variation-settings: 'FILL' 1, 'opsz' 16;
110
+ }
111
+
112
+ .badge-dismiss {
113
+ display: flex;
114
+ align-items: center;
115
+ justify-content: center;
116
+ background: none;
117
+ border: none;
118
+ cursor: pointer;
119
+ padding: 0;
120
+ margin-left: var(--bh-spacing-xxs);
121
+ border-radius: var(--bh-radius-full);
122
+ transition: var(--bh-badge-transition);
123
+ color: inherit;
124
+ aspect-ratio: 1 / 1;
125
+
126
+ .badge-dismiss-icon {
127
+ line-height: 1;
128
+ font-variation-settings: 'opsz' 14;
129
+ }
130
+
131
+ &:disabled {
132
+ cursor: not-allowed;
133
+ opacity: 0.5;
134
+ }
135
+ }
136
+
137
+ &.badge-high {
138
+ border: var(--bh-badge-border-high);
139
+
140
+ &.badge-gray {
141
+ background-color: var(--color-neutral-200);
142
+ color: var(--color-neutral-800);
143
+
144
+ .badge-icon-dot,
145
+ .badge-icon-custom {
146
+ color: var(--color-neutral-800) !important;
147
+ }
148
+ }
149
+
150
+ &.badge-blue {
151
+ background-color: var(--color-brand-200);
152
+ color: var(--color-brand-800);
153
+
154
+ .badge-icon-dot,
155
+ .badge-icon-custom {
156
+ color: var(--color-brand-800) !important;
157
+ }
158
+ }
159
+
160
+ &.badge-red {
161
+ background-color: var(--color-error-200);
162
+ color: var(--color-error-800);
163
+
164
+ .badge-icon-dot,
165
+ .badge-icon-custom {
166
+ color: var(--color-error-800) !important;
167
+ }
168
+ }
169
+
170
+ &.badge-yellow {
171
+ background-color: var(--color-warning-200);
172
+ color: var(--color-warning-800);
173
+
174
+ .badge-icon-dot,
175
+ .badge-icon-custom {
176
+ color: var(--color-warning-800) !important;
177
+ }
178
+ }
179
+
180
+ &.badge-green {
181
+ background-color: var(--color-success-200);
182
+ color: var(--color-success-800);
183
+
184
+ .badge-icon-dot,
185
+ .badge-icon-custom {
186
+ color: var(--color-success-800) !important;
187
+ }
188
+ }
189
+
190
+ &.badge-purple {
191
+ background-color: var(--color-purple-200);
192
+ color: var(--color-purple-800);
193
+
194
+ .badge-icon-dot,
195
+ .badge-icon-custom {
196
+ color: var(--color-purple-800) !important;
197
+ }
198
+ }
199
+
200
+ &.badge-pink {
201
+ background-color: var(--color-pink-200);
202
+ color: var(--color-pink-800);
203
+
204
+ .badge-icon-dot,
205
+ .badge-icon-custom {
206
+ color: var(--color-pink-800) !important;
207
+ }
208
+ }
209
+
210
+ &.badge-orange {
211
+ background-color: var(--color-orange-200);
212
+ color: var(--color-orange-800);
213
+
214
+ .badge-icon-dot,
215
+ .badge-icon-custom {
216
+ color: var(--color-orange-800) !important;
217
+ }
218
+ }
219
+ }
220
+
221
+ /* ==========================================================================
222
+ MEDIUM EMPHASIS VARIANTS
223
+ ========================================================================== */
224
+
225
+ &.badge-medium {
226
+ border: var(--bh-badge-border-medium);
227
+
228
+ &.badge-gray {
229
+ background-color: var(--color-neutral-50);
230
+ color: var(--color-neutral-700);
231
+
232
+ .badge-icon-dot,
233
+ .badge-icon-custom {
234
+ color: var(--color-neutral-700) !important;
235
+ }
236
+ }
237
+
238
+ &.badge-blue {
239
+ background-color: var(--color-brand-100);
240
+ color: var(--color-brand-700);
241
+
242
+ .badge-icon-dot,
243
+ .badge-icon-custom {
244
+ color: var(--color-brand-700) !important;
245
+ }
246
+ }
247
+
248
+ &.badge-red {
249
+ background-color: var(--color-error-50);
250
+ color: var(--color-error-700);
251
+
252
+ .badge-icon-dot,
253
+ .badge-icon-custom {
254
+ color: var(--color-error-700) !important;
255
+ }
256
+ }
257
+
258
+ &.badge-yellow {
259
+ background-color: var(--color-warning-50);
260
+ color: var(--color-warning-700);
261
+
262
+ .badge-icon-dot,
263
+ .badge-icon-custom {
264
+ color: var(--color-warning-700) !important;
265
+ }
266
+ }
267
+
268
+ &.badge-green {
269
+ background-color: var(--color-success-50);
270
+ color: var(--color-success-700);
271
+
272
+ .badge-icon-dot,
273
+ .badge-icon-custom {
274
+ color: var(--color-success-700) !important;
275
+ }
276
+ }
277
+
278
+ &.badge-purple {
279
+ background-color: hsl(270, 70%, 97%);
280
+ color: hsl(270, 70%, 40%);
281
+
282
+ .badge-icon-dot,
283
+ .badge-icon-custom {
284
+ color: hsl(270, 70%, 40%) !important;
285
+ }
286
+ }
287
+
288
+ &.badge-pink {
289
+ background-color: hsl(330, 70%, 97%);
290
+ color: hsl(330, 70%, 40%);
291
+
292
+ .badge-icon-dot,
293
+ .badge-icon-custom {
294
+ color: hsl(330, 70%, 40%) !important;
295
+ }
296
+ }
297
+
298
+ &.badge-orange {
299
+ background-color: hsl(25, 90%, 97%);
300
+ color: hsl(25, 90%, 40%);
301
+
302
+ .badge-icon-dot,
303
+ .badge-icon-custom {
304
+ color: hsl(25, 90%, 40%) !important;
305
+ }
306
+ }
307
+ }
308
+
309
+ /* ==========================================================================
310
+ LOW EMPHASIS VARIANTS
311
+ ========================================================================== */
312
+
313
+ &.badge-low {
314
+ border: var(--bh-badge-border-low);
315
+ &.badge-gray {
316
+ background-color: transparent;
317
+ color: var(--color-neutral-600);
318
+ border-color: var(--color-neutral-600);
319
+
320
+ .badge-icon-dot,
321
+ .badge-icon-custom {
322
+ color: var(--color-neutral-600) !important;
323
+ }
324
+ }
325
+
326
+ &.badge-blue {
327
+ background-color: transparent;
328
+ color: var(--color-brand-600);
329
+ border-color: var(--color-brand-600);
330
+
331
+ .badge-icon-dot,
332
+ .badge-icon-custom {
333
+ color: var(--color-brand-600) !important;
334
+ }
335
+ }
336
+
337
+ &.badge-red {
338
+ background-color: transparent;
339
+ color: var(--color-error-600);
340
+ border-color: var(--color-error-600);
341
+
342
+ .badge-icon-dot,
343
+ .badge-icon-custom {
344
+ color: var(--color-error-600) !important;
345
+ }
346
+ }
347
+
348
+ &.badge-yellow {
349
+ background-color: transparent;
350
+ color: var(--color-warning-600);
351
+ border-color: var(--color-warning-600);
352
+
353
+ .badge-icon-dot,
354
+ .badge-icon-custom {
355
+ color: var(--color-warning-600) !important;
356
+ }
357
+ }
358
+
359
+ &.badge-green {
360
+ background-color: transparent;
361
+ color: var(--color-success-600);
362
+ border-color: var(--color-success-600);
363
+
364
+ .badge-icon-dot,
365
+ .badge-icon-custom {
366
+ color: var(--color-success-600) !important;
367
+ }
368
+ }
369
+
370
+ &.badge-purple {
371
+ background-color: transparent;
372
+ color: var(--color-purple-600);
373
+ border-color: var(--color-purple-600);
374
+
375
+ .badge-icon-dot,
376
+ .badge-icon-custom {
377
+ color: var(--color-purple-600) !important;
378
+ }
379
+ }
380
+
381
+ &.badge-pink {
382
+ background-color: transparent;
383
+ color: var(--color-pink-600);
384
+ border-color: var(--color-pink-600);
385
+
386
+ .badge-icon-dot,
387
+ .badge-icon-custom {
388
+ color: var(--color-pink-600) !important;
389
+ }
390
+ }
391
+
392
+ &.badge-orange {
393
+ background-color: transparent;
394
+ color: var(--color-orange-600);
395
+ border-color: var(--color-orange-600);
396
+
397
+ .badge-icon-dot,
398
+ .badge-icon-custom {
399
+ color: var(--color-orange-600) !important;
400
+ }
401
+ }
402
+ }
403
+
404
+ &.badge-gray {
405
+ .badge-dismiss span {
406
+ color: var(--color-neutral-600) !important;
407
+ }
408
+ .badge-dismiss {
409
+ &:hover {
410
+ background-color: var(--color-neutral-300);
411
+ }
412
+ }
413
+ }
414
+
415
+ &.badge-blue {
416
+ .badge-dismiss span {
417
+ color: var(--color-brand-600) !important;
418
+ }
419
+ .badge-dismiss {
420
+ &:hover {
421
+ background-color: var(--color-brand-300);
422
+ }
423
+ }
424
+ }
425
+
426
+ &.badge-red {
427
+ .badge-dismiss span {
428
+ color: var(--color-error-600) !important;
429
+ }
430
+ .badge-dismiss {
431
+ &:hover {
432
+ background-color: var(--color-error-300);
433
+ }
434
+ }
435
+ }
436
+
437
+ &.badge-yellow {
438
+ .badge-dismiss span {
439
+ color: var(--color-warning-600) !important;
440
+ }
441
+ .badge-dismiss {
442
+ &:hover {
443
+ background-color: var(--color-warning-300);
444
+ }
445
+ }
446
+ }
447
+
448
+ &.badge-green {
449
+ .badge-dismiss span {
450
+ color: var(--color-success-600) !important;
451
+ }
452
+ .badge-dismiss {
453
+ &:hover {
454
+ background-color: var(--color-success-300);
455
+ }
456
+ }
457
+ }
458
+
459
+ &.badge-purple {
460
+ .badge-dismiss span {
461
+ color: var(--color-purple-600) !important;
462
+ }
463
+ .badge-dismiss {
464
+ &:hover {
465
+ background-color: var(--color-purple-300);
466
+ }
467
+ }
468
+ }
469
+
470
+ &.badge-pink {
471
+ .badge-dismiss span {
472
+ color: var(--color-pink-600) !important;
473
+ }
474
+ .badge-dismiss {
475
+ &:hover {
476
+ background-color: var(--color-pink-300);
477
+ }
478
+ }
479
+ }
480
+
481
+ &.badge-orange {
482
+ .badge-dismiss span {
483
+ color: var(--color-orange-600) !important;
484
+ }
485
+ .badge-dismiss {
486
+ &:hover {
487
+ background-color: var(--color-orange-300);
488
+ }
489
+ }
490
+ }
491
+
492
+ // --- States ---
493
+ &.badge-disabled {
494
+ opacity: 0.5;
495
+ cursor: not-allowed;
496
+ }
497
+ }
@@ -0,0 +1,227 @@
1
+ /* ==========================================================================
2
+ BH-BUTTON-ICON COMPONENT STYLES
3
+ Uses tokens from _button-icon.tokens.scss
4
+ ========================================================================== */
5
+
6
+ @use './_button-icon.tokens.scss';
7
+
8
+ :host {
9
+ display: inline-block;
10
+ font-family: var(--bh-font-family);
11
+ }
12
+
13
+ /* ==========================================================================
14
+ BASE BUTTON
15
+ ========================================================================== */
16
+
17
+ .button-icon {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ border: none;
22
+ border-radius: var(--bh-button-icon-border-radius);
23
+ cursor: pointer;
24
+ transition: var(--bh-button-icon-transition);
25
+ font-family: inherit;
26
+ outline: none;
27
+ padding: 0;
28
+ }
29
+
30
+ .button-icon:focus-visible {
31
+ box-shadow: 0 0 0 var(--bh-button-icon-focus-ring-offset) var(--bh-white),
32
+ 0 0 0 calc(var(--bh-button-icon-focus-ring-offset) + var(--bh-button-icon-focus-ring-width))
33
+ var(--bh-button-icon-focus-ring-color);
34
+ }
35
+
36
+ /* ==========================================================================
37
+ SIZE VARIATIONS
38
+ ========================================================================== */
39
+
40
+ .button-icon-xs {
41
+ width: var(--bh-button-icon-size-xs);
42
+ height: var(--bh-button-icon-size-xs);
43
+ }
44
+
45
+ .button-icon-xs .icon {
46
+ font-size: var(--bh-button-icon-icon-size-xs);
47
+ }
48
+
49
+ .button-icon-sm {
50
+ width: var(--bh-button-icon-size-sm);
51
+ height: var(--bh-button-icon-size-sm);
52
+ }
53
+
54
+ .button-icon-sm .icon {
55
+ font-size: var(--bh-button-icon-icon-size-sm);
56
+ }
57
+
58
+ .button-icon-md {
59
+ width: var(--bh-button-icon-size-md);
60
+ height: var(--bh-button-icon-size-md);
61
+ }
62
+
63
+ .button-icon-md .icon {
64
+ font-size: var(--bh-button-icon-icon-size-md);
65
+ }
66
+
67
+ .button-icon-lg {
68
+ width: var(--bh-button-icon-size-lg);
69
+ height: var(--bh-button-icon-size-lg);
70
+ }
71
+
72
+ .button-icon-lg .icon {
73
+ font-size: var(--bh-button-icon-icon-size-lg);
74
+ }
75
+
76
+ /* ==========================================================================
77
+ HIERARCHY STYLES - PRIMARY
78
+ ========================================================================== */
79
+
80
+ .button-icon-primary {
81
+ background: var(--bh-button-icon-primary-bg);
82
+ color: var(--bh-button-icon-primary-color);
83
+ }
84
+
85
+ .button-icon-primary:hover:not(.button-icon-disabled) {
86
+ background: var(--bh-button-icon-primary-bg-hover);
87
+ }
88
+
89
+ .button-icon-primary:active:not(.button-icon-disabled) {
90
+ background: var(--bh-button-icon-primary-bg-active);
91
+ }
92
+
93
+ /* ==========================================================================
94
+ HIERARCHY STYLES - SECONDARY
95
+ ========================================================================== */
96
+
97
+ .button-icon-secondary {
98
+ background: var(--bh-button-icon-secondary-bg);
99
+ color: var(--bh-button-icon-secondary-color);
100
+ border: 1px solid var(--bh-button-icon-secondary-border);
101
+ }
102
+
103
+ .button-icon-secondary:hover:not(.button-icon-disabled) {
104
+ background: var(--bh-button-icon-secondary-bg-hover);
105
+ border-color: var(--bh-button-icon-secondary-border-hover);
106
+ }
107
+
108
+ .button-icon-secondary:active:not(.button-icon-disabled) {
109
+ background: var(--bh-button-icon-secondary-bg-active);
110
+ }
111
+
112
+ /* ==========================================================================
113
+ HIERARCHY STYLES - TERTIARY
114
+ ========================================================================== */
115
+
116
+ .button-icon-tertiary {
117
+ background: var(--bh-button-icon-tertiary-bg);
118
+ color: var(--bh-button-icon-tertiary-color);
119
+ }
120
+
121
+ .button-icon-tertiary:hover:not(.button-icon-disabled) {
122
+ background: var(--bh-button-icon-tertiary-bg-hover);
123
+ }
124
+
125
+ .button-icon-tertiary:active:not(.button-icon-disabled) {
126
+ background: var(--bh-button-icon-tertiary-bg-active);
127
+ }
128
+
129
+ /* ==========================================================================
130
+ HIERARCHY STYLES - QUATERNARY
131
+ ========================================================================== */
132
+
133
+ .button-icon-quaternary {
134
+ background: var(--bh-button-icon-quaternary-bg);
135
+ color: var(--bh-button-icon-quaternary-color);
136
+ }
137
+
138
+ .button-icon-quaternary:hover:not(.button-icon-disabled) {
139
+ background: var(--bh-button-icon-quaternary-bg-hover);
140
+ color: var(--bh-button-icon-quaternary-color-hover);
141
+ }
142
+
143
+ .button-icon-quaternary:active:not(.button-icon-disabled) {
144
+ background: var(--bh-button-icon-quaternary-bg-active);
145
+ }
146
+
147
+ /* ==========================================================================
148
+ STATE STYLES
149
+ ========================================================================== */
150
+
151
+ /* Disabled State */
152
+ .button-icon-disabled {
153
+ opacity: var(--bh-button-icon-disabled-opacity);
154
+ cursor: not-allowed;
155
+ }
156
+
157
+ /* Loading State */
158
+ .button-icon-loading {
159
+ cursor: wait;
160
+ }
161
+
162
+ /* ==========================================================================
163
+ LOADING SPINNER
164
+ ========================================================================== */
165
+
166
+ .loading-spinner {
167
+ width: var(--bh-button-icon-spinner-size-md);
168
+ height: var(--bh-button-icon-spinner-size-md);
169
+ border: var(--bh-button-icon-spinner-border-width) solid currentColor;
170
+ border-top-color: transparent;
171
+ border-radius: 50%;
172
+ animation: spin var(--bh-button-icon-spinner-animation-duration) linear infinite;
173
+ }
174
+
175
+ .button-icon-sm .loading-spinner {
176
+ width: var(--bh-button-icon-spinner-size-sm);
177
+ height: var(--bh-button-icon-spinner-size-sm);
178
+ }
179
+
180
+ .button-icon-xs .loading-spinner {
181
+ width: var(--bh-button-icon-spinner-size-xs);
182
+ height: var(--bh-button-icon-spinner-size-xs);
183
+ }
184
+
185
+ .button-icon-lg .loading-spinner {
186
+ width: var(--bh-button-icon-spinner-size-lg);
187
+ height: var(--bh-button-icon-spinner-size-lg);
188
+ }
189
+
190
+ @keyframes spin {
191
+ from {
192
+ transform: rotate(0deg);
193
+ }
194
+ to {
195
+ transform: rotate(360deg);
196
+ }
197
+ }
198
+
199
+ /* ==========================================================================
200
+ ICON STYLES
201
+ ========================================================================== */
202
+
203
+ .icon {
204
+ display: flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ }
208
+
209
+ /* ==========================================================================
210
+ MATERIAL SYMBOLS BASE STYLES
211
+ ========================================================================== */
212
+
213
+ .material-symbols-outlined {
214
+ font-family: 'Material Symbols Outlined';
215
+ font-weight: normal;
216
+ font-style: normal;
217
+ line-height: 1;
218
+ letter-spacing: normal;
219
+ text-transform: none;
220
+ display: inline-block;
221
+ white-space: nowrap;
222
+ word-wrap: normal;
223
+ direction: ltr;
224
+ font-feature-settings: 'liga';
225
+ -webkit-font-smoothing: antialiased;
226
+ font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
227
+ }