@webority/theme 0.85.1 → 0.86.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/published-theme.json +25 -0
- package/dist/purge-safelist.json +1 -0
- package/dist/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/_components.scss +14 -0
- package/scss/_tokens.scss +20 -6
- package/scss/wui/_controls.scss +12 -4
- package/scss/wui/_data.scss +1 -0
- package/scss/wui/_display.scss +7 -0
- package/scss/wui/_file-viewer.scss +2 -1
- package/scss/wui/_flow.scss +1 -1
- package/scss/wui/_rolling-number.scss +8 -2
- package/scss/wui/_shell.scss +4 -1
- package/scss/wui/_utilities.scss +6 -0
- package/token-meanings.json +8 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.1",
|
|
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
|
@@ -100,6 +100,20 @@
|
|
|
100
100
|
--bs-btn-disabled-border-color: var(--wui-danger-strong);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
// White on the vivid amber fails AA (2.3:1), so the warning button uses the deeper
|
|
104
|
+
// --wui-warning-strong (4.7:1), like .btn-danger. Badges and dots keep --wui-warning.
|
|
105
|
+
.btn-warning {
|
|
106
|
+
--bs-btn-color: #fff;
|
|
107
|
+
--bs-btn-bg: var(--wui-warning-strong);
|
|
108
|
+
--bs-btn-border-color: var(--wui-warning-strong);
|
|
109
|
+
--bs-btn-hover-color: #fff;
|
|
110
|
+
--bs-btn-hover-bg: var(--wui-warning-strong-hover);
|
|
111
|
+
--bs-btn-hover-border-color: var(--wui-warning-strong-hover);
|
|
112
|
+
--bs-btn-active-color: #fff;
|
|
113
|
+
--bs-btn-active-bg: var(--wui-warning-strong-hover);
|
|
114
|
+
--bs-btn-active-border-color: var(--wui-warning-strong-hover);
|
|
115
|
+
}
|
|
116
|
+
|
|
103
117
|
// Outline variants — tokenized like the solid buttons above so they follow a product's
|
|
104
118
|
// RUNTIME --wui-* brand instead of Bootstrap's compile-time colours. Resting = brand outline
|
|
105
119
|
// on a transparent fill; hover fills with the brand and flips the label to the on-brand text
|
package/scss/_tokens.scss
CHANGED
|
@@ -262,9 +262,15 @@
|
|
|
262
262
|
|
|
263
263
|
/// meaning: Warning colour as text on light surfaces, darkened to pass AA.
|
|
264
264
|
--wui-warning-text: #876100;
|
|
265
|
+
// White on the vivid amber is only 2.3:1, so the warning button fills with these deeper
|
|
266
|
+
// tones instead: #9A6B00 is 4.7:1 under white, the hover deeper still.
|
|
267
|
+
/// meaning: Deep warning fill behind white text, such as the warning button.
|
|
268
|
+
--wui-warning-strong: #9A6B00;
|
|
269
|
+
/// meaning: Deep warning fill while a warning button with white text is hovered.
|
|
270
|
+
--wui-warning-strong-hover: #855C00;
|
|
265
271
|
/// meaning: Active warning fill, the deepest vivid warning tone.
|
|
266
272
|
--wui-warning-active: #DFA000;
|
|
267
|
-
/// meaning: Vivid warning fill for badges
|
|
273
|
+
/// meaning: Vivid warning fill for badges and dots.
|
|
268
274
|
--wui-warning: #DFA000;
|
|
269
275
|
/// meaning: Warning tint 50 for borders and the strongest soft warning fill.
|
|
270
276
|
--wui-warning-50: #FBD880;
|
|
@@ -482,18 +488,26 @@
|
|
|
482
488
|
--wui-fs-2xl: clamp(1.5rem, 1.3rem + 1vw, 2rem);
|
|
483
489
|
/// meaning: Triple extra-large step of the fluid type scale; a product opts in per element.
|
|
484
490
|
--wui-fs-3xl: clamp(1.875rem, 1.5rem + 1.75vw, 2.75rem);
|
|
491
|
+
/// meaning: Fourth extra-large step of the fluid type scale; a product opts in per element.
|
|
492
|
+
--wui-fs-4xl: clamp(2.25rem, 1.7rem + 2.5vw, 3.5rem);
|
|
493
|
+
/// meaning: Fifth extra-large step of the fluid type scale; a product opts in per element.
|
|
494
|
+
--wui-fs-5xl: clamp(2.75rem, 1.9rem + 3.75vw, 4.5rem);
|
|
495
|
+
/// meaning: Sixth extra-large step of the fluid type scale; a product opts in per element.
|
|
496
|
+
--wui-fs-6xl: clamp(3.5rem, 2.2rem + 5.5vw, 6rem);
|
|
485
497
|
|
|
486
498
|
// ---- Font stacks ---------------------------------------------------
|
|
487
499
|
// Sans-serif body font (Bootstrap's system stack or product override).
|
|
488
500
|
--font-sans: var(--bs-body-font-family);
|
|
489
501
|
|
|
490
|
-
// ----
|
|
491
|
-
//
|
|
492
|
-
//
|
|
493
|
-
// serif or another brand face by overriding this one token, without touching body copy.
|
|
494
|
-
// Defaults to Webority Serif ($font-family-display).
|
|
502
|
+
// ---- Typeface slots -----------------------------------------------
|
|
503
|
+
// Display (headings, Webority Serif), body (running text and controls) and mono (code, aligned figures)
|
|
504
|
+
// are the three typefaces Canvas themes and products name; a product repoints one without touching the others.
|
|
495
505
|
/// meaning: Display typeface for headings marked as display text.
|
|
496
506
|
--wui-font-display: #{$font-family-display};
|
|
507
|
+
/// meaning: Body typeface for running text and controls.
|
|
508
|
+
--wui-font-body: #{$font-family-sans-serif};
|
|
509
|
+
/// meaning: Monospace typeface for code, identifiers and figures that must line up.
|
|
510
|
+
--wui-font-mono: #{$font-family-monospace};
|
|
497
511
|
|
|
498
512
|
// ---- Z-index scale -------------------------------------------------
|
|
499
513
|
// One page-level ladder. Local stacking inside a component (1, 5, 10, 40…) is
|
package/scss/wui/_controls.scss
CHANGED
|
@@ -90,8 +90,10 @@
|
|
|
90
90
|
flex-wrap: wrap;
|
|
91
91
|
column-gap: 24px;
|
|
92
92
|
}
|
|
93
|
+
// Options in a group read as a list, so the label sits a little further from its radio.
|
|
93
94
|
.wui-radio-group > .form-check {
|
|
94
95
|
margin-bottom: 0;
|
|
96
|
+
column-gap: 16px;
|
|
95
97
|
}
|
|
96
98
|
// A lone .form-check lets its label shrink to nothing so long consent text can wrap; in a row
|
|
97
99
|
// of options that broke words mid-way ("Mont hly"). Keep each option's words whole and let the
|
|
@@ -124,7 +126,7 @@
|
|
|
124
126
|
position: relative;
|
|
125
127
|
padding: 14px 16px;
|
|
126
128
|
min-height: 56px;
|
|
127
|
-
border:
|
|
129
|
+
border: 1px solid var(--color-border);
|
|
128
130
|
border-radius: var(--radius);
|
|
129
131
|
background: var(--color-surface);
|
|
130
132
|
transition:
|
|
@@ -173,10 +175,16 @@
|
|
|
173
175
|
border-color: var(--color-danger);
|
|
174
176
|
}
|
|
175
177
|
|
|
178
|
+
// The group's label gets 10px of its own below it, on top of .field's 10px gap.
|
|
179
|
+
.field:has(> .wui-radio-group) > .label {
|
|
180
|
+
margin-bottom: 10px;
|
|
181
|
+
}
|
|
182
|
+
|
|
176
183
|
// Beside-label forms centre a label on a text control; a radio group's first option is shorter,
|
|
177
184
|
// so its label lines up with that row instead.
|
|
178
185
|
.wui-form-labels-start .field:has(> .wui-radio-group) > .label {
|
|
179
186
|
padding-top: 0;
|
|
187
|
+
margin-bottom: 0;
|
|
180
188
|
}
|
|
181
189
|
|
|
182
190
|
// Glyph — shared by BS form-check-input and the wui-check alias.
|
|
@@ -600,7 +608,7 @@ textarea.form-control.autosize {
|
|
|
600
608
|
// Must clear AA against the surface: --color-danger-active (#E82646) is 4.38:1 at this
|
|
601
609
|
// 12px size, under the 4.5:1 floor the a11y gate enforces.
|
|
602
610
|
color: var(--color-danger-text);
|
|
603
|
-
// Tighten the space above the message: .field's
|
|
611
|
+
// Tighten the space above the message: .field's 10px gap → effective 8px, without
|
|
604
612
|
// touching the label→control gap.
|
|
605
613
|
margin-top: -2px;
|
|
606
614
|
}
|
|
@@ -1166,7 +1174,7 @@ $wui-field-error-glyph: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/
|
|
|
1166
1174
|
// `.field` is align-items:flex-start, so a shrink-wrapped count would sit on the LEFT —
|
|
1167
1175
|
// text-align alone can't move it. align-self pushes it to the control's right edge.
|
|
1168
1176
|
align-self: flex-end;
|
|
1169
|
-
// Tighten the space above the count: .field's
|
|
1177
|
+
// Tighten the space above the count: .field's 10px gap → effective 8px, matching .field-error.
|
|
1170
1178
|
margin-top: -2px;
|
|
1171
1179
|
font-size: 12px;
|
|
1172
1180
|
line-height: normal;
|
|
@@ -1215,7 +1223,7 @@ $wui-field-error-glyph: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/
|
|
|
1215
1223
|
display: flex;
|
|
1216
1224
|
flex-direction: column;
|
|
1217
1225
|
align-items: flex-start;
|
|
1218
|
-
gap:
|
|
1226
|
+
gap: 10px;
|
|
1219
1227
|
min-width: 0;
|
|
1220
1228
|
}
|
|
1221
1229
|
// Inside the flex column it sizes to its content, so it stretches to the field instead.
|
package/scss/wui/_data.scss
CHANGED
|
@@ -1326,6 +1326,7 @@
|
|
|
1326
1326
|
height: var(--wui-action-size);
|
|
1327
1327
|
padding: 0;
|
|
1328
1328
|
border: none;
|
|
1329
|
+
text-decoration: none;
|
|
1329
1330
|
// No disc at rest: a row of actions reads as quiet icons, and the tint below appears on hover.
|
|
1330
1331
|
background: transparent;
|
|
1331
1332
|
border-radius: 999px;
|
package/scss/wui/_display.scss
CHANGED
|
@@ -480,6 +480,9 @@ a.info-row:hover .info-value {
|
|
|
480
480
|
position: relative;
|
|
481
481
|
z-index: 1;
|
|
482
482
|
display: inline-flex;
|
|
483
|
+
// An option keeps its content width, so a narrow box scrolls or wraps the control instead of
|
|
484
|
+
// squeezing the selected label past its pill.
|
|
485
|
+
flex: none;
|
|
483
486
|
align-items: center;
|
|
484
487
|
gap: 5px;
|
|
485
488
|
min-height: var(--segmented-option-h);
|
|
@@ -1381,6 +1384,10 @@ a.info-row:hover .info-value {
|
|
|
1381
1384
|
.result {
|
|
1382
1385
|
text-align: center;
|
|
1383
1386
|
padding: 48px 24px;
|
|
1387
|
+
display: flex;
|
|
1388
|
+
flex-direction: column;
|
|
1389
|
+
// Stretch, not center: a part keeps the card's full width (its text centres itself), so a long title wraps at the card edge as before.
|
|
1390
|
+
align-items: stretch;
|
|
1384
1391
|
color: var(--color-text-subtle);
|
|
1385
1392
|
}
|
|
1386
1393
|
.result-icon {
|
|
@@ -305,10 +305,11 @@ wui-file-viewer:fullscreen {
|
|
|
305
305
|
width: 100%;
|
|
306
306
|
height: 100%;
|
|
307
307
|
}
|
|
308
|
+
// A page that is still loading reads as a blank page in both modes, matching the sheet it sits in.
|
|
308
309
|
.wui-file-viewer-skeleton {
|
|
309
310
|
width: 100%;
|
|
310
311
|
height: 100%;
|
|
311
|
-
background:
|
|
312
|
+
background: #fff;
|
|
312
313
|
}
|
|
313
314
|
|
|
314
315
|
// The text layer: transparent text laid over the drawing for selecting, copying and searching.
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -1209,7 +1209,7 @@ button.wui-step-tile-body:hover .step-label {
|
|
|
1209
1209
|
}
|
|
1210
1210
|
// Below md, collapse to 1 column.
|
|
1211
1211
|
@include media-breakpoint-down(md) {
|
|
1212
|
-
.form-row-grid.form-row-grid {
|
|
1212
|
+
.form-row-grid.form-row-grid:not(.wui-form-row-keep) {
|
|
1213
1213
|
grid-template-columns: 1fr;
|
|
1214
1214
|
}
|
|
1215
1215
|
}
|
|
@@ -12,7 +12,8 @@ $wui-roll-cell: 1.2em;
|
|
|
12
12
|
position: relative;
|
|
13
13
|
display: inline-block;
|
|
14
14
|
vertical-align: bottom;
|
|
15
|
-
|
|
15
|
+
// Unitless, so a digit column whose font size differs from the figure's keeps its own cell height.
|
|
16
|
+
line-height: 1.2;
|
|
16
17
|
font-variant-numeric: tabular-nums;
|
|
17
18
|
white-space: nowrap;
|
|
18
19
|
}
|
|
@@ -35,10 +36,12 @@ $wui-roll-cell: 1.2em;
|
|
|
35
36
|
}
|
|
36
37
|
.wui-rolling-number-char {
|
|
37
38
|
display: inline-block;
|
|
39
|
+
vertical-align: top;
|
|
38
40
|
height: $wui-roll-cell;
|
|
39
41
|
}
|
|
40
42
|
.wui-rolling-number-digit {
|
|
41
43
|
display: inline-block;
|
|
44
|
+
vertical-align: top;
|
|
42
45
|
height: $wui-roll-cell;
|
|
43
46
|
overflow: hidden;
|
|
44
47
|
}
|
|
@@ -46,12 +49,15 @@ $wui-roll-cell: 1.2em;
|
|
|
46
49
|
display: flex;
|
|
47
50
|
flex-direction: column;
|
|
48
51
|
transform: translateY(calc(var(--wui-roll-digit, 0) * -#{$wui-roll-cell}));
|
|
49
|
-
transition: transform var(--wui-roll-duration, 600ms) var(--wui-ease-out-quart);
|
|
50
52
|
> span {
|
|
51
53
|
display: block;
|
|
52
54
|
height: $wui-roll-cell;
|
|
53
55
|
}
|
|
54
56
|
}
|
|
57
|
+
// Only a figure that is moving has a transition, so a still render never catches a reel mid-move.
|
|
58
|
+
.wui-rolling-number[data-rolling] .wui-rolling-number-reel {
|
|
59
|
+
transition: transform var(--wui-roll-duration, 600ms) var(--wui-ease-out-quart);
|
|
60
|
+
}
|
|
55
61
|
|
|
56
62
|
@media (prefers-reduced-motion: reduce) {
|
|
57
63
|
.wui-rolling-number-reel {
|
package/scss/wui/_shell.scss
CHANGED
|
@@ -230,7 +230,10 @@
|
|
|
230
230
|
top: 0;
|
|
231
231
|
z-index: var(--wui-z-shell-sidebar);
|
|
232
232
|
align-self: start;
|
|
233
|
-
height
|
|
233
|
+
// The sidebar takes its grid area's height, so a shell in a box shorter than the viewport fits it.
|
|
234
|
+
// The max-height keeps it within the viewport, so a long menu never stretches the page and it stays sticky.
|
|
235
|
+
height: 100%;
|
|
236
|
+
max-height: 100vh;
|
|
234
237
|
display: flex;
|
|
235
238
|
flex-direction: column;
|
|
236
239
|
gap: 2px;
|
package/scss/wui/_utilities.scss
CHANGED
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
// ── Icon base ──
|
|
10
10
|
// Every library glyph (React <Icon>, Razor <app-icon>, wui-element internals) is an
|
|
11
11
|
// inline SVG carrying this class; size comes from its width/height attributes.
|
|
12
|
+
// An ancestor may set --wui-icon-color (a Canvas node's iconColor does) to colour every icon
|
|
13
|
+
// below it that no rule or colour prop colours itself.
|
|
12
14
|
.wui-icon {
|
|
13
15
|
display: inline-block;
|
|
14
16
|
flex-shrink: 0;
|
|
15
17
|
vertical-align: -.125em;
|
|
16
18
|
}
|
|
19
|
+
// Zero specificity: a rule that colours an icon itself, such as .search-select-caret, keeps winning.
|
|
20
|
+
:where(.wui-icon) {
|
|
21
|
+
color: var(--wui-icon-color, currentColor);
|
|
22
|
+
}
|
|
17
23
|
|
|
18
24
|
// ── Grid / layout utils ──
|
|
19
25
|
// Responsive card grids (Bootstrap has no grid-template utility).
|
package/token-meanings.json
CHANGED
|
@@ -175,9 +175,14 @@
|
|
|
175
175
|
"--wui-focus-ring-inset": "Offset that draws the focus ring inside a scrolling container.",
|
|
176
176
|
"--wui-focus-ring-offset": "Gap between a control and its keyboard focus ring.",
|
|
177
177
|
"--wui-focus-ring-width": "Width of the keyboard focus ring.",
|
|
178
|
+
"--wui-font-body": "Body typeface for running text and controls.",
|
|
178
179
|
"--wui-font-display": "Display typeface for headings marked as display text.",
|
|
180
|
+
"--wui-font-mono": "Monospace typeface for code, identifiers and figures that must line up.",
|
|
179
181
|
"--wui-fs-2xl": "Double extra-large step of the fluid type scale; a product opts in per element.",
|
|
180
182
|
"--wui-fs-3xl": "Triple extra-large step of the fluid type scale; a product opts in per element.",
|
|
183
|
+
"--wui-fs-4xl": "Fourth extra-large step of the fluid type scale; a product opts in per element.",
|
|
184
|
+
"--wui-fs-5xl": "Fifth extra-large step of the fluid type scale; a product opts in per element.",
|
|
185
|
+
"--wui-fs-6xl": "Sixth extra-large step of the fluid type scale; a product opts in per element.",
|
|
181
186
|
"--wui-fs-base": "Body-size step of the fluid type scale, close to Bootstrap's 1rem.",
|
|
182
187
|
"--wui-fs-lg": "Large step of the fluid type scale; a product opts in per element.",
|
|
183
188
|
"--wui-fs-sm": "Small step of the fluid type scale; a product opts in per element.",
|
|
@@ -245,13 +250,15 @@
|
|
|
245
250
|
"--wui-text-4": "Decorative faint ink, not for text a person must read.",
|
|
246
251
|
"--wui-text-5": "Faintest ink, for decorative marks and the strong border tone.",
|
|
247
252
|
"--wui-text-heading": "Heading ink for page and section titles.",
|
|
248
|
-
"--wui-warning": "Vivid warning fill for badges
|
|
253
|
+
"--wui-warning": "Vivid warning fill for badges and dots.",
|
|
249
254
|
"--wui-warning-10": "Warning tint 10, the soft background of warning alerts and badges.",
|
|
250
255
|
"--wui-warning-20": "Warning tint 20 for soft fills behind warning alerts and badges.",
|
|
251
256
|
"--wui-warning-30": "Warning tint 30 for soft fills and borders of alerts and badges.",
|
|
252
257
|
"--wui-warning-5": "Faintest warning tint, for hover washes and soft warning backgrounds.",
|
|
253
258
|
"--wui-warning-50": "Warning tint 50 for borders and the strongest soft warning fill.",
|
|
254
259
|
"--wui-warning-active": "Active warning fill, the deepest vivid warning tone.",
|
|
260
|
+
"--wui-warning-strong": "Deep warning fill behind white text, such as the warning button.",
|
|
261
|
+
"--wui-warning-strong-hover": "Deep warning fill while a warning button with white text is hovered.",
|
|
255
262
|
"--wui-warning-text": "Warning colour as text on light surfaces, darkened to pass AA.",
|
|
256
263
|
"--wui-z-dropdown": "Stacking layer of in-page dropdown menus.",
|
|
257
264
|
"--wui-z-fixed": "Stacking layer of fixed corner layers such as the consent banner.",
|