@sbb-esta/lyne-elements-dev 5.9.0-dev.1790082244 → 5.9.0-dev.1790138893

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,6 +1,443 @@
1
1
  @use '../core/styles' as sbb;
2
2
 
3
3
  $theme: 'standard' !default;
4
+ $disabled: '[disabled], :disabled, [disabled-interactive], .sbb-disabled-interactive';
5
+ $active: ':active, :state(active)';
6
+ $loading: '[loading], .sbb-loading';
7
+
8
+ @mixin variables--host {
9
+ display: inline-block;
10
+
11
+ // Use !important here to not interfere with Firefox focus ring definition
12
+ // which appears in normalize CSS of several frameworks.
13
+ outline: none !important;
14
+
15
+ --sbb-button-transition-duration: var(
16
+ --sbb-disable-animation-duration,
17
+ var(--sbb-animation-duration-2x)
18
+ );
19
+ --sbb-button-box-shadow-definition:
20
+ var(--sbb-shadow-elevation-level-3-shadow-2-offset-x) var(--sbb-button-shadow-2-offset-y)
21
+ var(--sbb-button-shadow-2-blur) var(--sbb-shadow-elevation-level-3-shadow-2-spread)
22
+ var(--sbb-button-shadow-2-color),
23
+ var(--sbb-shadow-elevation-level-3-shadow-1-offset-x) var(--sbb-button-shadow-1-offset-y)
24
+ var(--sbb-button-shadow-1-blur) var(--sbb-shadow-elevation-level-3-shadow-1-spread)
25
+ var(--sbb-button-shadow-1-color);
26
+
27
+ // Calculated and private variables
28
+ --_width: unset;
29
+ --_border-color: var(--sbb-button-color-default-border);
30
+ --_background-color: var(--sbb-button-color-default-background);
31
+ --_background: var(--_background-color);
32
+ --_color: var(--sbb-button-color-default-text);
33
+ --_button-inset: 0;
34
+ --_hover-offset: #{sbb.px-to-rem-build(1)};
35
+ --_padding-block: var(--sbb-button-padding-block-min);
36
+ --_padding-inline: var(--sbb-button-padding-inline);
37
+
38
+ // The overlap-fix closes a small visual gap between border and background color when hovered.
39
+ // As long as the border color corresponds to the background color, we slightly increase the border width.
40
+ // This doesn't interfere with the content, but visually closes the small gap.
41
+ // The secondary button itself can override it to 0 because it doesn't need the workaround.
42
+ // We used px unit as it is not relative to anything.
43
+ --_border: calc(var(--sbb-button-border-width) + var(--sbb-button-border-overlap-fix, 1px)) solid
44
+ var(--_border-color);
45
+ --_animation-loading-delay: var(
46
+ --sbb-disable-animation-duration,
47
+ var(--sbb-button-loading-delay)
48
+ );
49
+ --_animation-loading-duration: var(--sbb-disable-animation-duration, 3s);
50
+ --_animation-loading-rotate-function: linear(0, 0.25 12.5% 37.5%, 0.75 62.5% 87.5%, 1);
51
+ --_animation-loading-rotate: sbb-button-rotate var(--_animation-loading-duration)
52
+ var(--_animation-loading-delay) infinite var(--_animation-loading-rotate-function);
53
+ --_animation-loading-move: sbb-button-move calc(var(--_animation-loading-duration) / 2)
54
+ var(--_animation-loading-delay) alternate infinite linear;
55
+
56
+ @media (forced-colors: active) {
57
+ --sbb-button-color-default-border: CanvasText !important;
58
+ --sbb-button-color-active-border: Highlight !important;
59
+ --sbb-button-color-default-background: Canvas !important;
60
+ --sbb-button-color-hover-background: Canvas !important;
61
+ --sbb-button-color-active-background: Canvas !important;
62
+ --sbb-button-color-disabled-background: Canvas !important;
63
+ --sbb-button-color-disabled-text: GrayText !important;
64
+ --sbb-button-color-loading-border: Highlight !important;
65
+ --_sbb-button-loading-hidden-border-color: Canvas !important;
66
+
67
+ // For static cases, button and link roles will override it.
68
+ --sbb-button-color-default-text: CanvasText !important;
69
+ --sbb-button-color-hover-text: CanvasText !important;
70
+ --sbb-button-color-active-text: CanvasText !important;
71
+
72
+ // Calculated and private variables
73
+ --sbb-button-border-overlap-fix: 0rem;
74
+ }
75
+ }
76
+
77
+ @mixin variables--action-base {
78
+ gap: var(--sbb-button-gap);
79
+ align-items: center;
80
+ justify-content: center;
81
+ font-size: var(--sbb-text-font-size-xs);
82
+ font-weight: bold;
83
+ letter-spacing: var(--sbb-letter-spacing-text);
84
+ line-height: var(--sbb-typo-line-height-text);
85
+ text-align: left;
86
+ white-space: nowrap;
87
+ text-decoration: none;
88
+ min-height: var(--sbb-button-min-height);
89
+ outline: none;
90
+
91
+ // Width is set in icon-only variant
92
+ width: var(--_width);
93
+ border-radius: var(--sbb-button-border-radius);
94
+ color: var(--_color);
95
+ cursor: var(--sbb-button-cursor);
96
+ user-select: none;
97
+ background: var(--_background);
98
+ border: var(--_border-action);
99
+ transition-duration: var(--sbb-button-transition-duration);
100
+ transition-timing-function: var(--sbb-button-transition-easing-function);
101
+
102
+ // When using padding-block as transition-property, it doesn't work in Safari
103
+ transition-property: color, background-color, padding-top, padding-bottom;
104
+ animation: var(--_animation);
105
+
106
+ // The padding block value is only a minimal padding to preserve a padding if the content becomes larger than intended.
107
+ // Positioning of the content is made by flexbox vertical centering.
108
+ // The real padding displayed is larger than the defined value below.
109
+ padding-block: var(--_padding-block);
110
+ padding-inline: var(--_padding-inline);
111
+
112
+ // Needed for support border (see below)
113
+ position: relative;
114
+ }
115
+
116
+ @mixin variables--forced-colors-button {
117
+ @media (forced-colors: active) {
118
+ --sbb-button-color-default-text: ButtonText !important;
119
+ --sbb-button-color-hover-text: ButtonText !important;
120
+ --sbb-button-color-active-text: ButtonText !important;
121
+ }
122
+ }
123
+
124
+ @mixin variables--forced-colors-link {
125
+ @media (forced-colors: active) {
126
+ --sbb-button-color-default-text: LinkText !important;
127
+ --sbb-button-color-hover-text: LinkText !important;
128
+ --sbb-button-color-active-text: LinkText !important;
129
+ }
130
+ }
131
+
132
+ @mixin variables--negative {
133
+ --sbb-button-color-disabled-background: var(--sbb-background-color-3-negative);
134
+ --sbb-button-color-disabled-text: var(--sbb-color-aluminium);
135
+ }
136
+
137
+ @mixin variables--size-l {
138
+ --sbb-button-min-height: var(--sbb-button-min-height-size-l);
139
+ --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-l);
140
+ }
141
+
142
+ @mixin variables--size-m {
143
+ --sbb-button-min-height: var(--sbb-button-min-height-size-m);
144
+ --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-m);
145
+ }
146
+
147
+ @mixin variables--size-s {
148
+ --sbb-button-min-height: var(--sbb-button-min-height-size-s);
149
+ --sbb-button-padding-inline: var(--sbb-button-padding-inline-size-s);
150
+ --sbb-button-gap: var(--sbb-spacing-fixed-1x);
151
+ }
152
+
153
+ @mixin variables--icon-only {
154
+ --sbb-button-padding-inline: 0;
155
+ --_width: var(--sbb-button-min-height);
156
+ --_animation-loading-rotate-function: linear;
157
+ }
158
+
159
+ @mixin variables--hover {
160
+ @include sbb.hover-mq($hover: true) {
161
+ --sbb-button-translate-y-content-hover: #{sbb.px-to-rem-build(-1)};
162
+ --sbb-button-shadow-1-offset-y: calc(
163
+ 0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-offset-y)
164
+ );
165
+ --sbb-button-shadow-1-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-1-blur));
166
+ --sbb-button-shadow-2-blur: calc(0.5 * var(--sbb-shadow-elevation-level-3-shadow-2-blur));
167
+ --sbb-button-cursor: var(--sbb-cursor-pointer);
168
+ --_border-color: var(--sbb-button-color-hover-border);
169
+ --_color: var(--sbb-button-color-hover-text);
170
+ --_background-color: var(--sbb-button-color-hover-background);
171
+ --_button-inset: calc(var(--sbb-button-border-width) * -1);
172
+ @content;
173
+ }
174
+
175
+ @media (forced-colors: active) {
176
+ --sbb-button-color-hover-border: Highlight !important;
177
+ }
178
+ }
179
+
180
+ @mixin variables--disabled {
181
+ --sbb-button-cursor: var(--sbb-cursor-default);
182
+ --_color: var(--sbb-button-color-disabled-text);
183
+ --_background-color: var(--sbb-button-color-disabled-background);
184
+ --_border-color: var(--sbb-button-color-disabled-border);
185
+ --_border: var(--sbb-button-border-disabled-width) var(--sbb-button-border-disabled-style)
186
+ var(--_border-color);
187
+ }
188
+
189
+ @mixin variables--active {
190
+ --_color: var(--sbb-button-color-active-text);
191
+ --_background-color: var(--sbb-button-color-active-background);
192
+ --_border-color: var(--sbb-button-color-active-border);
193
+ }
194
+
195
+ @mixin variables--before {
196
+ content: '';
197
+ position: absolute;
198
+ inset: var(--_button-inset);
199
+ border: var(--_border);
200
+ border-radius: var(--sbb-button-border-radius);
201
+ pointer-events: none;
202
+ box-shadow: var(--sbb-button-box-shadow);
203
+ transition-duration: var(--sbb-button-transition-duration);
204
+ transition-timing-function: var(--sbb-button-transition-easing-function);
205
+ transition-property: inset, border, box-shadow;
206
+ }
207
+
208
+ @mixin variables--focus-visible {
209
+ @include sbb.focus-outline;
210
+
211
+ outline-offset: var(--_loading-outline-offset, var(--sbb-focus-outline-offset));
212
+ }
213
+
214
+ @mixin variables--loading-animation-keyframes {
215
+ @keyframes sbb-button-rotate {
216
+ from {
217
+ --sbb-button-loading-angle: -90deg;
218
+ }
219
+
220
+ to {
221
+ --sbb-button-loading-angle: 270deg;
222
+ }
223
+ }
224
+
225
+ @keyframes sbb-button-move {
226
+ from {
227
+ --sbb-button-loading-offset: 0%;
228
+ }
229
+
230
+ to {
231
+ --sbb-button-loading-offset: 100%;
232
+ }
233
+ }
234
+ }
235
+
236
+ @mixin variables--loading-animation-background {
237
+ --_background:
238
+ border-box padding-box linear-gradient(var(--_background-color)),
239
+ border-box
240
+ conic-gradient(
241
+ from var(--sbb-button-loading-angle) at
242
+ clamp(
243
+ calc(var(--sbb-button-min-height) / 2),
244
+ var(--sbb-button-loading-offset),
245
+ calc(100% - var(--sbb-button-min-height) / 2)
246
+ )
247
+ 50%,
248
+ var(--sbb-button-color-loading-border) 0deg,
249
+ var(--sbb-button-color-loading-border) 300deg,
250
+ var(--sbb-button-color-active-text) 360deg
251
+ ),
252
+ var(--_background-color);
253
+ }
254
+
255
+ @mixin variables--loading-animation {
256
+ --_loading-outline-offset: calc(
257
+ var(--sbb-focus-outline-offset) + var(--sbb-button-loading-border-width)
258
+ );
259
+ --_border: none;
260
+ --_border-action: var(--sbb-button-loading-border-width) dotted
261
+ var(--_sbb-button-loading-hidden-border-color, transparent);
262
+ --_padding-block: calc(
263
+ var(--sbb-button-padding-block-min) - var(--sbb-button-loading-border-width)
264
+ );
265
+ --_padding-inline: calc(
266
+ var(--sbb-button-padding-inline) - var(--sbb-button-loading-border-width)
267
+ );
268
+ --_animation: var(--_animation-loading-rotate), var(--_animation-loading-move);
269
+ }
270
+
271
+ @mixin variables--primary {
272
+ --sbb-button-color-active-background: var(--sbb-color-primary150);
273
+ --sbb-button-color-active-border: var(--sbb-color-primary150);
274
+ --sbb-button-color-active-text: var(--sbb-color-4-negative);
275
+ --sbb-button-color-default-background: var(--sbb-color-primary);
276
+ --sbb-button-color-default-border: var(--sbb-color-primary);
277
+ --sbb-button-color-default-text: var(--sbb-color-1-negative);
278
+ --sbb-button-color-hover-background: var(--sbb-color-primary125);
279
+ --sbb-button-color-hover-border: var(--sbb-color-primary125);
280
+ --sbb-button-color-hover-text: var(--sbb-color-3-negative);
281
+ --sbb-button-color-loading-border: light-dark(
282
+ color-mix(
283
+ in srgb,
284
+ var(--sbb-button-color-active-background) 50%,
285
+ var(--sbb-button-color-default-text)
286
+ ),
287
+ color-mix(
288
+ in srgb,
289
+ var(--sbb-button-color-active-background) 70%,
290
+ var(--sbb-button-color-default-text)
291
+ )
292
+ );
293
+ --sbb-button-shadow-1-color: light-dark(
294
+ color-mix(in srgb, var(--sbb-color-primary) 20%, transparent),
295
+ color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)
296
+ );
297
+ --sbb-button-shadow-2-color: light-dark(
298
+ color-mix(in srgb, var(--sbb-color-primary125) 20%, transparent),
299
+ color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)
300
+ );
301
+ }
302
+
303
+ @mixin variables--primary-negative {
304
+ --sbb-button-color-active-background: var(--sbb-color-primary150);
305
+ --sbb-button-color-active-border: var(--sbb-color-primary150);
306
+ --sbb-button-color-active-text: var(--sbb-color-4-negative);
307
+ --sbb-button-color-default-background: var(--sbb-color-primary);
308
+ --sbb-button-color-default-border: var(--sbb-color-primary);
309
+ --sbb-button-color-default-text: var(--sbb-color-1-negative);
310
+ --sbb-button-color-hover-background: var(--sbb-color-primary125);
311
+ --sbb-button-color-hover-border: var(--sbb-color-primary125);
312
+ --sbb-button-color-hover-text: var(--sbb-color-3-negative);
313
+ --sbb-button-color-loading-border: color-mix(
314
+ in srgb,
315
+ var(--sbb-button-color-active-background) 70%,
316
+ var(--sbb-button-color-default-text)
317
+ );
318
+ --sbb-button-shadow-1-color: light-dark(
319
+ color-mix(in srgb, var(--sbb-color-primary) 60%, transparent),
320
+ color-mix(in srgb, var(--sbb-color-primary) 40%, transparent)
321
+ );
322
+ --sbb-button-shadow-2-color: light-dark(
323
+ color-mix(in srgb, var(--sbb-color-primary125) 60%, transparent),
324
+ color-mix(in srgb, var(--sbb-color-primary125) 40%, transparent)
325
+ );
326
+ }
327
+
328
+ @mixin variables--primary-box-shadow {
329
+ --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
330
+ }
331
+
332
+ @mixin variables--secondary {
333
+ --sbb-button-color-active-background: var(--sbb-background-color-3);
334
+ --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);
335
+ --sbb-button-color-active-text: light-dark(
336
+ var(--sbb-color-anthracite),
337
+ var(--sbb-color-graphite)
338
+ );
339
+ --sbb-button-color-default-background: var(--sbb-background-color-1);
340
+ --sbb-button-color-default-border: var(--sbb-border-color-4-inverted);
341
+ --sbb-button-color-default-text: var(--sbb-color-3);
342
+ --sbb-button-color-hover-background: var(--sbb-background-color-1);
343
+ --sbb-button-color-hover-border: var(--sbb-border-color-4-inverted);
344
+ --sbb-button-color-hover-text: var(--sbb-color-4);
345
+ --sbb-button-color-loading-border: var(--sbb-border-color-4-inverted);
346
+ --sbb-button-shadow-1-color: light-dark(
347
+ color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),
348
+ color-mix(in srgb, var(--sbb-color-black) 30%, transparent)
349
+ );
350
+ --sbb-button-shadow-2-color: light-dark(
351
+ color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),
352
+ color-mix(in srgb, var(--sbb-color-black) 30%, transparent)
353
+ );
354
+ --sbb-button-border-overlap-fix: 0rem;
355
+ }
356
+
357
+ @mixin variables--secondary-negative {
358
+ --sbb-button-color-active-background: var(--sbb-background-color-2-negative);
359
+ --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);
360
+ --sbb-button-color-active-text: var(--sbb-color-graphite);
361
+ --sbb-button-color-default-background: var(--sbb-background-color-1-negative);
362
+ --sbb-button-color-default-border: var(--sbb-border-color-4-negative-inverted);
363
+ --sbb-button-color-default-text: var(--sbb-color-3-negative);
364
+ --sbb-button-color-hover-background: var(--sbb-background-color-1-negative);
365
+ --sbb-button-color-hover-border: var(--sbb-border-color-4-negative-inverted);
366
+ --sbb-button-color-hover-text: var(--sbb-color-4-negative);
367
+ --sbb-button-color-loading-border: var(--sbb-border-color-4-negative-inverted);
368
+ --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
369
+ --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
370
+ }
371
+
372
+ @mixin variables--secondary-box-shadow {
373
+ --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
374
+ }
375
+
376
+ @mixin variables--accent {
377
+ --sbb-button-color-active-background: var(--sbb-background-color-1-inverted);
378
+ --sbb-button-color-active-border: var(--sbb-border-color-1);
379
+ --sbb-button-color-active-text: light-dark(var(--sbb-color-cloud), var(--sbb-color-anthracite));
380
+ --sbb-button-color-default-background: var(--sbb-background-color-3-inverted);
381
+ --sbb-button-color-default-border: var(--sbb-border-color-3);
382
+ --sbb-button-color-default-text: var(--sbb-color-1-inverted);
383
+ --sbb-button-color-hover-background: var(--sbb-background-color-3-inverted);
384
+ --sbb-button-color-hover-border: var(--sbb-border-color-3);
385
+ --sbb-button-color-hover-text: var(--sbb-color-3-inverted);
386
+ --sbb-button-color-loading-border: light-dark(var(--sbb-color-iron), var(--sbb-color-silver));
387
+ --sbb-button-shadow-1-color: light-dark(
388
+ color-mix(in srgb, var(--sbb-color-platinum) 20%, transparent),
389
+ color-mix(in srgb, var(--sbb-color-black) 30%, transparent)
390
+ );
391
+ --sbb-button-shadow-2-color: light-dark(
392
+ color-mix(in srgb, var(--sbb-color-cement) 20%, transparent),
393
+ color-mix(in srgb, var(--sbb-color-black) 30%, transparent)
394
+ );
395
+ }
396
+
397
+ @mixin variables--accent-negative {
398
+ --sbb-button-color-active-background: var(--sbb-background-color-1-negative-inverted);
399
+ --sbb-button-color-active-border: var(--sbb-border-color-1-negative);
400
+ --sbb-button-color-active-text: var(--sbb-color-anthracite);
401
+ --sbb-button-color-default-background: var(--sbb-background-color-3-negative-inverted);
402
+ --sbb-button-color-default-border: var(--sbb-border-color-3-negative);
403
+ --sbb-button-color-default-text: var(--sbb-color-1-negative-inverted);
404
+ --sbb-button-color-hover-background: var(--sbb-background-color-3-negative-inverted);
405
+ --sbb-button-color-hover-border: var(--sbb-border-color-3-negative);
406
+ --sbb-button-color-hover-text: var(--sbb-color-4-negative-inverted);
407
+ --sbb-button-color-loading-border: var(--sbb-color-silver);
408
+ --sbb-button-shadow-1-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
409
+ --sbb-button-shadow-2-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
410
+ }
411
+
412
+ @mixin variables--accent-box-shadow {
413
+ --sbb-button-box-shadow: var(--sbb-button-box-shadow-definition);
414
+ }
415
+
416
+ @mixin variables--transparent {
417
+ --sbb-button-color-active-background: var(--sbb-background-color-4);
418
+ --sbb-button-color-active-border: var(--sbb-border-color-4-inverted);
419
+ --sbb-button-color-active-text: var(--sbb-color-1);
420
+ --sbb-button-color-default-background: transparent;
421
+ --sbb-button-color-default-border: transparent;
422
+ --sbb-button-color-default-text: var(--sbb-color-1);
423
+ --sbb-button-color-hover-background: var(--sbb-background-color-3);
424
+ --sbb-button-color-hover-border: var(--sbb-border-color-3-inverted);
425
+ --sbb-button-color-hover-text: var(--sbb-color-1);
426
+ --sbb-button-color-loading-border: light-dark(var(--sbb-color-silver), var(--sbb-color-granite));
427
+ }
428
+
429
+ @mixin variables--transparent-negative {
430
+ --sbb-button-color-active-background: var(--sbb-background-color-4-negative);
431
+ --sbb-button-color-active-border: var(--sbb-border-color-4-negative-inverted);
432
+ --sbb-button-color-active-text: var(--sbb-color-1-negative);
433
+ --sbb-button-color-default-background: transparent;
434
+ --sbb-button-color-default-border: transparent;
435
+ --sbb-button-color-default-text: var(--sbb-color-1-negative);
436
+ --sbb-button-color-hover-background: var(--sbb-background-color-3-negative);
437
+ --sbb-button-color-hover-border: var(--sbb-border-color-3-negative-inverted);
438
+ --sbb-button-color-hover-text: var(--sbb-color-1-negative);
439
+ --sbb-button-color-loading-border: var(--sbb-color-granite);
440
+ }
4
441
 
5
442
  @mixin base {
6
443
  --sbb-button-box-shadow: transparent 0 0;
@@ -97,3 +534,159 @@ $theme: 'standard' !default;
97
534
  --sbb-button-padding-inline-size-m: var(--sbb-spacing-fixed-8x);
98
535
  --sbb-button-padding-inline-size-s: var(--sbb-spacing-fixed-5x);
99
536
  }
537
+
538
+ @mixin rules {
539
+ :is(
540
+ .sbb-button,
541
+ .sbb-button-s,
542
+ .sbb-button-m,
543
+ .sbb-button-l,
544
+ .sbb-secondary-button,
545
+ .sbb-secondary-button-s,
546
+ .sbb-secondary-button-m,
547
+ .sbb-secondary-button-l,
548
+ .sbb-accent-button,
549
+ .sbb-accent-button-s,
550
+ .sbb-accent-button-m,
551
+ .sbb-accent-button-l,
552
+ .sbb-transparent-button,
553
+ .sbb-transparent-button-s,
554
+ .sbb-transparent-button-m,
555
+ .sbb-transparent-button-l
556
+ ) {
557
+ @include sbb.button-reset;
558
+ @include variables--host;
559
+ @include variables--action-base;
560
+
561
+ display: inline flex;
562
+ vertical-align: middle;
563
+
564
+ &:not(a) {
565
+ @include variables--forced-colors-button;
566
+ }
567
+
568
+ &:is(a) {
569
+ @include variables--forced-colors-link;
570
+ }
571
+
572
+ &.sbb-negative {
573
+ @include variables--negative;
574
+ }
575
+
576
+ &.sbb-icon-button {
577
+ @include variables--icon-only;
578
+ }
579
+
580
+ &:not(#{$disabled}, #{$active}, #{$loading}):is(:hover, .sbb-hover) {
581
+ @include variables--hover {
582
+ --sbb-button-padding-block-min: calc(var(--sbb-spacing-fixed-1x) - var(--_hover-offset))
583
+ calc(var(--sbb-spacing-fixed-1x) + var(--_hover-offset));
584
+ }
585
+ }
586
+
587
+ &:is(#{$disabled}) {
588
+ @include variables--disabled;
589
+ }
590
+
591
+ &:not(#{$disabled}):is(#{$active}, #{$loading}) {
592
+ @include variables--active;
593
+ }
594
+
595
+ &::before {
596
+ @include variables--before;
597
+ }
598
+
599
+ &:not(#{$disabled}):is(#{$loading}) {
600
+ @include variables--loading-animation-background;
601
+ @include variables--loading-animation;
602
+ }
603
+
604
+ &:focus-visible::before {
605
+ @include variables--focus-visible;
606
+ }
607
+
608
+ > .sbb-button-label {
609
+ @include sbb.ellipsis;
610
+ }
611
+ }
612
+
613
+ :is(.sbb-button-s, .sbb-secondary-button-s, .sbb-accent-button-s, .sbb-transparent-button-s) {
614
+ @include variables--size-s;
615
+ }
616
+
617
+ :is(.sbb-button-m, .sbb-secondary-button-m, .sbb-accent-button-m, .sbb-transparent-button-m) {
618
+ @include variables--size-m;
619
+ }
620
+
621
+ :is(.sbb-button-l, .sbb-secondary-button-l, .sbb-accent-button-l, .sbb-transparent-button-l) {
622
+ @include variables--size-l;
623
+ }
624
+
625
+ :is(.sbb-button, .sbb-button-s, .sbb-button-m, .sbb-button-l) {
626
+ @include variables--primary;
627
+
628
+ &.sbb-negative {
629
+ @include variables--primary-negative;
630
+ }
631
+
632
+ &:not(#{$disabled}, #{$active}, #{$loading}) {
633
+ @include variables--primary-box-shadow;
634
+ }
635
+ }
636
+
637
+ :is(
638
+ .sbb-secondary-button,
639
+ .sbb-secondary-button-s,
640
+ .sbb-secondary-button-m,
641
+ .sbb-secondary-button-l
642
+ ) {
643
+ @include variables--secondary;
644
+
645
+ &.sbb-negative {
646
+ @include variables--secondary-negative;
647
+ }
648
+
649
+ &:not(#{$disabled}, #{$active}, #{$loading}) {
650
+ @include variables--secondary-box-shadow;
651
+ }
652
+ }
653
+
654
+ :is(.sbb-accent-button, .sbb-accent-button-s, .sbb-accent-button-m, .sbb-accent-button-l) {
655
+ @include variables--accent;
656
+
657
+ &.sbb-negative {
658
+ @include variables--accent-negative;
659
+ }
660
+
661
+ &:not(#{$disabled}, #{$active}, #{$loading}) {
662
+ @include variables--accent-box-shadow;
663
+ }
664
+ }
665
+
666
+ :is(
667
+ .sbb-transparent-button,
668
+ .sbb-transparent-button-s,
669
+ .sbb-transparent-button-m,
670
+ .sbb-transparent-button-l
671
+ ) {
672
+ @include variables--transparent;
673
+
674
+ &.sbb-negative {
675
+ @include variables--transparent-negative;
676
+ }
677
+ }
678
+
679
+ @include variables--loading-animation-keyframes;
680
+
681
+ @property --sbb-button-loading-angle {
682
+ syntax: '<angle>';
683
+ initial-value: 0deg;
684
+ inherits: false;
685
+ }
686
+
687
+ @property --sbb-button-loading-offset {
688
+ syntax: '<percentage>';
689
+ initial-value: 0%;
690
+ inherits: false;
691
+ }
692
+ }