@webority/theme 0.4.0 → 0.5.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/_tokens.scss +15 -1
- package/scss/_wui-aliases.scss +16 -0
- package/scss/wui/_controls.scss +14 -12
- package/scss/wui/_data.scss +7 -7
- package/scss/wui/_display.scss +7 -7
- package/scss/wui/_flow.scss +2 -2
- package/scss/wui/_navigation.scss +4 -4
- package/scss/wui/_overlays.scss +1 -1
- package/scss/wui/_typography.scss +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.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/_tokens.scss
CHANGED
|
@@ -23,7 +23,12 @@
|
|
|
23
23
|
--wui-text-heading: #071437;
|
|
24
24
|
--wui-text-1: #252F4A;
|
|
25
25
|
--wui-text-2: #4B5675;
|
|
26
|
-
|
|
26
|
+
// Tertiary text — hints, captions, labels, timestamps, placeholders. Was #78829D,
|
|
27
|
+
// which measured 3.5:1 on white and 3.1:1 on a tinted panel: below WCAG AA (4.5:1)
|
|
28
|
+
// everywhere it was used. A tier meant for readable-but-secondary copy has to BE
|
|
29
|
+
// readable, so it darkens to 4.55:1 on every neutral surface. It stays clearly
|
|
30
|
+
// lighter than --wui-text-2; --wui-text-4/5 remain for genuinely decorative use.
|
|
31
|
+
--wui-text-3: #687088;
|
|
27
32
|
--wui-text-4: #99A1B7;
|
|
28
33
|
--wui-text-5: #C4CADA;
|
|
29
34
|
|
|
@@ -114,6 +119,7 @@
|
|
|
114
119
|
// Canonical info/success/warning/danger scales: `active` (text/icon on
|
|
115
120
|
// light), the base `100` (vivid fills/dots), then tints 50/30/20/10/5.
|
|
116
121
|
// Shared by the portal (aliased to --color-*) and marketing alerts/badges.
|
|
122
|
+
--wui-info-text: #1460ba;
|
|
117
123
|
--wui-info-active: #056EE9;
|
|
118
124
|
--wui-info: #1B84FF;
|
|
119
125
|
--wui-info-50: #8DC2FF;
|
|
@@ -122,6 +128,12 @@
|
|
|
122
128
|
--wui-info-10: #E9F3FF;
|
|
123
129
|
--wui-info-5: #F3F9FF;
|
|
124
130
|
|
|
131
|
+
// `-text` variants exist because the status colours are FILLS. #F8285A and #04B440
|
|
132
|
+
// are correct on a button or a badge, and both fail AA as text on a light surface
|
|
133
|
+
// (3.6:1 and 2.6:1) — which is how a validation error message, of all things, came
|
|
134
|
+
// to be unreadable. Darkening the base tokens would change every red button and
|
|
135
|
+
// green badge in the system, so text gets its own value and the fills keep theirs.
|
|
136
|
+
--wui-success-text: #0e7531;
|
|
125
137
|
--wui-success-active: #04B440;
|
|
126
138
|
--wui-success: #17C653;
|
|
127
139
|
--wui-success-50: #8BE3A9;
|
|
@@ -130,6 +142,7 @@
|
|
|
130
142
|
--wui-success-10: #E8FAEE;
|
|
131
143
|
--wui-success-5: #F3FCF6;
|
|
132
144
|
|
|
145
|
+
--wui-warning-text: #876100;
|
|
133
146
|
--wui-warning-active: #DFA000;
|
|
134
147
|
--wui-warning: #F6B100;
|
|
135
148
|
--wui-warning-50: #FBD880;
|
|
@@ -138,6 +151,7 @@
|
|
|
138
151
|
--wui-warning-10: #FFF8E6;
|
|
139
152
|
--wui-warning-5: #FEFBF2;
|
|
140
153
|
|
|
154
|
+
--wui-danger-text: #b61d42;
|
|
141
155
|
--wui-danger-active: #E82646;
|
|
142
156
|
--wui-danger: #F8285A;
|
|
143
157
|
--wui-danger-50: #FC94AD;
|
package/scss/_wui-aliases.scss
CHANGED
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
--color-info-5: var(--wui-info-5);
|
|
48
48
|
--color-info-strong: var(--color-info-active);
|
|
49
49
|
--color-info-soft: var(--color-info-10);
|
|
50
|
+
// Use this — never --color-info — when the colour IS the text.
|
|
51
|
+
--color-info-text: var(--wui-info-text);
|
|
50
52
|
|
|
51
53
|
--color-success-active: var(--wui-success-active);
|
|
52
54
|
--color-success: var(--wui-success);
|
|
@@ -57,6 +59,8 @@
|
|
|
57
59
|
--color-success-5: var(--wui-success-5);
|
|
58
60
|
--color-success-strong: var(--color-success-active);
|
|
59
61
|
--color-success-soft: var(--color-success-10);
|
|
62
|
+
// Use this — never --color-success — when the colour IS the text.
|
|
63
|
+
--color-success-text: var(--wui-success-text);
|
|
60
64
|
|
|
61
65
|
--color-warning-active: var(--wui-warning-active);
|
|
62
66
|
--color-warning: var(--wui-warning);
|
|
@@ -67,6 +71,8 @@
|
|
|
67
71
|
--color-warning-5: var(--wui-warning-5);
|
|
68
72
|
--color-warning-strong: var(--color-warning-active);
|
|
69
73
|
--color-warning-soft: var(--color-warning-10);
|
|
74
|
+
// Use this — never --color-warning — when the colour IS the text.
|
|
75
|
+
--color-warning-text: var(--wui-warning-text);
|
|
70
76
|
|
|
71
77
|
--color-danger-active: var(--wui-danger-active);
|
|
72
78
|
--color-danger: var(--wui-danger);
|
|
@@ -77,6 +83,8 @@
|
|
|
77
83
|
--color-danger-5: var(--wui-danger-5);
|
|
78
84
|
--color-danger-strong: var(--color-danger-active);
|
|
79
85
|
--color-danger-soft: var(--color-danger-10);
|
|
86
|
+
// Use this — never --color-danger — when the colour IS the text.
|
|
87
|
+
--color-danger-text: var(--wui-danger-text);
|
|
80
88
|
|
|
81
89
|
// Accent → warning ramp
|
|
82
90
|
--color-accent: var(--color-warning);
|
|
@@ -117,6 +125,14 @@
|
|
|
117
125
|
--color-primary-hover: var(--wui-dark-primary-hover);
|
|
118
126
|
--color-primary-soft: color-mix(in srgb, var(--wui-primary) 20%, transparent);
|
|
119
127
|
|
|
128
|
+
// On a dark surface the FILL colours are already the readable ones — the darkened
|
|
129
|
+
// `-text` values would sink into the background. So dark mode maps text back to the
|
|
130
|
+
// bright tokens rather than inheriting light mode's.
|
|
131
|
+
--color-success-text: var(--wui-success);
|
|
132
|
+
--color-danger-text: var(--wui-danger);
|
|
133
|
+
--color-warning-text: var(--wui-warning);
|
|
134
|
+
--color-info-text: var(--wui-info);
|
|
135
|
+
|
|
120
136
|
--color-success-soft: color-mix(in srgb, var(--wui-success) 18%, transparent);
|
|
121
137
|
--color-warning-soft: color-mix(in srgb, var(--wui-warning) 18%, transparent);
|
|
122
138
|
--color-danger-soft: color-mix(in srgb, var(--wui-danger) 18%, transparent);
|
package/scss/wui/_controls.scss
CHANGED
|
@@ -291,7 +291,7 @@ textarea.textarea:focus {
|
|
|
291
291
|
.field-error {
|
|
292
292
|
font-size: 12px;
|
|
293
293
|
line-height: normal;
|
|
294
|
-
color: var(--color-danger);
|
|
294
|
+
color: var(--color-danger-text);
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
// Native select with a rounded squircle, custom chevron, off-surface fill.
|
|
@@ -431,7 +431,7 @@ textarea.textarea:focus {
|
|
|
431
431
|
display: grid;
|
|
432
432
|
place-items: center;
|
|
433
433
|
pointer-events: none;
|
|
434
|
-
color: var(--color-danger);
|
|
434
|
+
color: var(--color-danger-text);
|
|
435
435
|
}
|
|
436
436
|
|
|
437
437
|
// Leading-icon input — icon turns brand on focus.
|
|
@@ -515,7 +515,7 @@ textarea.textarea:focus {
|
|
|
515
515
|
color: var(--color-text-subtle);
|
|
516
516
|
}
|
|
517
517
|
.required {
|
|
518
|
-
color: var(--color-danger);
|
|
518
|
+
color: var(--color-danger-text);
|
|
519
519
|
// The gap is CSS, not a significant space in the markup. RequiredMark used to render
|
|
520
520
|
// `{' '}*` while AppDatePicker and every Razor helper rendered a bare `*`, so the same
|
|
521
521
|
// asterisk sat 4px further out in some fields than others — and no check could see it,
|
|
@@ -644,22 +644,22 @@ textarea.textarea:focus {
|
|
|
644
644
|
}
|
|
645
645
|
.badge-success {
|
|
646
646
|
background: var(--color-success-soft);
|
|
647
|
-
color: var(--color-success-
|
|
647
|
+
color: var(--color-success-text);
|
|
648
648
|
border-color: transparent;
|
|
649
649
|
}
|
|
650
650
|
.badge-warn {
|
|
651
651
|
background: var(--color-warning-soft);
|
|
652
|
-
color: var(--color-warning-
|
|
652
|
+
color: var(--color-warning-text);
|
|
653
653
|
border-color: transparent;
|
|
654
654
|
}
|
|
655
655
|
.badge-danger {
|
|
656
656
|
background: var(--color-danger-soft);
|
|
657
|
-
color: var(--color-danger-
|
|
657
|
+
color: var(--color-danger-text);
|
|
658
658
|
border-color: transparent;
|
|
659
659
|
}
|
|
660
660
|
.badge-info {
|
|
661
661
|
background: var(--color-info-soft);
|
|
662
|
-
color: var(--color-info-
|
|
662
|
+
color: var(--color-info-text);
|
|
663
663
|
border-color: transparent;
|
|
664
664
|
}
|
|
665
665
|
.badge-dot::before {
|
|
@@ -697,24 +697,24 @@ textarea.textarea:focus {
|
|
|
697
697
|
.status-label.tone-ok,
|
|
698
698
|
.status-label.tone-green {
|
|
699
699
|
background: color-mix(in srgb, var(--color-success) 16%, transparent);
|
|
700
|
-
color: var(--color-success-
|
|
700
|
+
color: var(--color-success-text);
|
|
701
701
|
}
|
|
702
702
|
.status-label.warning,
|
|
703
703
|
.status-label.tone-warn,
|
|
704
704
|
.status-label.tone-amber {
|
|
705
705
|
background: color-mix(in srgb, var(--color-warning) 16%, transparent);
|
|
706
|
-
color: var(--color-warning-
|
|
706
|
+
color: var(--color-warning-text);
|
|
707
707
|
}
|
|
708
708
|
.status-label.danger,
|
|
709
709
|
.status-label.tone-bad,
|
|
710
710
|
.status-label.tone-red {
|
|
711
711
|
background: color-mix(in srgb, var(--color-danger) 16%, transparent);
|
|
712
|
-
color: var(--color-danger-
|
|
712
|
+
color: var(--color-danger-text);
|
|
713
713
|
}
|
|
714
714
|
.status-label.info,
|
|
715
715
|
.status-label.tone-blue {
|
|
716
716
|
background: color-mix(in srgb, var(--color-info) 16%, transparent);
|
|
717
|
-
color: var(--color-info-
|
|
717
|
+
color: var(--color-info-text);
|
|
718
718
|
}
|
|
719
719
|
.status-label.primary {
|
|
720
720
|
background: var(--color-primary-soft);
|
|
@@ -726,7 +726,9 @@ textarea.textarea:focus {
|
|
|
726
726
|
.status-label.neutral,
|
|
727
727
|
.status-label.tone-grey {
|
|
728
728
|
background: color-mix(in srgb, var(--color-text-subtle) 16%, transparent);
|
|
729
|
-
|
|
729
|
+
// The tertiary tier is readable on a plain surface but not on its own 16% tint,
|
|
730
|
+
// so the neutral pill takes the secondary tier instead of a sixth `-text` token.
|
|
731
|
+
color: var(--color-text-muted);
|
|
730
732
|
}
|
|
731
733
|
|
|
732
734
|
// ── Choice chip ──
|
package/scss/wui/_data.scss
CHANGED
|
@@ -493,11 +493,11 @@
|
|
|
493
493
|
cursor: not-allowed;
|
|
494
494
|
}
|
|
495
495
|
.u-action.danger {
|
|
496
|
-
color: var(--color-danger);
|
|
496
|
+
color: var(--color-danger-text);
|
|
497
497
|
}
|
|
498
498
|
.u-action.danger:hover:not(:disabled) {
|
|
499
499
|
background: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
500
|
-
color: var(--color-danger);
|
|
500
|
+
color: var(--color-danger-text);
|
|
501
501
|
}
|
|
502
502
|
.u-action.u-action-preview {
|
|
503
503
|
background: var(--color-primary-soft);
|
|
@@ -505,11 +505,11 @@
|
|
|
505
505
|
}
|
|
506
506
|
.u-action.u-action-download {
|
|
507
507
|
background: var(--color-success-soft);
|
|
508
|
-
color: var(--color-success-
|
|
508
|
+
color: var(--color-success-text);
|
|
509
509
|
}
|
|
510
510
|
.u-action.u-action-share {
|
|
511
511
|
background: var(--color-warning-soft);
|
|
512
|
-
color: var(--color-warning-
|
|
512
|
+
color: var(--color-warning-text);
|
|
513
513
|
}
|
|
514
514
|
.u-action.u-action-preview:hover:not(:disabled) {
|
|
515
515
|
background: var(--color-primary-soft);
|
|
@@ -517,14 +517,14 @@
|
|
|
517
517
|
}
|
|
518
518
|
.u-action.u-action-download:hover:not(:disabled) {
|
|
519
519
|
background: var(--color-success-soft);
|
|
520
|
-
color: var(--color-success-
|
|
520
|
+
color: var(--color-success-text);
|
|
521
521
|
}
|
|
522
522
|
.u-action.u-action-share:hover:not(:disabled) {
|
|
523
523
|
background: var(--color-warning-soft);
|
|
524
|
-
color: var(--color-warning-
|
|
524
|
+
color: var(--color-warning-text);
|
|
525
525
|
}
|
|
526
526
|
.u-action.u-action-danger:hover {
|
|
527
|
-
color: var(--color-danger);
|
|
527
|
+
color: var(--color-danger-text);
|
|
528
528
|
background: color-mix(in srgb, var(--color-danger) 10%, transparent);
|
|
529
529
|
}
|
|
530
530
|
|
package/scss/wui/_display.scss
CHANGED
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
color: var(--color-text-muted);
|
|
55
55
|
}
|
|
56
56
|
.kpi-delta.up {
|
|
57
|
-
color: var(--color-success-
|
|
57
|
+
color: var(--color-success-text);
|
|
58
58
|
}
|
|
59
59
|
.kpi-delta.down {
|
|
60
|
-
color: var(--color-danger);
|
|
60
|
+
color: var(--color-danger-text);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
// Icon-left layout: the icon spans the label/value/delta stack instead of sitting above it.
|
|
@@ -312,19 +312,19 @@ a.info-row:hover .info-value {
|
|
|
312
312
|
box-shadow: 0 0 0 3px var(--color-surface);
|
|
313
313
|
}
|
|
314
314
|
.timeline-item.success .timeline-dot {
|
|
315
|
-
color: var(--color-success-
|
|
315
|
+
color: var(--color-success-text);
|
|
316
316
|
background: color-mix(in srgb, var(--color-success-strong) 16%, var(--color-surface));
|
|
317
317
|
}
|
|
318
318
|
.timeline-item.warning .timeline-dot {
|
|
319
|
-
color: var(--color-warning-
|
|
319
|
+
color: var(--color-warning-text);
|
|
320
320
|
background: color-mix(in srgb, var(--color-warning-strong) 18%, var(--color-surface));
|
|
321
321
|
}
|
|
322
322
|
.timeline-item.danger .timeline-dot {
|
|
323
|
-
color: var(--color-danger);
|
|
323
|
+
color: var(--color-danger-text);
|
|
324
324
|
background: color-mix(in srgb, var(--color-danger) 16%, var(--color-surface));
|
|
325
325
|
}
|
|
326
326
|
.timeline-item.info .timeline-dot {
|
|
327
|
-
color: var(--color-info-
|
|
327
|
+
color: var(--color-info-text);
|
|
328
328
|
background: color-mix(in srgb, var(--color-info-strong) 16%, var(--color-surface));
|
|
329
329
|
}
|
|
330
330
|
.timeline-body {
|
|
@@ -407,7 +407,7 @@ a.info-row:hover .info-value {
|
|
|
407
407
|
font-weight: 500;
|
|
408
408
|
}
|
|
409
409
|
.compare-yes {
|
|
410
|
-
color: var(--color-success-
|
|
410
|
+
color: var(--color-success-text);
|
|
411
411
|
}
|
|
412
412
|
.compare-no {
|
|
413
413
|
color: var(--color-text-subtle);
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -136,7 +136,7 @@ a.step:focus-visible .step-circle {
|
|
|
136
136
|
}
|
|
137
137
|
.stepper-journey .step.done .step-circle {
|
|
138
138
|
background: var(--color-success-soft);
|
|
139
|
-
color: var(--color-success-
|
|
139
|
+
color: var(--color-success-text);
|
|
140
140
|
}
|
|
141
141
|
.stepper-journey .step.active .step-circle {
|
|
142
142
|
background: var(--color-primary);
|
|
@@ -161,7 +161,7 @@ a.step:focus-visible .step-circle {
|
|
|
161
161
|
color: var(--color-text-subtle);
|
|
162
162
|
}
|
|
163
163
|
.stepper-journey .step.done .step-index {
|
|
164
|
-
color: var(--color-success-
|
|
164
|
+
color: var(--color-success-text);
|
|
165
165
|
}
|
|
166
166
|
.stepper-journey .step.active .step-index {
|
|
167
167
|
color: var(--color-primary);
|
|
@@ -171,18 +171,18 @@
|
|
|
171
171
|
}
|
|
172
172
|
// A destructive tab reads as destructive whether or not it is the active one.
|
|
173
173
|
.app-tab.danger {
|
|
174
|
-
color: var(--color-danger);
|
|
174
|
+
color: var(--color-danger-text);
|
|
175
175
|
}
|
|
176
176
|
.app-tab.danger:hover:not(:disabled):not(.active) {
|
|
177
|
-
color: var(--color-danger-
|
|
177
|
+
color: var(--color-danger-text);
|
|
178
178
|
}
|
|
179
179
|
.app-tab.danger.active {
|
|
180
|
-
color: var(--color-danger);
|
|
180
|
+
color: var(--color-danger-text);
|
|
181
181
|
border-bottom-color: var(--color-danger);
|
|
182
182
|
}
|
|
183
183
|
.app-tab.danger .app-tab-count {
|
|
184
184
|
background: var(--color-danger-soft);
|
|
185
|
-
color: var(--color-danger-
|
|
185
|
+
color: var(--color-danger-text);
|
|
186
186
|
}
|
|
187
187
|
// Trailing count pill.
|
|
188
188
|
.app-tab-count {
|
package/scss/wui/_overlays.scss
CHANGED
|
@@ -131,22 +131,22 @@
|
|
|
131
131
|
.chip.success {
|
|
132
132
|
border-color: transparent;
|
|
133
133
|
background: var(--color-success-soft);
|
|
134
|
-
color: var(--color-success-
|
|
134
|
+
color: var(--color-success-text);
|
|
135
135
|
}
|
|
136
136
|
.chip.warning {
|
|
137
137
|
border-color: transparent;
|
|
138
138
|
background: var(--color-warning-soft);
|
|
139
|
-
color: var(--color-warning-
|
|
139
|
+
color: var(--color-warning-text);
|
|
140
140
|
}
|
|
141
141
|
.chip.danger {
|
|
142
142
|
border-color: transparent;
|
|
143
143
|
background: var(--color-danger-soft);
|
|
144
|
-
color: var(--color-danger-
|
|
144
|
+
color: var(--color-danger-text);
|
|
145
145
|
}
|
|
146
146
|
.chip.info {
|
|
147
147
|
border-color: transparent;
|
|
148
148
|
background: var(--color-info-soft);
|
|
149
|
-
color: var(--color-info-
|
|
149
|
+
color: var(--color-info-text);
|
|
150
150
|
}
|
|
151
151
|
.chip.primary .chip-ic,
|
|
152
152
|
.chip.success .chip-ic,
|