@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webority/theme",
3
- "version": "0.129.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.129.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.129.0 from its token source. Do not edit; run webority brand --library.
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;
@@ -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-secondary {
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 — the success counterpart of .btn-secondary. Dark success text on a
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-secondary {
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 — the destructive counterpart of .btn-secondary: a soft red wash
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-secondary exactly — low-alpha
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-secondary. A product sets another label
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-secondary-danger {
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
- // Light button: a raised surface in both themes. Bootstrap compiles btn-light from $light, so it
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-light {
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-outline-light {
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-secondary.is-loading:disabled,
305
- .btn-secondary.is-loading.disabled,
306
- .btn-secondary-danger.is-loading:disabled,
307
- .btn-secondary-danger.is-loading.disabled,
308
- .btn-ghost.is-loading:disabled,
309
- .btn-ghost.is-loading.disabled,
310
- .btn-text.is-loading:disabled,
311
- .btn-text.is-loading.disabled,
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-outline-light.is-loading:disabled,
321
- .btn-outline-light.is-loading.disabled {
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-text {
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-text {
837
+ .btn.btn-link-primary {
838
838
  --bs-btn-padding-x: 0;
839
839
  }
840
- .btn.btn-text,
841
- .btn.btn-text:hover,
842
- .btn.btn-text:active,
843
- .btn.btn-text:focus-visible {
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-text::before {
846
+ .btn.btn-link-primary::before {
847
847
  display: none;
848
848
  }
849
- .btn.btn-text:hover:not(:disabled) {
849
+ .btn.btn-link-primary:hover:not(:disabled) {
850
850
  transform: none;
851
851
  }
852
- .btn.btn-text:focus-visible {
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-text {
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-text.btn-sm {
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-text.btn-lg {
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-text svg {
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-text.btn-text:disabled,
879
- .btn.btn-text.btn-text.disabled {
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);
@@ -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-light btn-pill-sm">Learn more</a>
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-dark {
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);
@@ -1,4 +1,4 @@
1
- // Generated by @webority/tokens 0.129.0 from its token source. Do not edit; run webority brand --library.
1
+ // Generated by @webority/tokens 0.130.0 from its token source. Do not edit; run webority brand --library.
2
2
 
3
3
  :root {
4
4
  --wui-primary: #4F46E5;
@@ -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-secondary`, `.text-secondary`, `.bg-secondary` mean "quiet /
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.
@@ -46,7 +46,7 @@
46
46
  .wui-split-button .btn:focus-visible {
47
47
  z-index: 2;
48
48
  }
49
- .wui-split-button > .btn.btn-text:first-child {
49
+ .wui-split-button > .btn.btn-link-primary:first-child {
50
50
  padding-inline-end: 0.5rem;
51
51
  }
52
52
 
@@ -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.tone-dark {
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;
@@ -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(.tone-dark):not(.tone-primary):not(.tone-success):not(.tone-danger):not(.tone-warning) .wui-kbd {
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);
@@ -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-secondary, .btn-outline-primary, .btn-ghost, .btn-text) {
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-secondary {
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
  }