@webority/theme 0.95.0 → 0.96.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority/theme",
3
- "version": "0.95.0",
3
+ "version": "0.96.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": {
@@ -601,8 +601,6 @@
601
601
  // The thin thumb matches the shared rail (--wui-scrollbar*), like .wui-scroll.
602
602
  max-height: calc(100vh - 5rem);
603
603
  overflow-y: auto;
604
- scrollbar-width: thin;
605
- scrollbar-color: var(--wui-scrollbar) transparent;
606
604
  }
607
605
  .dropdown-menu::-webkit-scrollbar {
608
606
  width: 8px;
@@ -620,6 +618,13 @@
620
618
  background-color: var(--wui-scrollbar-hover);
621
619
  background-clip: padding-box;
622
620
  }
621
+ // Chrome 121+ ignores the WebKit scrollbar rules once a standard scrollbar property is set, and draws arrow buttons; the standard properties are for browsers without the WebKit rules.
622
+ @supports not selector(::-webkit-scrollbar) {
623
+ .dropdown-menu {
624
+ scrollbar-width: thin;
625
+ scrollbar-color: var(--wui-scrollbar) transparent;
626
+ }
627
+ }
623
628
 
624
629
  .dropdown-item {
625
630
  display: flex;
@@ -1040,8 +1045,6 @@ button.wui-input-leading:focus-visible {
1040
1045
  html,
1041
1046
  body {
1042
1047
  scrollbar-gutter: stable;
1043
- scrollbar-width: thin;
1044
- scrollbar-color: var(--wui-scrollbar) transparent;
1045
1048
  }
1046
1049
  html::-webkit-scrollbar,
1047
1050
  body::-webkit-scrollbar {
@@ -1077,14 +1080,21 @@ body::-webkit-scrollbar-corner {
1077
1080
  background: transparent;
1078
1081
  }
1079
1082
 
1080
- html.is-scrolling,
1081
- html.is-scrolling body {
1082
- scrollbar-color: var(--wui-scrollbar-hover) transparent;
1083
- }
1084
1083
  html.is-scrolling::-webkit-scrollbar-thumb,
1085
1084
  html.is-scrolling body::-webkit-scrollbar-thumb {
1086
1085
  background-color: var(--wui-scrollbar-hover);
1087
1086
  }
1087
+ @supports not selector(::-webkit-scrollbar) {
1088
+ html,
1089
+ body {
1090
+ scrollbar-width: thin;
1091
+ scrollbar-color: var(--wui-scrollbar) transparent;
1092
+ }
1093
+ html.is-scrolling,
1094
+ html.is-scrolling body {
1095
+ scrollbar-color: var(--wui-scrollbar-hover) transparent;
1096
+ }
1097
+ }
1088
1098
 
1089
1099
  // Hide a scrollbar (marquee / horizontal carousels).
1090
1100
  .scrollbar-hide {
package/scss/_tokens.scss CHANGED
@@ -35,13 +35,12 @@
35
35
  --wui-text-1: #252F4A;
36
36
  /// meaning: Secondary text for descriptions, sub-labels and muted copy.
37
37
  --wui-text-2: #4B5675;
38
- // Tertiary text — hints, captions, labels, timestamps, placeholders. Was #78829D,
39
- // which measured 3.5:1 on white and 3.1:1 on a tinted panel: below WCAG AA (4.5:1)
40
- // everywhere it was used. A tier meant for readable-but-secondary copy has to BE
41
- // readable, so it darkens to 4.55:1 on every neutral surface. It stays clearly
42
- // lighter than --wui-text-2; --wui-text-4/5 remain for genuinely decorative use.
38
+ // Tertiary text, for hints, captions, labels, timestamps and placeholders. It measures 4.97:1 on
39
+ // the library page background and 4.76:1 on a lightly tinted brand page (#eef1f7), so it stays
40
+ // above the 4.5:1 AA floor on every neutral surface. It stays clearly lighter than --wui-text-2;
41
+ // --wui-text-4/5 remain for genuinely decorative use.
43
42
  /// meaning: Tertiary text for hints, captions, labels, timestamps and placeholders.
44
- --wui-text-3: #687088;
43
+ --wui-text-3: #626A82;
45
44
  /// meaning: Decorative faint ink, not for text a person must read.
46
45
  --wui-text-4: #99A1B7;
47
46
  /// meaning: Faintest ink, for decorative marks.
@@ -184,7 +184,7 @@ $link-color: $wui-primary-ink !default;
184
184
  // $body-bg left at Bootstrap's $white — do not restate pure defaults here.
185
185
  $body-color: #252F4A; // text-1 from locked palette
186
186
  $body-secondary-color: #4B5675;
187
- $body-tertiary-color: #687088; // AA on white (matches --wui-text-3); #78829D was only 3.5:1
187
+ $body-tertiary-color: #626A82; // matches --wui-text-3, AA on every neutral surface
188
188
  $body-secondary-bg: #F9FBFC;
189
189
  $body-tertiary-bg: #F5F6FA;
190
190
 
@@ -15,18 +15,12 @@
15
15
  // Do NOT put layout on backdropClassName — that targets a sibling, not
16
16
  // .modal.
17
17
  .modal-backdrop.wui-modal-dim {
18
- // Frost the page behind the dialog — the blur is the star, so the dim is kept SOFT (a heavy
19
- // scrim would flatten the blur into a muddy grey). A moderate dim over a STRONG blur reads as
20
- // clean frosted glass; the modal is still clearly the one live surface. The dialog sits in
21
- // `.modal` (a higher z-index sibling), so it is never blurred.
22
- //
23
- // Full strength is load-bearing: Bootstrap composites the whole backdrop element at
24
- // `--bs-backdrop-opacity` (0.5 by default), which HALVES both the blur and the dim into a
25
- // weak, patchy wash — the bug this fixes. Pin the opacity to 1 and carry the dim entirely in
26
- // `background`, so the frost renders at its true strength. (The fade-in still animates 0 → 1.)
18
+ // Opacity is pinned to 1 because Bootstrap's 0.5 would halve the dim. The strong scrim guarantees
19
+ // separation in every browser, including over embedded pages Chrome cannot blur; the blur on top
20
+ // is decoration.
27
21
  --bs-backdrop-opacity: 1;
28
22
  opacity: 1;
29
- background: color-mix(in srgb, var(--color-scrim) 85%, transparent);
23
+ background: var(--color-scrim-strong);
30
24
  z-index: var(--wui-z-modal-backdrop);
31
25
  // A little saturation boost is what makes the frost read as glass rather than fog — the
32
26
  // colours behind bloom softly through the blur instead of greying out.
@@ -32,6 +32,12 @@
32
32
  background: transparent;
33
33
  color: inherit;
34
34
  }
35
+ // The default tooltip sits on the plain surface colour, so its chip takes the plain chip look.
36
+ .tooltip.wui-tooltip:not(.tone-dark):not(.tone-primary):not(.tone-success):not(.tone-danger):not(.tone-warning) .wui-kbd {
37
+ border-color: var(--color-border);
38
+ background: var(--color-bg-muted);
39
+ color: var(--color-text);
40
+ }
35
41
  .btn > .wui-kbd {
36
42
  margin-left: 8px;
37
43
  }
@@ -275,10 +275,8 @@
275
275
 
276
276
  // Disabled — deliberately NOT opacity, and deliberately after the tones.
277
277
  //
278
- // `opacity: .55` fades the whole chip, which scales the LABEL's contrast down with it:
279
- // #687088 on #F5F6FA at .55 alpha resolves to 2.08:1, less than half the 4.5:1 AA floor,
280
- // and axe reports it as a serious violation on both surfaces. Explicit muted tokens read
281
- // as the same state and stay legible at 4.56:1.
278
+ // `opacity: .55` fades the whole chip, label included, so a faded label can fall under the
279
+ // 4.5:1 AA floor. Explicit muted tokens read as the same state and keep the label legible.
282
280
  //
283
281
  // It sits after the tone block on purpose. `.chip.is-disabled` and `.chip.primary` have
284
282
  // equal specificity, so source order decides — declared before them, a disabled primary