@webority/theme 0.129.0 → 0.130.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/README.md +1 -1
- package/dist/purge-safelist.json +11 -8
- package/dist/webority-theme.css +1 -1
- package/package.json +2 -2
- package/scss/_bootstrap.generated.scss +1 -1
- package/scss/_components.scss +48 -48
- package/scss/_marketing.scss +2 -2
- package/scss/_tokens.generated.scss +1 -1
- package/scss/_variables.scss +1 -1
- package/scss/wui/_groups.scss +1 -1
- package/scss/wui/_overlays.scss +1 -1
- package/scss/wui/_shortcuts.scss +1 -1
- package/scss/wui/_utilities.scss +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.130.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": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"postcss": "^8.5.31"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@webority/tokens": "0.
|
|
50
|
+
"@webority/tokens": "0.130.0",
|
|
51
51
|
"bootstrap": "5.3.3",
|
|
52
52
|
"country-flag-icons": "^1.6.20",
|
|
53
53
|
"sass-embedded": "^1.97.0",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated by @webority/tokens 0.
|
|
1
|
+
// Generated by @webority/tokens 0.130.0 from its token source. Do not edit; run webority brand --library.
|
|
2
2
|
$body-color: #252f4a !default;
|
|
3
3
|
$body-secondary-color: #4b5675 !default;
|
|
4
4
|
$body-tertiary-color: #626a82 !default;
|
package/scss/_components.scss
CHANGED
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
// only the TRANSPARENCY is taken from the reference — the tint deepens on hover
|
|
77
77
|
// then press. No border (the tint carries the shape). Disabled is the shared
|
|
78
78
|
// neutral-grey state below, like every other variant.
|
|
79
|
-
.btn-
|
|
79
|
+
.btn-soft-primary {
|
|
80
80
|
--bs-btn-color: var(--color-primary-text);
|
|
81
81
|
--bs-btn-bg: color-mix(in srgb, var(--color-primary) 12%, transparent);
|
|
82
82
|
--bs-btn-border-color: transparent;
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
--bs-btn-active-border-color: transparent;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
// A soft-tinted affirmative
|
|
91
|
+
// A soft-tinted affirmative, the success counterpart of .btn-soft-primary. Dark success text on a
|
|
92
92
|
// faint success fill, so it reads as "resolved / confirmed" without the weight of a solid green.
|
|
93
93
|
.btn-success {
|
|
94
94
|
--bs-btn-color: var(--color-success-text);
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
|
|
179
179
|
// Neutral outline on the theme's text tokens. Bootstrap's compiled default draws it in
|
|
180
180
|
// $secondary, which drops to about 2.4:1 on a dark surface.
|
|
181
|
-
.btn-outline-
|
|
181
|
+
.btn-outline-neutral {
|
|
182
182
|
--bs-btn-color: var(--color-text-muted);
|
|
183
183
|
--bs-btn-border-color: var(--color-border-strong);
|
|
184
184
|
--bs-btn-hover-color: var(--color-text);
|
|
@@ -192,15 +192,15 @@
|
|
|
192
192
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
// Secondary-danger
|
|
195
|
+
// Secondary-danger, the destructive counterpart of .btn-soft-primary: a soft red wash
|
|
196
196
|
// instead of a solid red fill, for a quieter destructive action (e.g. a "Remove" that
|
|
197
|
-
// shouldn't shout like a solid .btn-danger). Mirrors .btn-
|
|
197
|
+
// shouldn't shout like a solid .btn-danger). Mirrors .btn-soft-primary exactly: low-alpha
|
|
198
198
|
// tint deepening on hover/press, no border — but keyed off the danger tokens. The label
|
|
199
199
|
// uses --color-danger-text (the AA-safe error red, lifted in dark mode to read on a dark surface),
|
|
200
200
|
// not the brighter --color-danger. Disabled falls through to the shared neutral-grey
|
|
201
|
-
// state below (it is not .btn-danger), like .btn-
|
|
201
|
+
// state below (it is not .btn-danger), like .btn-soft-primary. A product sets another label
|
|
202
202
|
// ink with --wui-btn-secondary-danger-ink (e.g. --color-danger-text-on-soft in dark mode).
|
|
203
|
-
.btn-
|
|
203
|
+
.btn-soft-danger {
|
|
204
204
|
--bs-btn-color: var(--wui-btn-secondary-danger-ink, var(--color-danger-text));
|
|
205
205
|
--bs-btn-bg: color-mix(in srgb, var(--color-danger) 12%, transparent);
|
|
206
206
|
--bs-btn-border-color: transparent;
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
// Neutral grey button: the secondary button's shape in grey instead of the brand tint, for a
|
|
219
219
|
// supporting action (Back, Skip, Close) that should not carry the brand colour. The fill is the
|
|
220
220
|
// text colour at 8%, 12% on hover and 16% pressed, so it follows the theme in light and dark.
|
|
221
|
-
.btn-neutral {
|
|
221
|
+
.btn-soft-neutral {
|
|
222
222
|
--bs-btn-bg: color-mix(in srgb, var(--color-text) 8%, transparent);
|
|
223
223
|
--bs-btn-color: var(--color-text);
|
|
224
224
|
--bs-btn-border-color: transparent;
|
|
@@ -231,9 +231,9 @@
|
|
|
231
231
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
//
|
|
234
|
+
// Neutral button: a raised surface in both themes. Bootstrap compiles its own btn-light from $light, so it
|
|
235
235
|
// stayed near-white on a dark page; these read the meaning tokens, and the border is a soft line.
|
|
236
|
-
.btn-
|
|
236
|
+
.btn-neutral {
|
|
237
237
|
--bs-btn-color: var(--color-text);
|
|
238
238
|
--bs-btn-bg: var(--color-surface);
|
|
239
239
|
--bs-btn-border-color: var(--color-border);
|
|
@@ -252,7 +252,7 @@
|
|
|
252
252
|
// Light outline for a dark banner/hero CTA, where .btn-outline-primary's brand-coloured
|
|
253
253
|
// border/text would disappear against a dark background. White is used directly (not a
|
|
254
254
|
// token) because it's the one colour that reads on any dark surface, brand-independent.
|
|
255
|
-
.btn-
|
|
255
|
+
.btn-glass {
|
|
256
256
|
--bs-btn-color: #fff;
|
|
257
257
|
--bs-btn-bg: transparent;
|
|
258
258
|
--bs-btn-border-color: rgba(255, 255, 255, 0.6);
|
|
@@ -301,24 +301,24 @@
|
|
|
301
301
|
}
|
|
302
302
|
// Transparent-fill variants (secondary/ghost/text/neutral/outline-*) have no fill to tint from —
|
|
303
303
|
// key the wash and the label off the accent (text) colour so the hue still shows.
|
|
304
|
-
.btn-
|
|
305
|
-
.btn-
|
|
306
|
-
.btn-
|
|
307
|
-
.btn-
|
|
308
|
-
.btn-ghost.is-loading:disabled,
|
|
309
|
-
.btn-ghost.is-loading.disabled,
|
|
310
|
-
.btn-
|
|
311
|
-
.btn-
|
|
304
|
+
.btn-soft-primary.is-loading:disabled,
|
|
305
|
+
.btn-soft-primary.is-loading.disabled,
|
|
306
|
+
.btn-soft-danger.is-loading:disabled,
|
|
307
|
+
.btn-soft-danger.is-loading.disabled,
|
|
308
|
+
.btn-ghost-primary.is-loading:disabled,
|
|
309
|
+
.btn-ghost-primary.is-loading.disabled,
|
|
310
|
+
.btn-link-primary.is-loading:disabled,
|
|
311
|
+
.btn-link-primary.is-loading.disabled,
|
|
312
|
+
.btn-soft-neutral.is-loading:disabled,
|
|
313
|
+
.btn-soft-neutral.is-loading.disabled,
|
|
312
314
|
.btn-neutral.is-loading:disabled,
|
|
313
315
|
.btn-neutral.is-loading.disabled,
|
|
314
|
-
.btn-light.is-loading:disabled,
|
|
315
|
-
.btn-light.is-loading.disabled,
|
|
316
316
|
.btn-outline-primary.is-loading:disabled,
|
|
317
317
|
.btn-outline-primary.is-loading.disabled,
|
|
318
318
|
.btn-outline-danger.is-loading:disabled,
|
|
319
319
|
.btn-outline-danger.is-loading.disabled,
|
|
320
|
-
.btn-
|
|
321
|
-
.btn-
|
|
320
|
+
.btn-glass.is-loading:disabled,
|
|
321
|
+
.btn-glass.is-loading.disabled {
|
|
322
322
|
background-color: color-mix(in srgb, var(--bs-btn-color) 12%, var(--color-surface));
|
|
323
323
|
border-color: color-mix(in srgb, var(--bs-btn-color) 12%, var(--color-surface));
|
|
324
324
|
color: var(--bs-btn-color);
|
|
@@ -775,7 +775,7 @@
|
|
|
775
775
|
//
|
|
776
776
|
// No .btn-ghost-sm/-lg rungs: it is an ordinary .btn variant and sizes with Bootstrap's
|
|
777
777
|
// own .btn-sm/.btn-lg, like .btn-primary.
|
|
778
|
-
.btn-ghost {
|
|
778
|
+
.btn-ghost-primary {
|
|
779
779
|
--bs-btn-color: var(--color-primary-text);
|
|
780
780
|
--bs-btn-bg: transparent;
|
|
781
781
|
--bs-btn-border-color: transparent;
|
|
@@ -790,27 +790,27 @@
|
|
|
790
790
|
--bs-btn-disabled-border-color: transparent;
|
|
791
791
|
}
|
|
792
792
|
// Bootstrap's link-style buttons can carry an underline; the ghost never does.
|
|
793
|
-
.btn.btn-ghost,
|
|
794
|
-
.btn.btn-ghost:hover,
|
|
795
|
-
.btn.btn-ghost:active,
|
|
796
|
-
.btn.btn-ghost:focus-visible {
|
|
793
|
+
.btn.btn-ghost-primary,
|
|
794
|
+
.btn.btn-ghost-primary:hover,
|
|
795
|
+
.btn.btn-ghost-primary:active,
|
|
796
|
+
.btn.btn-ghost-primary:focus-visible {
|
|
797
797
|
text-decoration: none;
|
|
798
798
|
}
|
|
799
799
|
// No fill at rest, so keyboard focus gets the outline ring instead.
|
|
800
|
-
.btn.btn-ghost:focus-visible {
|
|
800
|
+
.btn.btn-ghost-primary:focus-visible {
|
|
801
801
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
802
802
|
outline-offset: var(--wui-focus-ring-offset);
|
|
803
803
|
box-shadow: none;
|
|
804
804
|
}
|
|
805
|
-
.btn.btn-ghost.btn-ghost:disabled,
|
|
806
|
-
.btn.btn-ghost.btn-ghost.disabled {
|
|
805
|
+
.btn.btn-ghost-primary.btn-ghost-primary:disabled,
|
|
806
|
+
.btn.btn-ghost-primary.btn-ghost-primary.disabled {
|
|
807
807
|
background-color: transparent;
|
|
808
808
|
border-color: transparent;
|
|
809
809
|
color: var(--color-primary-text);
|
|
810
810
|
opacity: var(--wui-disabled-opacity);
|
|
811
811
|
}
|
|
812
|
-
.btn.btn-ghost.btn-ghost.is-loading:disabled,
|
|
813
|
-
.btn.btn-ghost.btn-ghost.is-loading.disabled {
|
|
812
|
+
.btn.btn-ghost-primary.btn-ghost-primary.is-loading:disabled,
|
|
813
|
+
.btn.btn-ghost-primary.btn-ghost-primary.is-loading.disabled {
|
|
814
814
|
opacity: 1;
|
|
815
815
|
}
|
|
816
816
|
|
|
@@ -819,7 +819,7 @@
|
|
|
819
819
|
// no lift, and no side padding, so it lines up with the text around it. Hover deepens the colour.
|
|
820
820
|
// It pairs with animation="roll", whose label roll and round icon well carry the motion.
|
|
821
821
|
// AppButton's `text` variant emits this class on both surfaces.
|
|
822
|
-
.btn-
|
|
822
|
+
.btn-link-primary {
|
|
823
823
|
--bs-btn-color: var(--color-primary-text);
|
|
824
824
|
--bs-btn-bg: transparent;
|
|
825
825
|
--bs-btn-border-color: transparent;
|
|
@@ -834,49 +834,49 @@
|
|
|
834
834
|
--bs-btn-disabled-border-color: transparent;
|
|
835
835
|
}
|
|
836
836
|
// After the size rungs and at their weight, so sm and lg text buttons lose the side padding too.
|
|
837
|
-
.btn.btn-
|
|
837
|
+
.btn.btn-link-primary {
|
|
838
838
|
--bs-btn-padding-x: 0;
|
|
839
839
|
}
|
|
840
|
-
.btn.btn-
|
|
841
|
-
.btn.btn-
|
|
842
|
-
.btn.btn-
|
|
843
|
-
.btn.btn-
|
|
840
|
+
.btn.btn-link-primary,
|
|
841
|
+
.btn.btn-link-primary:hover,
|
|
842
|
+
.btn.btn-link-primary:active,
|
|
843
|
+
.btn.btn-link-primary:focus-visible {
|
|
844
844
|
text-decoration: none;
|
|
845
845
|
}
|
|
846
|
-
.btn.btn-
|
|
846
|
+
.btn.btn-link-primary::before {
|
|
847
847
|
display: none;
|
|
848
848
|
}
|
|
849
|
-
.btn.btn-
|
|
849
|
+
.btn.btn-link-primary:hover:not(:disabled) {
|
|
850
850
|
transform: none;
|
|
851
851
|
}
|
|
852
|
-
.btn.btn-
|
|
852
|
+
.btn.btn-link-primary:focus-visible {
|
|
853
853
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
854
854
|
outline-offset: var(--wui-focus-ring-offset);
|
|
855
855
|
box-shadow: none;
|
|
856
856
|
}
|
|
857
857
|
// A text button's icons follow the text: each icon is the text size, and the roll or pinned well
|
|
858
858
|
// is 18, 20 and 22px at sm, md and lg, a snug ring around the icon that never outweighs the label.
|
|
859
|
-
.btn.btn-
|
|
859
|
+
.btn.btn-link-primary {
|
|
860
860
|
--wui-btn-roll-well: 20px;
|
|
861
861
|
--wui-btn-well-pad: 3px;
|
|
862
862
|
--wui-btn-text-icon: 14px;
|
|
863
863
|
}
|
|
864
|
-
.btn.btn-
|
|
864
|
+
.btn.btn-link-primary.btn-sm {
|
|
865
865
|
--wui-btn-roll-well: 18px;
|
|
866
866
|
--wui-btn-well-pad: 3px;
|
|
867
867
|
--wui-btn-text-icon: 12px;
|
|
868
868
|
}
|
|
869
|
-
.btn.btn-
|
|
869
|
+
.btn.btn-link-primary.btn-lg {
|
|
870
870
|
--wui-btn-roll-well: 22px;
|
|
871
871
|
--wui-btn-well-pad: 3px;
|
|
872
872
|
--wui-btn-text-icon: 16px;
|
|
873
873
|
}
|
|
874
|
-
.btn.btn-
|
|
874
|
+
.btn.btn-link-primary svg {
|
|
875
875
|
width: var(--wui-btn-text-icon);
|
|
876
876
|
height: var(--wui-btn-text-icon);
|
|
877
877
|
}
|
|
878
|
-
.btn.btn-
|
|
879
|
-
.btn.btn-
|
|
878
|
+
.btn.btn-link-primary.btn-link-primary:disabled,
|
|
879
|
+
.btn.btn-link-primary.btn-link-primary.disabled {
|
|
880
880
|
background-color: transparent;
|
|
881
881
|
border-color: transparent;
|
|
882
882
|
color: var(--color-primary-text);
|
package/scss/_marketing.scss
CHANGED
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
//
|
|
86
86
|
// Example:
|
|
87
87
|
// <a class="btn btn-primary btn-pill" style="--bs-btn-padding-x:1.5rem;">…</a>
|
|
88
|
-
// <a class="btn btn-
|
|
88
|
+
// <a class="btn btn-neutral btn-pill-sm">Learn more</a>
|
|
89
89
|
.btn-pill {
|
|
90
90
|
--bs-btn-padding-y: 0; // height driven by min-height + flex centering
|
|
91
91
|
--bs-btn-padding-x: 1.25rem; // 20px (px-5)
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
// - text : --wui-text-heading (text-foreground in marketing-root)
|
|
124
124
|
// - blur : 4px (backdrop-blur-sm)
|
|
125
125
|
// - hover bg: #ffffff (hover:bg-surface = full opacity)
|
|
126
|
-
.btn-ghost-
|
|
126
|
+
.btn-ghost-glass {
|
|
127
127
|
--bs-btn-color: var(--wui-text-heading);
|
|
128
128
|
--bs-btn-bg: rgba(255, 255, 255, 0.60);
|
|
129
129
|
--bs-btn-border-color: rgba(13, 24, 43, 0.15);
|
package/scss/_variables.scss
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
// (the documented override path) wins — a plain assignment here would clobber the brand.
|
|
21
21
|
$primary: #4F46E5 !default;
|
|
22
22
|
// $secondary is intentional quiet grey (text-2 / foreground-3), NOT a second
|
|
23
|
-
// brand hue. `.btn-
|
|
23
|
+
// brand hue. `.btn-soft-primary`, `.text-secondary`, `.bg-secondary` mean "quiet /
|
|
24
24
|
// de-emphasised" across products (Metronic-like). Products that need a true
|
|
25
25
|
// second brand colour should use a custom utility or token — do not repurpose
|
|
26
26
|
// $secondary without a coordinated migration.
|
package/scss/wui/_groups.scss
CHANGED
package/scss/wui/_overlays.scss
CHANGED
|
@@ -658,7 +658,7 @@ body[data-rr-ui-modal-open] {
|
|
|
658
658
|
|
|
659
659
|
// Tone presets — swap the three colour vars; the arrow follows --bs-tooltip-bg automatically.
|
|
660
660
|
// Fills that carry white text use the AA-cleared -strong tokens; warning stays dark-on-yellow.
|
|
661
|
-
.tooltip.wui-tooltip.
|
|
661
|
+
.tooltip.wui-tooltip.wui-tooltip-inverse {
|
|
662
662
|
--wui-tooltip-bg: var(--color-text);
|
|
663
663
|
--wui-tooltip-color: var(--color-bg);
|
|
664
664
|
--wui-tooltip-border: transparent;
|
package/scss/wui/_shortcuts.scss
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
color: inherit;
|
|
34
34
|
}
|
|
35
35
|
// The default tooltip sits on the plain surface colour, so its chip takes the plain chip look.
|
|
36
|
-
.tooltip.wui-tooltip:not(.
|
|
36
|
+
.tooltip.wui-tooltip:not(.wui-tooltip-inverse):not(.tone-primary):not(.tone-success):not(.tone-danger):not(.tone-warning) .wui-kbd {
|
|
37
37
|
border-color: var(--color-border);
|
|
38
38
|
background: var(--color-bg-muted);
|
|
39
39
|
color: var(--color-text);
|
package/scss/wui/_utilities.scss
CHANGED
|
@@ -1007,14 +1007,14 @@
|
|
|
1007
1007
|
// A tinted, outline, ghost or text button in the action slot takes the alert's tone instead of
|
|
1008
1008
|
// the brand colour, so it reads as part of the alert. The label is the alert's AA-safe text
|
|
1009
1009
|
// colour. Solid buttons (primary, danger, warning) keep their own fill, which carries meaning.
|
|
1010
|
-
.alert-action :is(.btn-
|
|
1010
|
+
.alert-action :is(.btn-soft-primary, .btn-outline-primary, .btn-ghost-primary, .btn-link-primary) {
|
|
1011
1011
|
--bs-btn-color: var(--alert-text);
|
|
1012
1012
|
--bs-btn-hover-color: var(--alert-text);
|
|
1013
1013
|
--bs-btn-active-color: var(--alert-text);
|
|
1014
1014
|
--bs-btn-disabled-color: var(--alert-text);
|
|
1015
1015
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--alert-tone) 40%, transparent);
|
|
1016
1016
|
}
|
|
1017
|
-
.alert-action .btn-
|
|
1017
|
+
.alert-action .btn-soft-primary {
|
|
1018
1018
|
--bs-btn-bg: color-mix(in srgb, var(--alert-tone) 16%, transparent);
|
|
1019
1019
|
--bs-btn-hover-bg: color-mix(in srgb, var(--alert-tone) 24%, transparent);
|
|
1020
1020
|
--bs-btn-active-bg: color-mix(in srgb, var(--alert-tone) 32%, transparent);
|
|
@@ -1027,7 +1027,7 @@
|
|
|
1027
1027
|
--bs-btn-active-border-color: var(--alert-tone);
|
|
1028
1028
|
--bs-btn-disabled-border-color: var(--alert-tone);
|
|
1029
1029
|
}
|
|
1030
|
-
.alert-action .btn-ghost {
|
|
1030
|
+
.alert-action .btn-ghost-primary {
|
|
1031
1031
|
--bs-btn-hover-bg: color-mix(in srgb, var(--alert-tone) 16%, transparent);
|
|
1032
1032
|
--bs-btn-active-bg: color-mix(in srgb, var(--alert-tone) 24%, transparent);
|
|
1033
1033
|
}
|