@webority/theme 0.87.3 → 0.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/_components.scss +1 -0
- package/scss/_wui-aliases.scss +52 -0
- package/scss/wui/_card.scss +3 -3
- package/scss/wui/_display.scss +7 -2
- package/scss/wui/_flow.scss +10 -8
- package/scss/wui/_score-scale.scss +1 -1
- package/scss/wui/_shell.scss +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.88.0",
|
|
4
4
|
"description": "Webority shared design system — Bootstrap 5.3 SCSS overrides, --wui-* tokens, and shared component CSS. The single source of brand chrome for React portals and Razor sites.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|
package/scss/_components.scss
CHANGED
|
@@ -583,6 +583,7 @@
|
|
|
583
583
|
--bs-dropdown-item-padding-y: 0.5rem;
|
|
584
584
|
--bs-dropdown-item-padding-x: 0.625rem;
|
|
585
585
|
--bs-dropdown-border-color: var(--color-border);
|
|
586
|
+
--bs-dropdown-divider-bg: var(--color-border);
|
|
586
587
|
--bs-dropdown-border-radius: var(--wui-radius-lg);
|
|
587
588
|
--bs-dropdown-link-color: var(--color-text-body);
|
|
588
589
|
--bs-dropdown-link-hover-color: var(--color-primary-hover);
|
package/scss/_wui-aliases.scss
CHANGED
|
@@ -434,6 +434,58 @@
|
|
|
434
434
|
color: var(--color-text);
|
|
435
435
|
}
|
|
436
436
|
|
|
437
|
+
// Every name wui-dark-theme sets; scripts/check-theme-modes.mjs keeps the two equal.
|
|
438
|
+
$wui-dark-layer-names: (
|
|
439
|
+
wui-shadow-thumb, wui-shadow-thumb-hover,
|
|
440
|
+
color-bg, color-bg-subtle, color-bg-muted, color-field-bg, color-surface, color-thumb,
|
|
441
|
+
color-border, color-border-light, color-border-strong, color-field-border, color-field-border-hover,
|
|
442
|
+
color-progress-track, color-progress-label,
|
|
443
|
+
color-text, color-text-muted, color-text-subtle, color-text-body, color-close-filter, color-focus-border,
|
|
444
|
+
wui-primary-5, wui-primary-10, wui-primary-15, wui-primary-20, wui-primary-30, wui-primary-50,
|
|
445
|
+
wui-surface-mute, wui-surface-soft, wui-surface-violet-soft, wui-danger-5,
|
|
446
|
+
bs-body-color, bs-emphasis-color, bs-secondary-color, bs-tertiary-color, bs-body-bg, bs-border-color,
|
|
447
|
+
bs-secondary-bg, bs-tertiary-bg,
|
|
448
|
+
bs-body-bg-rgb, bs-body-color-rgb, bs-emphasis-color-rgb, bs-secondary-color-rgb, bs-tertiary-color-rgb,
|
|
449
|
+
bs-secondary-bg-rgb, bs-tertiary-bg-rgb, bs-border-color-rgb,
|
|
450
|
+
color-primary, color-primary-hover, color-primary-soft, color-primary-text, color-primary-hover-text,
|
|
451
|
+
color-primary-ink, color-on-primary-ink, color-on-status-strong,
|
|
452
|
+
color-success-text, color-danger-text, color-warning-text, color-info-text,
|
|
453
|
+
color-success-text-on-soft, color-danger-text-on-soft, color-warning-text-on-soft, color-info-text-on-soft,
|
|
454
|
+
color-success-strong, color-danger-strong, color-info-strong, color-warning-strong,
|
|
455
|
+
color-success-soft, color-success-5, color-success-10,
|
|
456
|
+
color-warning-soft, color-warning-5, color-warning-10,
|
|
457
|
+
color-danger-soft, color-danger-5, color-danger-10,
|
|
458
|
+
color-info-soft, color-info-5, color-info-10,
|
|
459
|
+
color-success-50, color-warning-50, color-danger-50, color-info-50,
|
|
460
|
+
color-accent-soft, color-scrim, color-scrim-strong, color-on-scrim,
|
|
461
|
+
wui-chart-1, wui-chart-2, wui-chart-3, wui-chart-4, wui-chart-5, wui-chart-6, wui-chart-7, wui-chart-8,
|
|
462
|
+
wui-chart-seq-0, wui-chart-seq-1, wui-chart-seq-2, wui-chart-seq-3, wui-chart-seq-4, wui-chart-seq-5,
|
|
463
|
+
wui-chart-seq-6, wui-chart-diverging-low, wui-chart-diverging-mid, wui-chart-diverging-high, wui-chart-neutral
|
|
464
|
+
);
|
|
465
|
+
|
|
466
|
+
// A light box inside a dark section, such as a white result table in a dark band: the same attribute set
|
|
467
|
+
// to light gives it the page's light colour layer back. The page root keeps a copy of each name the dark
|
|
468
|
+
// layer sets, and a var() resolves where it is declared, so each copy holds the root's light value with
|
|
469
|
+
// the brand's own overrides. The copies sit on html rather than :root because the theme exporters read
|
|
470
|
+
// every :root name as a token. A dark page has no light values on its root to copy, so only a light page
|
|
471
|
+
// gets light boxes this way.
|
|
472
|
+
html {
|
|
473
|
+
@each $name in $wui-dark-layer-names {
|
|
474
|
+
--wui-light-#{$name}: var(--#{$name});
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
[data-theme="dark"]:not(:root) [data-theme="light"],
|
|
479
|
+
[data-theme="dark"]:not(:root) [data-bs-theme="light"],
|
|
480
|
+
[data-bs-theme="dark"]:not(:root) [data-theme="light"],
|
|
481
|
+
[data-bs-theme="dark"]:not(:root) [data-bs-theme="light"] {
|
|
482
|
+
@each $name in $wui-dark-layer-names {
|
|
483
|
+
--#{$name}: var(--wui-light-#{$name});
|
|
484
|
+
}
|
|
485
|
+
color-scheme: light;
|
|
486
|
+
color: var(--color-text);
|
|
487
|
+
}
|
|
488
|
+
|
|
437
489
|
// Automatic dark mode — when data-theme="auto", detect system preference and apply dark tokens.
|
|
438
490
|
:root[data-theme="auto"] {
|
|
439
491
|
@media (prefers-color-scheme: dark) {
|
package/scss/wui/_card.scss
CHANGED
|
@@ -112,9 +112,9 @@
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
// ── Padding scale ── (header + body + footer). `md` is the Bootstrap default.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
.card-pad-none > .card-
|
|
115
|
+
// `none` clears only the body, for a table or list that runs edge to edge: the header and footer
|
|
116
|
+
// are chrome the card draws itself, and nothing inside them can bring its own inset.
|
|
117
|
+
.card-pad-none > .card-body {
|
|
118
118
|
padding: 0;
|
|
119
119
|
}
|
|
120
120
|
.card-pad-sm > .card-header,
|
package/scss/wui/_display.scss
CHANGED
|
@@ -198,11 +198,15 @@
|
|
|
198
198
|
height: 48px;
|
|
199
199
|
margin-bottom: 0;
|
|
200
200
|
}
|
|
201
|
-
|
|
201
|
+
// The icon holds only the label row, so every row below it takes the full width: a large
|
|
202
|
+
// value at the hero size would otherwise overflow a column that leaves room for no icon.
|
|
203
|
+
.kpi.kpi-spotlight .kpi-label {
|
|
204
|
+
grid-column: 1;
|
|
205
|
+
}
|
|
202
206
|
.kpi.kpi-spotlight .kpi-value,
|
|
203
207
|
.kpi.kpi-spotlight .kpi-caption,
|
|
204
208
|
.kpi.kpi-spotlight .kpi-delta {
|
|
205
|
-
grid-column: 1;
|
|
209
|
+
grid-column: 1 / -1;
|
|
206
210
|
}
|
|
207
211
|
.kpi.kpi-spotlight .kpi-label {
|
|
208
212
|
align-self: center;
|
|
@@ -1391,6 +1395,7 @@ a.info-row:hover .info-value {
|
|
|
1391
1395
|
color: var(--color-text-subtle);
|
|
1392
1396
|
}
|
|
1393
1397
|
.result-icon {
|
|
1398
|
+
align-self: center;
|
|
1394
1399
|
width: 64px;
|
|
1395
1400
|
height: 64px;
|
|
1396
1401
|
border-radius: var(--radius-lg);
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -342,8 +342,10 @@ button.step.done:focus-visible .step-circle {
|
|
|
342
342
|
padding: 0;
|
|
343
343
|
}
|
|
344
344
|
// Each compact step becomes a two-column row: the circle in a fixed rail on the
|
|
345
|
-
// left, the label and its description stacked on the right.
|
|
346
|
-
|
|
345
|
+
// left, the label and its description stacked on the right. The journey step has
|
|
346
|
+
// its own badge and text column, so these rules skip it; :where keeps them at the
|
|
347
|
+
// specificity a modifier such as .stepper-icons expects to beat.
|
|
348
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step {
|
|
347
349
|
display: grid;
|
|
348
350
|
grid-template-columns: var(--wui-step-size, 28px) 1fr;
|
|
349
351
|
column-gap: 12px;
|
|
@@ -356,12 +358,12 @@ button.step.done:focus-visible .step-circle {
|
|
|
356
358
|
// The circle spans the whole text block rather than sitting in the first row: a
|
|
357
359
|
// row sized to the 28px circle would leave dead space below a single-line label
|
|
358
360
|
// before the description. Spanning lets each row size to its text instead.
|
|
359
|
-
.stepper-vertical .step-circle {
|
|
361
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step-circle {
|
|
360
362
|
grid-column: 1;
|
|
361
363
|
grid-row: 1 / -1;
|
|
362
364
|
align-self: start;
|
|
363
365
|
}
|
|
364
|
-
.stepper-vertical .step-label {
|
|
366
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step-label {
|
|
365
367
|
grid-column: 2;
|
|
366
368
|
grid-row: 1;
|
|
367
369
|
max-width: none;
|
|
@@ -369,13 +371,13 @@ button.step.done:focus-visible .step-circle {
|
|
|
369
371
|
// a no-op when a description makes the row size to the label.
|
|
370
372
|
align-self: center;
|
|
371
373
|
}
|
|
372
|
-
.stepper-vertical .step-desc {
|
|
374
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step-desc {
|
|
373
375
|
grid-column: 2;
|
|
374
376
|
grid-row: 2;
|
|
375
377
|
max-width: none;
|
|
376
378
|
}
|
|
377
379
|
// The vertical grid has no row gap, so the description sits right under the label.
|
|
378
|
-
.stepper-vertical .step > .step-label + .step-desc {
|
|
380
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step > .step-label + .step-desc {
|
|
379
381
|
margin-top: 0;
|
|
380
382
|
}
|
|
381
383
|
// The compact connector is horizontal (::before); redraw it as a vertical segment
|
|
@@ -383,7 +385,7 @@ button.step.done:focus-visible .step-circle {
|
|
|
383
385
|
.stepper-vertical .step + .step::before {
|
|
384
386
|
content: none;
|
|
385
387
|
}
|
|
386
|
-
.stepper-vertical .step:not(:last-child)::after {
|
|
388
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step:not(:last-child)::after {
|
|
387
389
|
content: "";
|
|
388
390
|
position: absolute;
|
|
389
391
|
// Half the badge minus 1 for the 2px line's own width; runs from below the circle.
|
|
@@ -396,7 +398,7 @@ button.step.done:focus-visible .step-circle {
|
|
|
396
398
|
background: var(--wui-step-connector, var(--color-border));
|
|
397
399
|
z-index: 0;
|
|
398
400
|
}
|
|
399
|
-
.stepper-vertical .step.done:not(:last-child)::after {
|
|
401
|
+
.stepper-vertical:where(:not(.stepper-journey)) .step.done:not(:last-child)::after {
|
|
400
402
|
background: var(--wui-step-done-accent, var(--wui-step-accent, var(--color-primary-ink)));
|
|
401
403
|
}
|
|
402
404
|
// The journey bar stacked vertically reuses its own narrow-width treatment: a plain
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
.wui-score-scale__item--selected {
|
|
36
36
|
border-color: var(--color-primary);
|
|
37
37
|
background: var(--color-primary);
|
|
38
|
-
color: var(--color-
|
|
38
|
+
color: var(--color-primary-text);
|
|
39
39
|
}
|
|
40
40
|
.wui-score-scale__item:has(input:focus-visible) {
|
|
41
41
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
package/scss/wui/_shell.scss
CHANGED
|
@@ -771,7 +771,7 @@
|
|
|
771
771
|
}
|
|
772
772
|
.app-topbar[data-tone="primary"] {
|
|
773
773
|
background: var(--color-primary);
|
|
774
|
-
color: var(--color-
|
|
774
|
+
color: var(--color-primary-text);
|
|
775
775
|
}
|
|
776
776
|
.app-topbar[data-tone="primary"] :is(.app-topbar-menu, .topbar-icon-btn, .wui-usermenu-trigger) {
|
|
777
777
|
color: inherit;
|
|
@@ -783,10 +783,10 @@
|
|
|
783
783
|
}
|
|
784
784
|
.app-topbar[data-tone="primary"] .app-topbar-menu {
|
|
785
785
|
background: transparent;
|
|
786
|
-
border-color: color-mix(in srgb, var(--color-
|
|
786
|
+
border-color: color-mix(in srgb, var(--color-primary-text) 60%, transparent);
|
|
787
787
|
}
|
|
788
788
|
.app-topbar[data-tone="primary"] :is(.app-topbar-menu, .topbar-icon-btn, .wui-usermenu-trigger):hover {
|
|
789
|
-
background: color-mix(in srgb, var(--color-
|
|
789
|
+
background: color-mix(in srgb, var(--color-primary-text) 12%, transparent);
|
|
790
790
|
}
|
|
791
791
|
// Two groups: the leading one shrinks and ellipsises a long page title, the
|
|
792
792
|
// trailing one is pinned so actions are never pushed off-screen.
|