@webority/theme 0.130.1 → 0.130.2
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.130.
|
|
3
|
+
"version": "0.130.2",
|
|
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.130.
|
|
50
|
+
"@webority/tokens": "0.130.2",
|
|
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.130.
|
|
1
|
+
// Generated by @webority/tokens 0.130.2 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
|
@@ -88,18 +88,18 @@
|
|
|
88
88
|
--bs-btn-active-border-color: transparent;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
//
|
|
92
|
-
//
|
|
91
|
+
// The solid affirmative (Approve, Confirm): a full fill on the deepened success token, which
|
|
92
|
+
// carries its on-colour at AA. The quiet tint is .btn-soft-success.
|
|
93
93
|
.btn-success {
|
|
94
|
-
--bs-btn-color: var(--color-success-
|
|
95
|
-
--bs-btn-bg:
|
|
96
|
-
--bs-btn-border-color:
|
|
97
|
-
--bs-btn-hover-color: var(--color-success-
|
|
98
|
-
--bs-btn-hover-bg: color-mix(in srgb, var(--color-success)
|
|
99
|
-
--bs-btn-hover-border-color:
|
|
100
|
-
--bs-btn-active-color: var(--color-success-
|
|
101
|
-
--bs-btn-active-bg: color-mix(in srgb, var(--color-success)
|
|
102
|
-
--bs-btn-active-border-color:
|
|
94
|
+
--bs-btn-color: var(--color-on-success-strong);
|
|
95
|
+
--bs-btn-bg: var(--color-success-strong);
|
|
96
|
+
--bs-btn-border-color: var(--color-success-strong);
|
|
97
|
+
--bs-btn-hover-color: var(--color-on-success-strong);
|
|
98
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-success-strong) 88%, #000);
|
|
99
|
+
--bs-btn-hover-border-color: color-mix(in srgb, var(--color-success-strong) 88%, #000);
|
|
100
|
+
--bs-btn-active-color: var(--color-on-success-strong);
|
|
101
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-success-strong) 80%, #000);
|
|
102
|
+
--bs-btn-active-border-color: color-mix(in srgb, var(--color-success-strong) 80%, #000);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// A button-shaped label that does nothing: keeps the .btn chrome but takes no pointer, so it
|
|
@@ -215,6 +215,46 @@
|
|
|
215
215
|
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-danger) 50%, transparent);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
+
// Soft success, warning and info: the soft-danger treatment in each tone's own ink.
|
|
219
|
+
.btn-soft-success {
|
|
220
|
+
--bs-btn-color: var(--color-success-text);
|
|
221
|
+
--bs-btn-bg: color-mix(in srgb, var(--color-success) 12%, transparent);
|
|
222
|
+
--bs-btn-border-color: transparent;
|
|
223
|
+
--bs-btn-hover-color: var(--color-success-text);
|
|
224
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-success) 18%, transparent);
|
|
225
|
+
--bs-btn-hover-border-color: transparent;
|
|
226
|
+
--bs-btn-active-color: var(--color-success-text);
|
|
227
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-success) 26%, transparent);
|
|
228
|
+
--bs-btn-active-border-color: transparent;
|
|
229
|
+
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-success) 50%, transparent);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.btn-soft-warning {
|
|
233
|
+
--bs-btn-color: var(--color-warning-text);
|
|
234
|
+
--bs-btn-bg: color-mix(in srgb, var(--color-warning) 12%, transparent);
|
|
235
|
+
--bs-btn-border-color: transparent;
|
|
236
|
+
--bs-btn-hover-color: var(--color-warning-text);
|
|
237
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-warning) 18%, transparent);
|
|
238
|
+
--bs-btn-hover-border-color: transparent;
|
|
239
|
+
--bs-btn-active-color: var(--color-warning-text);
|
|
240
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-warning) 26%, transparent);
|
|
241
|
+
--bs-btn-active-border-color: transparent;
|
|
242
|
+
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-warning) 50%, transparent);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.btn-soft-info {
|
|
246
|
+
--bs-btn-color: var(--color-info-text);
|
|
247
|
+
--bs-btn-bg: color-mix(in srgb, var(--color-info) 12%, transparent);
|
|
248
|
+
--bs-btn-border-color: transparent;
|
|
249
|
+
--bs-btn-hover-color: var(--color-info-text);
|
|
250
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-info) 18%, transparent);
|
|
251
|
+
--bs-btn-hover-border-color: transparent;
|
|
252
|
+
--bs-btn-active-color: var(--color-info-text);
|
|
253
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-info) 26%, transparent);
|
|
254
|
+
--bs-btn-active-border-color: transparent;
|
|
255
|
+
--bs-btn-focus-box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--color-info) 50%, transparent);
|
|
256
|
+
}
|
|
257
|
+
|
|
218
258
|
// Neutral grey button: the secondary button's shape in grey instead of the brand tint, for a
|
|
219
259
|
// supporting action (Back, Skip, Close) that should not carry the brand colour. The fill is the
|
|
220
260
|
// text colour at 8%, 12% on hover and 16% pressed, so it follows the theme in light and dark.
|
|
@@ -305,10 +345,36 @@
|
|
|
305
345
|
.btn-soft-primary.is-loading.disabled,
|
|
306
346
|
.btn-soft-danger.is-loading:disabled,
|
|
307
347
|
.btn-soft-danger.is-loading.disabled,
|
|
348
|
+
.btn-soft-success.is-loading:disabled,
|
|
349
|
+
.btn-soft-success.is-loading.disabled,
|
|
350
|
+
.btn-soft-warning.is-loading:disabled,
|
|
351
|
+
.btn-soft-warning.is-loading.disabled,
|
|
352
|
+
.btn-soft-info.is-loading:disabled,
|
|
353
|
+
.btn-soft-info.is-loading.disabled,
|
|
308
354
|
.btn-ghost-primary.is-loading:disabled,
|
|
309
355
|
.btn-ghost-primary.is-loading.disabled,
|
|
356
|
+
.btn-ghost-success.is-loading:disabled,
|
|
357
|
+
.btn-ghost-success.is-loading.disabled,
|
|
358
|
+
.btn-ghost-warning.is-loading:disabled,
|
|
359
|
+
.btn-ghost-warning.is-loading.disabled,
|
|
360
|
+
.btn-ghost-danger.is-loading:disabled,
|
|
361
|
+
.btn-ghost-danger.is-loading.disabled,
|
|
362
|
+
.btn-ghost-info.is-loading:disabled,
|
|
363
|
+
.btn-ghost-info.is-loading.disabled,
|
|
364
|
+
.btn-ghost-neutral.is-loading:disabled,
|
|
365
|
+
.btn-ghost-neutral.is-loading.disabled,
|
|
310
366
|
.btn-link-primary.is-loading:disabled,
|
|
311
367
|
.btn-link-primary.is-loading.disabled,
|
|
368
|
+
.btn-link-success.is-loading:disabled,
|
|
369
|
+
.btn-link-success.is-loading.disabled,
|
|
370
|
+
.btn-link-warning.is-loading:disabled,
|
|
371
|
+
.btn-link-warning.is-loading.disabled,
|
|
372
|
+
.btn-link-danger.is-loading:disabled,
|
|
373
|
+
.btn-link-danger.is-loading.disabled,
|
|
374
|
+
.btn-link-info.is-loading:disabled,
|
|
375
|
+
.btn-link-info.is-loading.disabled,
|
|
376
|
+
.btn-link-neutral.is-loading:disabled,
|
|
377
|
+
.btn-link-neutral.is-loading.disabled,
|
|
312
378
|
.btn-soft-neutral.is-loading:disabled,
|
|
313
379
|
.btn-soft-neutral.is-loading.disabled,
|
|
314
380
|
.btn-neutral.is-loading:disabled,
|
|
@@ -789,15 +855,117 @@
|
|
|
789
855
|
--bs-btn-disabled-bg: transparent;
|
|
790
856
|
--bs-btn-disabled-border-color: transparent;
|
|
791
857
|
}
|
|
858
|
+
|
|
859
|
+
// Ghost success, warning, danger, info and neutral: the ghost-primary treatment in each tone's own ink.
|
|
860
|
+
.btn-ghost-success {
|
|
861
|
+
--bs-btn-color: var(--color-success-text);
|
|
862
|
+
--bs-btn-bg: transparent;
|
|
863
|
+
--bs-btn-border-color: transparent;
|
|
864
|
+
--bs-btn-hover-color: var(--color-success-text);
|
|
865
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-success) 12%, transparent);
|
|
866
|
+
--bs-btn-hover-border-color: transparent;
|
|
867
|
+
--bs-btn-active-color: var(--color-success-text);
|
|
868
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-success) 18%, transparent);
|
|
869
|
+
--bs-btn-active-border-color: transparent;
|
|
870
|
+
--bs-btn-disabled-color: var(--color-success-text);
|
|
871
|
+
--bs-btn-disabled-bg: transparent;
|
|
872
|
+
--bs-btn-disabled-border-color: transparent;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.btn-ghost-warning {
|
|
876
|
+
--bs-btn-color: var(--color-warning-text);
|
|
877
|
+
--bs-btn-bg: transparent;
|
|
878
|
+
--bs-btn-border-color: transparent;
|
|
879
|
+
--bs-btn-hover-color: var(--color-warning-text);
|
|
880
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-warning) 12%, transparent);
|
|
881
|
+
--bs-btn-hover-border-color: transparent;
|
|
882
|
+
--bs-btn-active-color: var(--color-warning-text);
|
|
883
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-warning) 18%, transparent);
|
|
884
|
+
--bs-btn-active-border-color: transparent;
|
|
885
|
+
--bs-btn-disabled-color: var(--color-warning-text);
|
|
886
|
+
--bs-btn-disabled-bg: transparent;
|
|
887
|
+
--bs-btn-disabled-border-color: transparent;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
.btn-ghost-danger {
|
|
891
|
+
--bs-btn-color: var(--color-danger-text);
|
|
892
|
+
--bs-btn-bg: transparent;
|
|
893
|
+
--bs-btn-border-color: transparent;
|
|
894
|
+
--bs-btn-hover-color: var(--color-danger-text);
|
|
895
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-danger) 12%, transparent);
|
|
896
|
+
--bs-btn-hover-border-color: transparent;
|
|
897
|
+
--bs-btn-active-color: var(--color-danger-text);
|
|
898
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-danger) 18%, transparent);
|
|
899
|
+
--bs-btn-active-border-color: transparent;
|
|
900
|
+
--bs-btn-disabled-color: var(--color-danger-text);
|
|
901
|
+
--bs-btn-disabled-bg: transparent;
|
|
902
|
+
--bs-btn-disabled-border-color: transparent;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.btn-ghost-info {
|
|
906
|
+
--bs-btn-color: var(--color-info-text);
|
|
907
|
+
--bs-btn-bg: transparent;
|
|
908
|
+
--bs-btn-border-color: transparent;
|
|
909
|
+
--bs-btn-hover-color: var(--color-info-text);
|
|
910
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-info) 12%, transparent);
|
|
911
|
+
--bs-btn-hover-border-color: transparent;
|
|
912
|
+
--bs-btn-active-color: var(--color-info-text);
|
|
913
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-info) 18%, transparent);
|
|
914
|
+
--bs-btn-active-border-color: transparent;
|
|
915
|
+
--bs-btn-disabled-color: var(--color-info-text);
|
|
916
|
+
--bs-btn-disabled-bg: transparent;
|
|
917
|
+
--bs-btn-disabled-border-color: transparent;
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
.btn-ghost-neutral {
|
|
921
|
+
--bs-btn-color: var(--color-text);
|
|
922
|
+
--bs-btn-bg: transparent;
|
|
923
|
+
--bs-btn-border-color: transparent;
|
|
924
|
+
--bs-btn-hover-color: var(--color-text);
|
|
925
|
+
--bs-btn-hover-bg: color-mix(in srgb, var(--color-text) 12%, transparent);
|
|
926
|
+
--bs-btn-hover-border-color: transparent;
|
|
927
|
+
--bs-btn-active-color: var(--color-text);
|
|
928
|
+
--bs-btn-active-bg: color-mix(in srgb, var(--color-text) 18%, transparent);
|
|
929
|
+
--bs-btn-active-border-color: transparent;
|
|
930
|
+
--bs-btn-disabled-color: var(--color-text);
|
|
931
|
+
--bs-btn-disabled-bg: transparent;
|
|
932
|
+
--bs-btn-disabled-border-color: transparent;
|
|
933
|
+
}
|
|
934
|
+
|
|
792
935
|
// Bootstrap's link-style buttons can carry an underline; the ghost never does.
|
|
793
936
|
.btn.btn-ghost-primary,
|
|
794
937
|
.btn.btn-ghost-primary:hover,
|
|
795
938
|
.btn.btn-ghost-primary:active,
|
|
796
|
-
.btn.btn-ghost-primary:focus-visible
|
|
939
|
+
.btn.btn-ghost-primary:focus-visible,
|
|
940
|
+
.btn.btn-ghost-success,
|
|
941
|
+
.btn.btn-ghost-success:hover,
|
|
942
|
+
.btn.btn-ghost-success:active,
|
|
943
|
+
.btn.btn-ghost-success:focus-visible,
|
|
944
|
+
.btn.btn-ghost-warning,
|
|
945
|
+
.btn.btn-ghost-warning:hover,
|
|
946
|
+
.btn.btn-ghost-warning:active,
|
|
947
|
+
.btn.btn-ghost-warning:focus-visible,
|
|
948
|
+
.btn.btn-ghost-danger,
|
|
949
|
+
.btn.btn-ghost-danger:hover,
|
|
950
|
+
.btn.btn-ghost-danger:active,
|
|
951
|
+
.btn.btn-ghost-danger:focus-visible,
|
|
952
|
+
.btn.btn-ghost-info,
|
|
953
|
+
.btn.btn-ghost-info:hover,
|
|
954
|
+
.btn.btn-ghost-info:active,
|
|
955
|
+
.btn.btn-ghost-info:focus-visible,
|
|
956
|
+
.btn.btn-ghost-neutral,
|
|
957
|
+
.btn.btn-ghost-neutral:hover,
|
|
958
|
+
.btn.btn-ghost-neutral:active,
|
|
959
|
+
.btn.btn-ghost-neutral:focus-visible {
|
|
797
960
|
text-decoration: none;
|
|
798
961
|
}
|
|
799
962
|
// No fill at rest, so keyboard focus gets the outline ring instead.
|
|
800
|
-
.btn.btn-ghost-primary:focus-visible
|
|
963
|
+
.btn.btn-ghost-primary:focus-visible,
|
|
964
|
+
.btn.btn-ghost-success:focus-visible,
|
|
965
|
+
.btn.btn-ghost-warning:focus-visible,
|
|
966
|
+
.btn.btn-ghost-danger:focus-visible,
|
|
967
|
+
.btn.btn-ghost-info:focus-visible,
|
|
968
|
+
.btn.btn-ghost-neutral:focus-visible {
|
|
801
969
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
802
970
|
outline-offset: var(--wui-focus-ring-offset);
|
|
803
971
|
box-shadow: none;
|
|
@@ -810,7 +978,17 @@
|
|
|
810
978
|
opacity: var(--wui-disabled-opacity);
|
|
811
979
|
}
|
|
812
980
|
.btn.btn-ghost-primary.btn-ghost-primary.is-loading:disabled,
|
|
813
|
-
.btn.btn-ghost-primary.btn-ghost-primary.is-loading.disabled
|
|
981
|
+
.btn.btn-ghost-primary.btn-ghost-primary.is-loading.disabled,
|
|
982
|
+
.btn.btn-ghost-success.btn-ghost-success.is-loading:disabled,
|
|
983
|
+
.btn.btn-ghost-success.btn-ghost-success.is-loading.disabled,
|
|
984
|
+
.btn.btn-ghost-warning.btn-ghost-warning.is-loading:disabled,
|
|
985
|
+
.btn.btn-ghost-warning.btn-ghost-warning.is-loading.disabled,
|
|
986
|
+
.btn.btn-ghost-danger.btn-ghost-danger.is-loading:disabled,
|
|
987
|
+
.btn.btn-ghost-danger.btn-ghost-danger.is-loading.disabled,
|
|
988
|
+
.btn.btn-ghost-info.btn-ghost-info.is-loading:disabled,
|
|
989
|
+
.btn.btn-ghost-info.btn-ghost-info.is-loading.disabled,
|
|
990
|
+
.btn.btn-ghost-neutral.btn-ghost-neutral.is-loading:disabled,
|
|
991
|
+
.btn.btn-ghost-neutral.btn-ghost-neutral.is-loading.disabled {
|
|
814
992
|
opacity: 1;
|
|
815
993
|
}
|
|
816
994
|
|
|
@@ -833,45 +1011,182 @@
|
|
|
833
1011
|
--bs-btn-disabled-bg: transparent;
|
|
834
1012
|
--bs-btn-disabled-border-color: transparent;
|
|
835
1013
|
}
|
|
1014
|
+
|
|
1015
|
+
// Text button tones: the link-primary treatment in each tone's own ink; neutral reads the text colour.
|
|
1016
|
+
.btn-link-success {
|
|
1017
|
+
--bs-btn-color: var(--color-success-text);
|
|
1018
|
+
--bs-btn-bg: transparent;
|
|
1019
|
+
--bs-btn-border-color: transparent;
|
|
1020
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-success-text) 80%, var(--color-text));
|
|
1021
|
+
--bs-btn-hover-bg: transparent;
|
|
1022
|
+
--bs-btn-hover-border-color: transparent;
|
|
1023
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-success-text) 70%, var(--color-text));
|
|
1024
|
+
--bs-btn-active-bg: transparent;
|
|
1025
|
+
--bs-btn-active-border-color: transparent;
|
|
1026
|
+
--bs-btn-disabled-color: var(--color-success-text);
|
|
1027
|
+
--bs-btn-disabled-bg: transparent;
|
|
1028
|
+
--bs-btn-disabled-border-color: transparent;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.btn-link-warning {
|
|
1032
|
+
--bs-btn-color: var(--color-warning-text);
|
|
1033
|
+
--bs-btn-bg: transparent;
|
|
1034
|
+
--bs-btn-border-color: transparent;
|
|
1035
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-warning-text) 80%, var(--color-text));
|
|
1036
|
+
--bs-btn-hover-bg: transparent;
|
|
1037
|
+
--bs-btn-hover-border-color: transparent;
|
|
1038
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-warning-text) 70%, var(--color-text));
|
|
1039
|
+
--bs-btn-active-bg: transparent;
|
|
1040
|
+
--bs-btn-active-border-color: transparent;
|
|
1041
|
+
--bs-btn-disabled-color: var(--color-warning-text);
|
|
1042
|
+
--bs-btn-disabled-bg: transparent;
|
|
1043
|
+
--bs-btn-disabled-border-color: transparent;
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
.btn-link-danger {
|
|
1047
|
+
--bs-btn-color: var(--color-danger-text);
|
|
1048
|
+
--bs-btn-bg: transparent;
|
|
1049
|
+
--bs-btn-border-color: transparent;
|
|
1050
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-danger-text) 80%, var(--color-text));
|
|
1051
|
+
--bs-btn-hover-bg: transparent;
|
|
1052
|
+
--bs-btn-hover-border-color: transparent;
|
|
1053
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-danger-text) 70%, var(--color-text));
|
|
1054
|
+
--bs-btn-active-bg: transparent;
|
|
1055
|
+
--bs-btn-active-border-color: transparent;
|
|
1056
|
+
--bs-btn-disabled-color: var(--color-danger-text);
|
|
1057
|
+
--bs-btn-disabled-bg: transparent;
|
|
1058
|
+
--bs-btn-disabled-border-color: transparent;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
.btn-link-info {
|
|
1062
|
+
--bs-btn-color: var(--color-info-text);
|
|
1063
|
+
--bs-btn-bg: transparent;
|
|
1064
|
+
--bs-btn-border-color: transparent;
|
|
1065
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-info-text) 80%, var(--color-text));
|
|
1066
|
+
--bs-btn-hover-bg: transparent;
|
|
1067
|
+
--bs-btn-hover-border-color: transparent;
|
|
1068
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-info-text) 70%, var(--color-text));
|
|
1069
|
+
--bs-btn-active-bg: transparent;
|
|
1070
|
+
--bs-btn-active-border-color: transparent;
|
|
1071
|
+
--bs-btn-disabled-color: var(--color-info-text);
|
|
1072
|
+
--bs-btn-disabled-bg: transparent;
|
|
1073
|
+
--bs-btn-disabled-border-color: transparent;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
.btn-link-neutral {
|
|
1077
|
+
--bs-btn-color: var(--color-text);
|
|
1078
|
+
--bs-btn-bg: transparent;
|
|
1079
|
+
--bs-btn-border-color: transparent;
|
|
1080
|
+
--bs-btn-hover-color: color-mix(in srgb, var(--color-text) 80%, transparent);
|
|
1081
|
+
--bs-btn-hover-bg: transparent;
|
|
1082
|
+
--bs-btn-hover-border-color: transparent;
|
|
1083
|
+
--bs-btn-active-color: color-mix(in srgb, var(--color-text) 70%, transparent);
|
|
1084
|
+
--bs-btn-active-bg: transparent;
|
|
1085
|
+
--bs-btn-active-border-color: transparent;
|
|
1086
|
+
--bs-btn-disabled-color: var(--color-text);
|
|
1087
|
+
--bs-btn-disabled-bg: transparent;
|
|
1088
|
+
--bs-btn-disabled-border-color: transparent;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
836
1091
|
// After the size rungs and at their weight, so sm and lg text buttons lose the side padding too.
|
|
837
|
-
.btn.btn-link-primary
|
|
1092
|
+
.btn.btn-link-primary,
|
|
1093
|
+
.btn.btn-link-success,
|
|
1094
|
+
.btn.btn-link-warning,
|
|
1095
|
+
.btn.btn-link-danger,
|
|
1096
|
+
.btn.btn-link-info,
|
|
1097
|
+
.btn.btn-link-neutral {
|
|
838
1098
|
--bs-btn-padding-x: 0;
|
|
839
1099
|
}
|
|
840
1100
|
.btn.btn-link-primary,
|
|
841
1101
|
.btn.btn-link-primary:hover,
|
|
842
1102
|
.btn.btn-link-primary:active,
|
|
843
|
-
.btn.btn-link-primary:focus-visible
|
|
1103
|
+
.btn.btn-link-primary:focus-visible,
|
|
1104
|
+
.btn.btn-link-success,
|
|
1105
|
+
.btn.btn-link-success:hover,
|
|
1106
|
+
.btn.btn-link-success:active,
|
|
1107
|
+
.btn.btn-link-success:focus-visible,
|
|
1108
|
+
.btn.btn-link-warning,
|
|
1109
|
+
.btn.btn-link-warning:hover,
|
|
1110
|
+
.btn.btn-link-warning:active,
|
|
1111
|
+
.btn.btn-link-warning:focus-visible,
|
|
1112
|
+
.btn.btn-link-danger,
|
|
1113
|
+
.btn.btn-link-danger:hover,
|
|
1114
|
+
.btn.btn-link-danger:active,
|
|
1115
|
+
.btn.btn-link-danger:focus-visible,
|
|
1116
|
+
.btn.btn-link-info,
|
|
1117
|
+
.btn.btn-link-info:hover,
|
|
1118
|
+
.btn.btn-link-info:active,
|
|
1119
|
+
.btn.btn-link-info:focus-visible,
|
|
1120
|
+
.btn.btn-link-neutral,
|
|
1121
|
+
.btn.btn-link-neutral:hover,
|
|
1122
|
+
.btn.btn-link-neutral:active,
|
|
1123
|
+
.btn.btn-link-neutral:focus-visible {
|
|
844
1124
|
text-decoration: none;
|
|
845
1125
|
}
|
|
846
|
-
.btn.btn-link-primary::before
|
|
1126
|
+
.btn.btn-link-primary::before,
|
|
1127
|
+
.btn.btn-link-success::before,
|
|
1128
|
+
.btn.btn-link-warning::before,
|
|
1129
|
+
.btn.btn-link-danger::before,
|
|
1130
|
+
.btn.btn-link-info::before,
|
|
1131
|
+
.btn.btn-link-neutral::before {
|
|
847
1132
|
display: none;
|
|
848
1133
|
}
|
|
849
|
-
.btn.btn-link-primary:hover:not(:disabled)
|
|
1134
|
+
.btn.btn-link-primary:hover:not(:disabled),
|
|
1135
|
+
.btn.btn-link-success:hover:not(:disabled),
|
|
1136
|
+
.btn.btn-link-warning:hover:not(:disabled),
|
|
1137
|
+
.btn.btn-link-danger:hover:not(:disabled),
|
|
1138
|
+
.btn.btn-link-info:hover:not(:disabled),
|
|
1139
|
+
.btn.btn-link-neutral:hover:not(:disabled) {
|
|
850
1140
|
transform: none;
|
|
851
1141
|
}
|
|
852
|
-
.btn.btn-link-primary:focus-visible
|
|
1142
|
+
.btn.btn-link-primary:focus-visible,
|
|
1143
|
+
.btn.btn-link-success:focus-visible,
|
|
1144
|
+
.btn.btn-link-warning:focus-visible,
|
|
1145
|
+
.btn.btn-link-danger:focus-visible,
|
|
1146
|
+
.btn.btn-link-info:focus-visible,
|
|
1147
|
+
.btn.btn-link-neutral:focus-visible {
|
|
853
1148
|
outline: var(--wui-focus-ring-width) solid var(--color-focus-ring);
|
|
854
1149
|
outline-offset: var(--wui-focus-ring-offset);
|
|
855
1150
|
box-shadow: none;
|
|
856
1151
|
}
|
|
857
1152
|
// A text button's icons follow the text: each icon is the text size, and the roll or pinned well
|
|
858
1153
|
// is 18, 20 and 22px at sm, md and lg, a snug ring around the icon that never outweighs the label.
|
|
859
|
-
.btn.btn-link-primary
|
|
1154
|
+
.btn.btn-link-primary,
|
|
1155
|
+
.btn.btn-link-success,
|
|
1156
|
+
.btn.btn-link-warning,
|
|
1157
|
+
.btn.btn-link-danger,
|
|
1158
|
+
.btn.btn-link-info,
|
|
1159
|
+
.btn.btn-link-neutral {
|
|
860
1160
|
--wui-btn-roll-well: 20px;
|
|
861
1161
|
--wui-btn-well-pad: 3px;
|
|
862
1162
|
--wui-btn-text-icon: 14px;
|
|
863
1163
|
}
|
|
864
|
-
.btn.btn-link-primary.btn-sm
|
|
1164
|
+
.btn.btn-link-primary.btn-sm,
|
|
1165
|
+
.btn.btn-link-success.btn-sm,
|
|
1166
|
+
.btn.btn-link-warning.btn-sm,
|
|
1167
|
+
.btn.btn-link-danger.btn-sm,
|
|
1168
|
+
.btn.btn-link-info.btn-sm,
|
|
1169
|
+
.btn.btn-link-neutral.btn-sm {
|
|
865
1170
|
--wui-btn-roll-well: 18px;
|
|
866
1171
|
--wui-btn-well-pad: 3px;
|
|
867
1172
|
--wui-btn-text-icon: 12px;
|
|
868
1173
|
}
|
|
869
|
-
.btn.btn-link-primary.btn-lg
|
|
1174
|
+
.btn.btn-link-primary.btn-lg,
|
|
1175
|
+
.btn.btn-link-success.btn-lg,
|
|
1176
|
+
.btn.btn-link-warning.btn-lg,
|
|
1177
|
+
.btn.btn-link-danger.btn-lg,
|
|
1178
|
+
.btn.btn-link-info.btn-lg,
|
|
1179
|
+
.btn.btn-link-neutral.btn-lg {
|
|
870
1180
|
--wui-btn-roll-well: 22px;
|
|
871
1181
|
--wui-btn-well-pad: 3px;
|
|
872
1182
|
--wui-btn-text-icon: 16px;
|
|
873
1183
|
}
|
|
874
|
-
.btn.btn-link-primary svg
|
|
1184
|
+
.btn.btn-link-primary svg,
|
|
1185
|
+
.btn.btn-link-success svg,
|
|
1186
|
+
.btn.btn-link-warning svg,
|
|
1187
|
+
.btn.btn-link-danger svg,
|
|
1188
|
+
.btn.btn-link-info svg,
|
|
1189
|
+
.btn.btn-link-neutral svg {
|
|
875
1190
|
width: var(--wui-btn-text-icon);
|
|
876
1191
|
height: var(--wui-btn-text-icon);
|
|
877
1192
|
}
|
|
@@ -882,6 +1197,32 @@
|
|
|
882
1197
|
color: var(--color-primary-text);
|
|
883
1198
|
opacity: var(--wui-disabled-opacity);
|
|
884
1199
|
}
|
|
1200
|
+
// The ghost and link tones keep their own ink when disabled: the variant's disabled colour, not the primary one.
|
|
1201
|
+
.btn.btn-ghost-success.btn-ghost-success:disabled,
|
|
1202
|
+
.btn.btn-ghost-success.btn-ghost-success.disabled,
|
|
1203
|
+
.btn.btn-ghost-warning.btn-ghost-warning:disabled,
|
|
1204
|
+
.btn.btn-ghost-warning.btn-ghost-warning.disabled,
|
|
1205
|
+
.btn.btn-ghost-danger.btn-ghost-danger:disabled,
|
|
1206
|
+
.btn.btn-ghost-danger.btn-ghost-danger.disabled,
|
|
1207
|
+
.btn.btn-ghost-info.btn-ghost-info:disabled,
|
|
1208
|
+
.btn.btn-ghost-info.btn-ghost-info.disabled,
|
|
1209
|
+
.btn.btn-ghost-neutral.btn-ghost-neutral:disabled,
|
|
1210
|
+
.btn.btn-ghost-neutral.btn-ghost-neutral.disabled,
|
|
1211
|
+
.btn.btn-link-success.btn-link-success:disabled,
|
|
1212
|
+
.btn.btn-link-success.btn-link-success.disabled,
|
|
1213
|
+
.btn.btn-link-warning.btn-link-warning:disabled,
|
|
1214
|
+
.btn.btn-link-warning.btn-link-warning.disabled,
|
|
1215
|
+
.btn.btn-link-danger.btn-link-danger:disabled,
|
|
1216
|
+
.btn.btn-link-danger.btn-link-danger.disabled,
|
|
1217
|
+
.btn.btn-link-info.btn-link-info:disabled,
|
|
1218
|
+
.btn.btn-link-info.btn-link-info.disabled,
|
|
1219
|
+
.btn.btn-link-neutral.btn-link-neutral:disabled,
|
|
1220
|
+
.btn.btn-link-neutral.btn-link-neutral.disabled {
|
|
1221
|
+
background-color: transparent;
|
|
1222
|
+
border-color: transparent;
|
|
1223
|
+
color: var(--bs-btn-disabled-color);
|
|
1224
|
+
opacity: var(--wui-disabled-opacity);
|
|
1225
|
+
}
|
|
885
1226
|
|
|
886
1227
|
// ---- Card hover-lift (name is historical) -----------------------------
|
|
887
1228
|
// `.card-lifted` does NOT cast a shadow — in-page cards stay flat. It only
|
|
@@ -899,10 +1240,15 @@
|
|
|
899
1240
|
// compiled $card-border-radius. Background is an ELEVATED surface, not the page
|
|
900
1241
|
// colour — so a card stays visible on a tinted page, and flips correctly in dark
|
|
901
1242
|
// mode because --color-surface is themed in the alias layer.
|
|
902
|
-
// A brand that draws rounder cards than its controls sets --wui-card-radius in its token file
|
|
1243
|
+
// A brand that draws rounder cards than its controls sets --wui-card-radius in its token file,
|
|
1244
|
+
// and one whose card text should follow the page text sets --wui-card-color (such as var(--color-text)).
|
|
1245
|
+
// A brand that draws its card corners as squircles sets --wui-card-corner-shape: squircle; a browser
|
|
1246
|
+
// without corner shaping keeps the plain round corner.
|
|
903
1247
|
.card {
|
|
904
1248
|
--bs-card-border-radius: var(--wui-card-radius, var(--wui-radius-lg));
|
|
905
1249
|
--bs-card-bg: var(--color-surface);
|
|
1250
|
+
color: var(--wui-card-color, var(--bs-body-color));
|
|
1251
|
+
corner-shape: var(--wui-card-corner-shape, round);
|
|
906
1252
|
}
|
|
907
1253
|
|
|
908
1254
|
// Header actions slot (React `headerActions` prop / Razor <app-card-actions>). Both
|
package/scss/wui/_card.scss
CHANGED
|
@@ -35,10 +35,12 @@
|
|
|
35
35
|
// re-flexed with utilities on each one.
|
|
36
36
|
// The header and footer share the card's own fill (a muted card stays muted to its top edge),
|
|
37
37
|
// and the header carries no rule of its own: Bootstrap's divider followed the card's border
|
|
38
|
-
// width, so only the elevated variant drew one.
|
|
38
|
+
// width, so only the elevated variant drew one. A brand that fills its headers sets
|
|
39
|
+
// --wui-card-header-bg in its token file, and one that draws a line under every header sets
|
|
40
|
+
// --wui-card-header-divider to its width (such as 1px).
|
|
39
41
|
.card-header {
|
|
40
|
-
--bs-card-cap-bg: transparent;
|
|
41
|
-
border-bottom:
|
|
42
|
+
--bs-card-cap-bg: var(--wui-card-header-bg, transparent);
|
|
43
|
+
border-bottom: var(--wui-card-header-divider, 0px) solid var(--color-border-subtle);
|
|
42
44
|
display: flex;
|
|
43
45
|
align-items: center;
|
|
44
46
|
justify-content: space-between;
|
|
@@ -139,9 +141,17 @@
|
|
|
139
141
|
}
|
|
140
142
|
// With no rule under the header, its bottom padding alone separates the title from the body;
|
|
141
143
|
// the body's own top padding on top of it left a double gap. After the scale, so every
|
|
142
|
-
// padding step keeps the single gap.
|
|
144
|
+
// padding step keeps the single gap. A header divider puts the gap back below the line: any divider
|
|
145
|
+
// width scaled up and capped at the card inset gives the full inset, and no divider gives 0.
|
|
146
|
+
.card {
|
|
147
|
+
--wui-card-gap-below-divider: min(calc(var(--wui-card-header-divider, 0px) * 1000), var(--wui-card-pad));
|
|
148
|
+
}
|
|
143
149
|
.card > .card-header + .card-body {
|
|
144
|
-
padding-top:
|
|
150
|
+
padding-top: var(--wui-card-gap-below-divider);
|
|
151
|
+
}
|
|
152
|
+
// A card with no body (a list or a timeline straight after the header) takes the same gap.
|
|
153
|
+
.card > .card-header + :not(.card-body, .card-footer) {
|
|
154
|
+
margin-top: var(--wui-card-gap-below-divider);
|
|
145
155
|
}
|
|
146
156
|
|
|
147
157
|
// ── Constrained width ── (`maxWidth`): caps + centres a standalone card. Cards
|