@webority/theme 0.71.0 → 0.73.1
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.
- package/dist/purge-safelist.json +10 -1
- package/dist/webority-theme.css +1 -1
- package/logos/ajuni/logo.svg +76 -0
- package/logos/ajuni/mark.svg +39 -0
- package/logos/buildstudio/logo-on-dark.svg +4 -0
- package/logos/buildstudio/logo.svg +4 -0
- package/logos/buildstudio/mark.svg +4 -0
- package/logos/capnix/logo-on-dark.svg +4 -0
- package/logos/capnix/logo.svg +4 -0
- package/logos/capnix/mark.svg +4 -0
- package/logos/keystone/logo.svg +12 -0
- package/logos/lexa/logo.svg +6 -0
- package/logos/logos.json +58 -0
- package/logos/lumex/logo.svg +6 -0
- package/logos/webority/logo-on-dark.svg +22 -0
- package/logos/webority/logo.svg +22 -0
- package/package.json +3 -1
- package/scss/_components.scss +249 -29
- package/scss/wui/_data.scss +8 -2
package/scss/_components.scss
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
// button beside an input lines up in every form row. Heights are min-height with the label flex-centred; sm/lg
|
|
11
11
|
// set theirs in their size blocks below.
|
|
12
12
|
.btn:not(.btn-sm):not(.btn-lg):not(.btn-pill):not(.btn-pill-sm):not(.u-action):not(.btn-icon) {
|
|
13
|
+
// The height is the field height and the label is flex-centred, so no vertical padding: it
|
|
14
|
+
// would push a button past its field height.
|
|
15
|
+
--bs-btn-padding-y: 0;
|
|
13
16
|
display: inline-flex;
|
|
14
17
|
align-items: center;
|
|
15
18
|
justify-content: center;
|
|
@@ -19,7 +22,7 @@
|
|
|
19
22
|
// Tactile press feedback — every variant AND every size (sm/md/lg). Kept
|
|
20
23
|
// separate from the height rule above so sm/lg (which opt out of the shared
|
|
21
24
|
// control height) still get the nudge. A signal, not a depth cue.
|
|
22
|
-
.btn:not(.btn-pill):not(.btn-pill-sm):not(.u-action):not(.btn-icon):
|
|
25
|
+
.btn:not(.btn-pill):not(.btn-pill-sm):not(.u-action):not(.btn-icon):active:not(:disabled) {
|
|
23
26
|
transform: translateY(1px);
|
|
24
27
|
}
|
|
25
28
|
|
|
@@ -137,7 +140,7 @@
|
|
|
137
140
|
--bs-btn-color: var(--color-text-muted);
|
|
138
141
|
--bs-btn-border-color: var(--color-border-strong);
|
|
139
142
|
--bs-btn-hover-color: var(--color-text);
|
|
140
|
-
--bs-btn-hover-bg: var(--color-
|
|
143
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-primary) 12%, transparent);
|
|
141
144
|
--bs-btn-hover-border-color: var(--color-border-strong);
|
|
142
145
|
--bs-btn-active-color: var(--color-text);
|
|
143
146
|
--bs-btn-active-bg: var(--color-border);
|
|
@@ -169,16 +172,17 @@
|
|
|
169
172
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-danger) 50%, transparent);
|
|
170
173
|
}
|
|
171
174
|
|
|
172
|
-
//
|
|
173
|
-
// action that
|
|
174
|
-
.
|
|
175
|
-
|
|
175
|
+
// Neutral grey button: the secondary button's shape in grey instead of the brand tint, for a
|
|
176
|
+
// supporting action (Back, Skip, Close) that should not carry the brand colour. The fill is the
|
|
177
|
+
// text colour at 8%, 12% on hover and 16% pressed, so it follows the theme in light and dark.
|
|
178
|
+
.btn-neutral {
|
|
179
|
+
--bs-btn-bg: color-mix(in srgb, var(--color-text) 8%, transparent);
|
|
176
180
|
--bs-btn-color: var(--color-text);
|
|
177
181
|
--bs-btn-border-color: transparent;
|
|
178
|
-
--bs-btn-hover-bg: var(--color-
|
|
182
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-text) 12%, transparent);
|
|
179
183
|
--bs-btn-hover-color: var(--color-text);
|
|
180
184
|
--bs-btn-hover-border-color: transparent;
|
|
181
|
-
--bs-btn-active-bg: var(--color-
|
|
185
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-text) 16%, transparent);
|
|
182
186
|
--bs-btn-active-color: var(--color-text);
|
|
183
187
|
--bs-btn-active-border-color: transparent;
|
|
184
188
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
|
|
@@ -234,7 +238,7 @@
|
|
|
234
238
|
opacity: 1;
|
|
235
239
|
cursor: progress;
|
|
236
240
|
}
|
|
237
|
-
// Transparent-fill variants (secondary/ghost/
|
|
241
|
+
// Transparent-fill variants (secondary/ghost/text/neutral/outline-*) have no fill to tint from —
|
|
238
242
|
// key the wash and the label off the accent (text) colour so the hue still shows.
|
|
239
243
|
.btn-secondary.is-loading:disabled,
|
|
240
244
|
.btn-secondary.is-loading.disabled,
|
|
@@ -242,8 +246,10 @@
|
|
|
242
246
|
.btn-secondary-danger.is-loading.disabled,
|
|
243
247
|
.btn-ghost.is-loading:disabled,
|
|
244
248
|
.btn-ghost.is-loading.disabled,
|
|
245
|
-
.btn-
|
|
246
|
-
.btn-
|
|
249
|
+
.btn-text.is-loading:disabled,
|
|
250
|
+
.btn-text.is-loading.disabled,
|
|
251
|
+
.btn-neutral.is-loading:disabled,
|
|
252
|
+
.btn-neutral.is-loading.disabled,
|
|
247
253
|
.btn-outline-primary.is-loading:disabled,
|
|
248
254
|
.btn-outline-primary.is-loading.disabled,
|
|
249
255
|
.btn-outline-danger.is-loading:disabled,
|
|
@@ -265,33 +271,40 @@
|
|
|
265
271
|
// sizes step font-size, horizontal padding and radius together (vertical size
|
|
266
272
|
// comes from --wui-control-height, so a button lines up with an input). Weight
|
|
267
273
|
// is 600 on every rung — buttons read as a deliberate action, not body text.
|
|
268
|
-
// Medium (default): 14px / 600,
|
|
274
|
+
// Medium (default): 14px / 600, about 20px side padding, 18px squircle radius, --wui-control-height tall.
|
|
275
|
+
// Side padding is always twice the vertical padding. A button is its field's height with the label
|
|
276
|
+
// line centred, so its vertical padding is (height - both borders - one line) / 2 and its side
|
|
277
|
+
// padding the height less both borders and one line: about 7.7/15.4, 10.2/20.3 and 12.6/25.2px at sm,
|
|
278
|
+
// md and lg with the theme's line height.
|
|
269
279
|
.btn {
|
|
280
|
+
--wui-btn-height: var(--wui-control-height);
|
|
270
281
|
--bs-btn-border-radius: 18px;
|
|
271
282
|
--bs-btn-font-size: 0.875rem;
|
|
272
283
|
--bs-btn-font-weight: 600;
|
|
273
|
-
--bs-btn-padding-x:
|
|
284
|
+
--bs-btn-padding-x: calc(var(--wui-btn-height) - 2 * var(--bs-btn-border-width) - var(--bs-btn-font-size) * var(--bs-btn-line-height));
|
|
274
285
|
// Progressive enhancement only (Chrome/Safari recent). Unsupported engines
|
|
275
286
|
// keep a plain border-radius arc — not a cross-browser design contract.
|
|
276
287
|
corner-shape: squircle;
|
|
277
288
|
}
|
|
278
|
-
// Small: 12px,
|
|
289
|
+
// Small: 12px, about 15px side padding, 14px squircle radius (proportional to md), as tall as a small field.
|
|
279
290
|
.btn-sm:not(.btn-icon),
|
|
280
291
|
.btn-group-sm > .btn:not(.btn-icon) {
|
|
292
|
+
--wui-btn-height: var(--wui-control-height-sm);
|
|
293
|
+
--bs-btn-padding-y: 0;
|
|
281
294
|
--bs-btn-border-radius: 14px;
|
|
282
295
|
--bs-btn-font-size: 0.75rem;
|
|
283
|
-
--bs-btn-padding-x: 1.125rem;
|
|
284
296
|
display: inline-flex;
|
|
285
297
|
align-items: center;
|
|
286
298
|
justify-content: center;
|
|
287
299
|
min-height: var(--wui-control-height-sm);
|
|
288
300
|
}
|
|
289
|
-
// Large: 16px,
|
|
301
|
+
// Large: 16px, about 25px side padding, 22px squircle radius (proportional to md), as tall as a large field.
|
|
290
302
|
.btn-lg:not(.btn-icon),
|
|
291
303
|
.btn-group-lg > .btn:not(.btn-icon) {
|
|
304
|
+
--wui-btn-height: var(--wui-control-height-lg);
|
|
305
|
+
--bs-btn-padding-y: 0;
|
|
292
306
|
--bs-btn-border-radius: 22px;
|
|
293
307
|
--bs-btn-font-size: 1rem;
|
|
294
|
-
--bs-btn-padding-x: 2rem;
|
|
295
308
|
display: inline-flex;
|
|
296
309
|
align-items: center;
|
|
297
310
|
justify-content: center;
|
|
@@ -304,7 +317,7 @@
|
|
|
304
317
|
// with .btn-anim-none. Every option reads on EVERY variant — the moving layer
|
|
305
318
|
// is tinted from the button's OWN colour (color-mix on currentColor / the
|
|
306
319
|
// resolved --bs-btn fill), so it's a pale sheen on solid fills, a brand shimmer
|
|
307
|
-
// on outline/ghost, a neutral gloss on
|
|
320
|
+
// on outline/ghost, a neutral gloss on neutral/light. All snap off under
|
|
308
321
|
// prefers-reduced-motion (below). Icon-only / link-style actions never animate.
|
|
309
322
|
//
|
|
310
323
|
// (default) royal angled sheen sweep + a restrained −1px lift
|
|
@@ -313,6 +326,8 @@
|
|
|
313
326
|
// .btn-anim-expand a radial glow blooms from the centre
|
|
314
327
|
// .btn-anim-glow a soft colour-matched glow ring + lift
|
|
315
328
|
// .btn-anim-none no hover motion
|
|
329
|
+
// .btn-anim-roll the label rolls up and a trailing icon slides through a round well
|
|
330
|
+
// (AppButton animation="roll" renders the copies it needs)
|
|
316
331
|
//
|
|
317
332
|
// Shared plumbing — a clipped, isolated box so a z-index:-1 layer can sit above
|
|
318
333
|
// the fill but below the label; overflow clips it to the squircle corners.
|
|
@@ -323,8 +338,8 @@
|
|
|
323
338
|
}
|
|
324
339
|
|
|
325
340
|
// --- Sheen (default + .btn-anim-sheen): slim angled glossy band sweeps across.
|
|
326
|
-
.btn:not(.btn-icon):not(.u-action):not(
|
|
327
|
-
.btn-anim-sheen
|
|
341
|
+
.btn:not(.btn-icon):not(.u-action):not([class*="btn-anim-"])::before,
|
|
342
|
+
.btn-anim-sheen::before {
|
|
328
343
|
content: "";
|
|
329
344
|
position: absolute;
|
|
330
345
|
top: 0;
|
|
@@ -342,12 +357,12 @@
|
|
|
342
357
|
transition: transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
|
|
343
358
|
pointer-events: none;
|
|
344
359
|
}
|
|
345
|
-
.btn:not(.btn-icon):not(.u-action):not(
|
|
346
|
-
.btn-anim-sheen:
|
|
360
|
+
.btn:not(.btn-icon):not(.u-action):not([class*="btn-anim-"]):hover:not(:disabled)::before,
|
|
361
|
+
.btn-anim-sheen:hover:not(:disabled)::before {
|
|
347
362
|
transform: translateX(320%) skewX(-18deg);
|
|
348
363
|
}
|
|
349
|
-
.btn:not(.btn-icon):not(.u-action):not(
|
|
350
|
-
.btn-anim-sheen:
|
|
364
|
+
.btn:not(.btn-icon):not(.u-action):not([class*="btn-anim-"]):hover:not(:disabled),
|
|
365
|
+
.btn-anim-sheen:hover:not(:disabled) {
|
|
351
366
|
transform: translateY(-1px);
|
|
352
367
|
}
|
|
353
368
|
|
|
@@ -417,6 +432,129 @@
|
|
|
417
432
|
box-shadow: none;
|
|
418
433
|
}
|
|
419
434
|
|
|
435
|
+
// --- Roll (AppButton animation="roll"): the label rolls up and out while a copy rolls in from
|
|
436
|
+
// below, and a trailing icon in a round well slides out to the right while a copy slides in from
|
|
437
|
+
// the left. Colours stay put; no sheen and no lift. The component renders the label copy and the
|
|
438
|
+
// icon copy (aria-hidden), so this class alone on a plain .btn does nothing.
|
|
439
|
+
.btn-anim-roll {
|
|
440
|
+
--wui-btn-roll-ease: cubic-bezier(0.32, 0.72, 0, 1);
|
|
441
|
+
}
|
|
442
|
+
// The icon well and the pinned icon's end inset scale with the button size, so the well keeps
|
|
443
|
+
// the same share of the button's height and an even gap above, below and beside it.
|
|
444
|
+
:is(.btn-anim-roll, .wui-btn-pin-end) {
|
|
445
|
+
--wui-btn-roll-well: 28px;
|
|
446
|
+
--wui-btn-pin-inset: 8px;
|
|
447
|
+
// How far the arrow sits inside its well: (well - icon) / 2, with the 16, 14 and 20px icons.
|
|
448
|
+
--wui-btn-well-pad: 6px;
|
|
449
|
+
}
|
|
450
|
+
:is(.btn-anim-roll, .wui-btn-pin-end).btn-sm {
|
|
451
|
+
--wui-btn-roll-well: 22px;
|
|
452
|
+
--wui-btn-pin-inset: 6px;
|
|
453
|
+
--wui-btn-well-pad: 4px;
|
|
454
|
+
}
|
|
455
|
+
:is(.btn-anim-roll, .wui-btn-pin-end).btn-lg {
|
|
456
|
+
--wui-btn-roll-well: 34px;
|
|
457
|
+
--wui-btn-pin-inset: 10px;
|
|
458
|
+
--wui-btn-well-pad: 7px;
|
|
459
|
+
}
|
|
460
|
+
.btn-anim-roll:hover:not(:disabled) {
|
|
461
|
+
transform: none;
|
|
462
|
+
}
|
|
463
|
+
.wui-btn-roll {
|
|
464
|
+
position: relative;
|
|
465
|
+
display: inline-block;
|
|
466
|
+
overflow: hidden;
|
|
467
|
+
vertical-align: top;
|
|
468
|
+
}
|
|
469
|
+
.wui-btn-roll__a,
|
|
470
|
+
.wui-btn-roll__b {
|
|
471
|
+
display: block;
|
|
472
|
+
transition: transform 0.5s var(--wui-btn-roll-ease);
|
|
473
|
+
}
|
|
474
|
+
.wui-btn-roll__b {
|
|
475
|
+
position: absolute;
|
|
476
|
+
top: 100%;
|
|
477
|
+
left: 0;
|
|
478
|
+
width: 100%;
|
|
479
|
+
}
|
|
480
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) :is(.wui-btn-roll__a, .wui-btn-roll__b) {
|
|
481
|
+
transform: translateY(-100%);
|
|
482
|
+
}
|
|
483
|
+
.wui-btn-roll-ico {
|
|
484
|
+
position: relative;
|
|
485
|
+
display: inline-grid;
|
|
486
|
+
flex: none;
|
|
487
|
+
place-items: center;
|
|
488
|
+
width: var(--wui-btn-roll-well);
|
|
489
|
+
height: var(--wui-btn-roll-well);
|
|
490
|
+
margin-block: calc((1lh - var(--wui-btn-roll-well)) / 2);
|
|
491
|
+
border-radius: 50%;
|
|
492
|
+
overflow: hidden;
|
|
493
|
+
background: color-mix(in srgb, currentColor 20%, transparent);
|
|
494
|
+
vertical-align: middle;
|
|
495
|
+
}
|
|
496
|
+
.wui-btn-roll-ico > * {
|
|
497
|
+
grid-area: 1 / 1;
|
|
498
|
+
transition: transform 0.5s var(--wui-btn-roll-ease);
|
|
499
|
+
}
|
|
500
|
+
.wui-btn-roll-ico > .wui-btn-roll-ico__next {
|
|
501
|
+
transform: translateX(calc(var(--wui-btn-roll-well) * -1));
|
|
502
|
+
}
|
|
503
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) .wui-btn-roll-ico > :not(.wui-btn-roll-ico__next) {
|
|
504
|
+
transform: translateX(var(--wui-btn-roll-well));
|
|
505
|
+
}
|
|
506
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) .wui-btn-roll-ico > .wui-btn-roll-ico__next {
|
|
507
|
+
transform: translateX(0);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// Pinned trailing icon (AppButton pinRightIcon): the trailing icon in a round well (the roll
|
|
511
|
+
// animation's well when it rolls) sits at the button's end edge and the label centres across the button. Padding on both
|
|
512
|
+
// sides keeps the label centred and clear of the icon; meant for a wide or full-width button.
|
|
513
|
+
.wui-btn-pin-end {
|
|
514
|
+
// The label is centred optically: in the space before the pinned icon, with the same gap from
|
|
515
|
+
// the start edge as from the arrow, so a content-sized button does not look empty on the start
|
|
516
|
+
// side. The end padding holds the well and its inset on top of that gap. The extra 6px gives
|
|
517
|
+
// the label more room on each side than a plain button.
|
|
518
|
+
--wui-btn-pin-extra: 6px;
|
|
519
|
+
--wui-btn-pin-side: calc(var(--bs-btn-padding-x) + var(--wui-btn-pin-extra));
|
|
520
|
+
display: inline-flex;
|
|
521
|
+
align-items: center;
|
|
522
|
+
justify-content: center;
|
|
523
|
+
// The gap from the start edge to the label equals the gap from the label to the arrow itself
|
|
524
|
+
// (the eye reads the arrow, not its pale well), so the end side gives back the well's inner pad.
|
|
525
|
+
// The start gap counts the border.
|
|
526
|
+
padding-inline: calc(var(--wui-btn-pin-side) - var(--bs-btn-border-width))
|
|
527
|
+
calc(var(--wui-btn-roll-well, 1.75em) + var(--wui-btn-pin-inset) + var(--wui-btn-pin-side) - var(--wui-btn-well-pad));
|
|
528
|
+
}
|
|
529
|
+
.wui-btn-pin-end > .wui-btn-pin-icon {
|
|
530
|
+
position: absolute;
|
|
531
|
+
top: 50%;
|
|
532
|
+
right: var(--wui-btn-pin-inset);
|
|
533
|
+
margin: 0;
|
|
534
|
+
transform: translateY(-50%);
|
|
535
|
+
}
|
|
536
|
+
// Shape (AppButton shape): `rounded` is the default squircle radius of each size; `pill` rounds
|
|
537
|
+
// the ends fully and `sharp` has square corners, on every variant and size. Declared after the
|
|
538
|
+
// size rungs so it wins over their radius. The roll and pinned icon wells stay round.
|
|
539
|
+
.btn.wui-btn-shape-pill {
|
|
540
|
+
--bs-btn-border-radius: 999px;
|
|
541
|
+
corner-shape: round;
|
|
542
|
+
}
|
|
543
|
+
.btn.wui-btn-shape-sharp {
|
|
544
|
+
--bs-btn-border-radius: 0;
|
|
545
|
+
corner-shape: round;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
// Without the roll animation the pinned icon still sits in the round well, tinted from the label.
|
|
549
|
+
.wui-btn-pin-end > .wui-btn-pin-icon:not(.wui-btn-roll-ico) {
|
|
550
|
+
display: inline-grid;
|
|
551
|
+
place-items: center;
|
|
552
|
+
width: var(--wui-btn-roll-well, 1.75em);
|
|
553
|
+
height: var(--wui-btn-roll-well, 1.75em);
|
|
554
|
+
border-radius: 50%;
|
|
555
|
+
background: color-mix(in srgb, currentColor 20%, transparent);
|
|
556
|
+
}
|
|
557
|
+
|
|
420
558
|
// ---- Dropdown menu (AppDropdown / <app-dropdown>) -------------------
|
|
421
559
|
// Bootstrap ships a bare .dropdown-item; the design system gives the menu real
|
|
422
560
|
// padding, an icon–label gap, a rounded hover highlight tinted with the brand,
|
|
@@ -543,9 +681,9 @@
|
|
|
543
681
|
}
|
|
544
682
|
|
|
545
683
|
// ---- Ghost button: the tertiary action --------------------------------
|
|
546
|
-
// Brand-coloured text with no box at rest and no underline. Hover lays
|
|
547
|
-
// it, pressing deepens that fill a step
|
|
548
|
-
//
|
|
684
|
+
// Brand-coloured text with no box at rest and no underline. Hover lays the secondary button's fill behind
|
|
685
|
+
// it with the shared sheen sweep and lift, pressing deepens that fill a step with the press nudge,
|
|
686
|
+
// and keyboard focus draws the shared ring. No grey box when disabled or loading.
|
|
549
687
|
// AppButton's `ghost` variant emits this class on both surfaces.
|
|
550
688
|
//
|
|
551
689
|
// No .btn-ghost-sm/-lg rungs: it is an ordinary .btn variant and sizes with Bootstrap's
|
|
@@ -555,10 +693,10 @@
|
|
|
555
693
|
--bs-btn-bg: transparent;
|
|
556
694
|
--bs-btn-border-color: transparent;
|
|
557
695
|
--bs-btn-hover-color: var(--color-primary-ink);
|
|
558
|
-
--bs-btn-hover-bg: var(--color-
|
|
696
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-primary) 12%, transparent);
|
|
559
697
|
--bs-btn-hover-border-color: transparent;
|
|
560
698
|
--bs-btn-active-color: var(--color-primary-ink);
|
|
561
|
-
--bs-btn-active-bg: color-mix(in srgb, var(--color-
|
|
699
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-primary) 18%, transparent);
|
|
562
700
|
--bs-btn-active-border-color: transparent;
|
|
563
701
|
--bs-btn-disabled-color: var(--color-primary-ink);
|
|
564
702
|
--bs-btn-disabled-bg: transparent;
|
|
@@ -589,6 +727,75 @@
|
|
|
589
727
|
opacity: 1;
|
|
590
728
|
}
|
|
591
729
|
|
|
730
|
+
// ---- Text button: an action that reads as a link --------------------------
|
|
731
|
+
// Brand-coloured text with no box in any state: no fill at rest, on hover or pressed, no sheen and
|
|
732
|
+
// no lift, and no side padding, so it lines up with the text around it. Hover deepens the colour.
|
|
733
|
+
// It pairs with animation="roll", whose label roll and round icon well carry the motion.
|
|
734
|
+
// AppButton's `text` variant emits this class on both surfaces.
|
|
735
|
+
.btn-text {
|
|
736
|
+
--bs-btn-color: var(--color-primary-ink);
|
|
737
|
+
--bs-btn-bg: transparent;
|
|
738
|
+
--bs-btn-border-color: transparent;
|
|
739
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-primary-ink) 80%, var(--color-text));
|
|
740
|
+
--bs-btn-hover-bg: transparent;
|
|
741
|
+
--bs-btn-hover-border-color: transparent;
|
|
742
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-primary-ink) 70%, var(--color-text));
|
|
743
|
+
--bs-btn-active-bg: transparent;
|
|
744
|
+
--bs-btn-active-border-color: transparent;
|
|
745
|
+
--bs-btn-disabled-color: var(--color-primary-ink);
|
|
746
|
+
--bs-btn-disabled-bg: transparent;
|
|
747
|
+
--bs-btn-disabled-border-color: transparent;
|
|
748
|
+
}
|
|
749
|
+
// After the size rungs and at their weight, so sm and lg text buttons lose the side padding too.
|
|
750
|
+
.btn.btn-text {
|
|
751
|
+
--bs-btn-padding-x: 0;
|
|
752
|
+
}
|
|
753
|
+
.btn.btn-text,
|
|
754
|
+
.btn.btn-text:hover,
|
|
755
|
+
.btn.btn-text:active,
|
|
756
|
+
.btn.btn-text:focus-visible {
|
|
757
|
+
text-decoration: none;
|
|
758
|
+
}
|
|
759
|
+
.btn.btn-text::before {
|
|
760
|
+
display: none;
|
|
761
|
+
}
|
|
762
|
+
.btn.btn-text:hover:not(:disabled) {
|
|
763
|
+
transform: none;
|
|
764
|
+
}
|
|
765
|
+
.btn.btn-text:focus-visible {
|
|
766
|
+
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
767
|
+
outline-offset: var(--wui-focus-ring-offset);
|
|
768
|
+
box-shadow: none;
|
|
769
|
+
}
|
|
770
|
+
// A text button's icons follow the text: each icon is the text size, and the roll or pinned well
|
|
771
|
+
// is 18, 20 and 22px at sm, md and lg, a snug ring around the icon that never outweighs the label.
|
|
772
|
+
.btn.btn-text {
|
|
773
|
+
--wui-btn-roll-well: 20px;
|
|
774
|
+
--wui-btn-well-pad: 3px;
|
|
775
|
+
--wui-btn-text-icon: 14px;
|
|
776
|
+
}
|
|
777
|
+
.btn.btn-text.btn-sm {
|
|
778
|
+
--wui-btn-roll-well: 18px;
|
|
779
|
+
--wui-btn-well-pad: 3px;
|
|
780
|
+
--wui-btn-text-icon: 12px;
|
|
781
|
+
}
|
|
782
|
+
.btn.btn-text.btn-lg {
|
|
783
|
+
--wui-btn-roll-well: 22px;
|
|
784
|
+
--wui-btn-well-pad: 3px;
|
|
785
|
+
--wui-btn-text-icon: 16px;
|
|
786
|
+
}
|
|
787
|
+
.btn.btn-text svg {
|
|
788
|
+
width: var(--wui-btn-text-icon);
|
|
789
|
+
height: var(--wui-btn-text-icon);
|
|
790
|
+
}
|
|
791
|
+
.btn.btn-text.btn-text:disabled,
|
|
792
|
+
.btn.btn-text.btn-text.disabled {
|
|
793
|
+
background-color: transparent;
|
|
794
|
+
border-color: transparent;
|
|
795
|
+
color: var(--color-primary-ink);
|
|
796
|
+
opacity: 0.55;
|
|
797
|
+
}
|
|
798
|
+
|
|
592
799
|
// ---- Card hover-lift (name is historical) -----------------------------
|
|
593
800
|
// `.card-lifted` does NOT cast a shadow — in-page cards stay flat. It only
|
|
594
801
|
// nudges 1px on hover (tactile signal). API prop stays `lifted` / class
|
|
@@ -900,6 +1107,19 @@ html.is-scrolling body::-webkit-scrollbar-thumb {
|
|
|
900
1107
|
transform: none;
|
|
901
1108
|
box-shadow: none;
|
|
902
1109
|
}
|
|
1110
|
+
// The roll stays still: the label and the icon keep their resting copy.
|
|
1111
|
+
.wui-btn-roll__a,
|
|
1112
|
+
.wui-btn-roll__b,
|
|
1113
|
+
.wui-btn-roll-ico > * {
|
|
1114
|
+
transition: none;
|
|
1115
|
+
}
|
|
1116
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) :is(.wui-btn-roll__a, .wui-btn-roll__b),
|
|
1117
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) .wui-btn-roll-ico > :not(.wui-btn-roll-ico__next) {
|
|
1118
|
+
transform: none;
|
|
1119
|
+
}
|
|
1120
|
+
.btn-anim-roll:is(:hover, :focus-visible):not(:disabled) .wui-btn-roll-ico > .wui-btn-roll-ico__next {
|
|
1121
|
+
transform: translateX(calc(var(--wui-btn-roll-well) * -1));
|
|
1122
|
+
}
|
|
903
1123
|
}
|
|
904
1124
|
|
|
905
1125
|
// ---- Theme-flipped typography utilities ------------------------------------
|
package/scss/wui/_data.scss
CHANGED
|
@@ -572,15 +572,21 @@
|
|
|
572
572
|
min-width: 240px;
|
|
573
573
|
}
|
|
574
574
|
.wui-filter-more-panel > .field,
|
|
575
|
+
.wui-filter-more-panel > .wui-filter-popover-field > .field,
|
|
575
576
|
.wui-filter-more-panel > wui-select,
|
|
577
|
+
.wui-filter-more-panel > .wui-filter-popover-field > wui-select,
|
|
576
578
|
.wui-filter-more-panel > wui-multiselect,
|
|
579
|
+
.wui-filter-more-panel > .wui-filter-popover-field > wui-multiselect,
|
|
577
580
|
.wui-filter-more-panel > wui-date-range,
|
|
578
|
-
.wui-filter-more-panel > .
|
|
581
|
+
.wui-filter-more-panel > .wui-filter-popover-field > wui-date-range,
|
|
582
|
+
.wui-filter-more-panel > .search-wrap,
|
|
583
|
+
.wui-filter-more-panel > .wui-filter-popover-field > .search-wrap {
|
|
579
584
|
flex: none;
|
|
580
585
|
min-width: 0;
|
|
581
586
|
max-width: none;
|
|
582
587
|
}
|
|
583
|
-
.wui-filter-more-panel > wui-date-range .daterange
|
|
588
|
+
.wui-filter-more-panel > wui-date-range .daterange,
|
|
589
|
+
.wui-filter-more-panel > .wui-filter-popover-field > wui-date-range .daterange {
|
|
584
590
|
width: 100%;
|
|
585
591
|
}
|
|
586
592
|
.wui-filter-more-head {
|