@webority/theme 0.36.0 → 0.38.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/dist/purge-safelist.json +1 -0
- package/dist/webority-theme.css +1 -1
- package/package.json +5 -7
- package/scss/_components.scss +1 -1
- package/scss/_tokens.scss +18 -6
- package/scss/_variables.scss +2 -0
- package/scss/_wui-aliases.scss +33 -17
- package/scss/wui/_choice.scss +8 -8
- package/scss/wui/_controls.scss +14 -11
- package/scss/wui/_data.scss +39 -0
- package/scss/wui/_flow.scss +79 -25
- package/scss/wui/_media.scss +5 -5
- package/scss/wui/_rich-text.scss +2 -2
- package/scss/wui/_shell.scss +16 -3
- package/scss/wui/_utilities.scss +49 -14
package/scss/wui/_media.scss
CHANGED
|
@@ -537,7 +537,7 @@
|
|
|
537
537
|
width: 100%;
|
|
538
538
|
border-radius: var(--radius-lg);
|
|
539
539
|
corner-shape: squircle;
|
|
540
|
-
border: 1px solid var(--color-border);
|
|
540
|
+
border: 1px solid var(--color-field-border);
|
|
541
541
|
// Match AppInput: muted resting fill, lifts to a clean surface on focus.
|
|
542
542
|
background: var(--color-bg-muted);
|
|
543
543
|
overflow: hidden;
|
|
@@ -548,7 +548,7 @@
|
|
|
548
548
|
}
|
|
549
549
|
.file-input:hover:not(:focus-within) {
|
|
550
550
|
background: var(--color-bg-muted);
|
|
551
|
-
border-color: var(--color-border-
|
|
551
|
+
border-color: var(--color-field-border-hover);
|
|
552
552
|
}
|
|
553
553
|
.file-input:focus-within {
|
|
554
554
|
background: var(--color-surface);
|
|
@@ -600,14 +600,14 @@
|
|
|
600
600
|
// Match AppInput: muted resting fill + resting border (dashed kept as the dropzone
|
|
601
601
|
// affordance), border-strong on hover, primary border + surface lift on focus/drag.
|
|
602
602
|
background: var(--color-bg-muted);
|
|
603
|
-
border: 1px dashed var(--color-border);
|
|
603
|
+
border: 1px dashed var(--color-field-border);
|
|
604
604
|
transition:
|
|
605
605
|
border-color 0.15s ease,
|
|
606
606
|
background-color 0.15s ease;
|
|
607
607
|
}
|
|
608
608
|
// Hover mirrors AppInput hover — border-strong, fill unchanged.
|
|
609
609
|
.file-input.file-input-tall:hover:not(:focus-within):not(.dragging) {
|
|
610
|
-
border-color: var(--color-border-
|
|
610
|
+
border-color: var(--color-field-border-hover);
|
|
611
611
|
background: var(--color-bg-muted);
|
|
612
612
|
}
|
|
613
613
|
// Focus and drag-over mirror AppInput focus — soft primary border, lift onto a clean surface.
|
|
@@ -877,7 +877,7 @@
|
|
|
877
877
|
}
|
|
878
878
|
.file-input.file-input-tall[aria-disabled="true"]:hover:not(:focus-within):not(.dragging) {
|
|
879
879
|
background: var(--color-bg-muted);
|
|
880
|
-
border-color: var(--color-border);
|
|
880
|
+
border-color: var(--color-field-border);
|
|
881
881
|
}
|
|
882
882
|
.wui-file-busy {
|
|
883
883
|
position: absolute;
|
package/scss/wui/_rich-text.scss
CHANGED
|
@@ -21,7 +21,7 @@ wui-rich-text:not(:defined) > textarea {
|
|
|
21
21
|
display: flex;
|
|
22
22
|
flex-direction: column;
|
|
23
23
|
width: 100%;
|
|
24
|
-
border: 1px solid var(--color-border);
|
|
24
|
+
border: 1px solid var(--color-field-border);
|
|
25
25
|
border-radius: var(--wui-field-radius);
|
|
26
26
|
background: var(--color-field-bg);
|
|
27
27
|
color: var(--color-text);
|
|
@@ -33,7 +33,7 @@ wui-rich-text:not(:defined) > textarea {
|
|
|
33
33
|
background-color 0.12s;
|
|
34
34
|
}
|
|
35
35
|
.wui-rich-text-shell:hover {
|
|
36
|
-
border-color: var(--color-border-
|
|
36
|
+
border-color: var(--color-field-border-hover);
|
|
37
37
|
}
|
|
38
38
|
.wui-rich-text-shell:focus-within {
|
|
39
39
|
background: var(--color-surface);
|
package/scss/wui/_shell.scss
CHANGED
|
@@ -547,12 +547,25 @@
|
|
|
547
547
|
.app-nav-sub.expanded {
|
|
548
548
|
grid-template-rows: 1fr;
|
|
549
549
|
}
|
|
550
|
-
// Child
|
|
551
|
-
.app-nav-subitem
|
|
550
|
+
// Child row indented under the parent label (icon slot + gap), smaller, no icon. A nested
|
|
551
|
+
// group's toggle is a sub-item too (`.app-nav-item.app-nav-subitem` outranks the group button's
|
|
552
|
+
// `font: inherit`), and each level below the first adds a 16px step through --wui-nav-depth
|
|
553
|
+
// (set on the row from depth 2), so a nested group's children sit visibly under it.
|
|
554
|
+
.app-nav-item.app-nav-subitem {
|
|
552
555
|
min-height: 38px;
|
|
553
|
-
padding-left: 46px;
|
|
556
|
+
padding-left: calc(46px + (var(--wui-nav-depth, 1) - 1) * 16px);
|
|
554
557
|
font-size: 13px;
|
|
555
558
|
}
|
|
559
|
+
// A sub-item label wraps to two lines before it is cut, so a long child label stays readable.
|
|
560
|
+
// Top-level labels keep the single-line ellipsis.
|
|
561
|
+
.app-nav-subitem .app-nav-text {
|
|
562
|
+
display: -webkit-box;
|
|
563
|
+
-webkit-box-orient: vertical;
|
|
564
|
+
-webkit-line-clamp: 2;
|
|
565
|
+
line-clamp: 2;
|
|
566
|
+
white-space: normal;
|
|
567
|
+
overflow-wrap: anywhere;
|
|
568
|
+
}
|
|
556
569
|
|
|
557
570
|
// ── Collapsed rail: label tooltip ────────────────────────────────────────────
|
|
558
571
|
// The rail hides labels, so surface each on hover/focus as a chip to the right —
|
package/scss/wui/_utilities.scss
CHANGED
|
@@ -610,23 +610,22 @@
|
|
|
610
610
|
// Determinate progress-bar fill tones (AppProgress / AppMeter / <app-progress>) — the fill sits
|
|
611
611
|
// in Bootstrap's .progress track; only the bar colour is brand-toned.
|
|
612
612
|
//
|
|
613
|
-
//
|
|
614
|
-
//
|
|
615
|
-
//
|
|
616
|
-
//
|
|
617
|
-
// pass with white; warning is not shown with a white label).
|
|
613
|
+
// Every tone fills with its -strong alias, so the label always sits on a fill chosen to carry it.
|
|
614
|
+
// In light mode white label text fails AA on the mid --wui-success (#04B440) / --wui-danger
|
|
615
|
+
// (#E82646) (2.76:1 / 4.38:1), so those two use the deepened fills (both ~5.8:1), the same trick
|
|
616
|
+
// btn-danger uses; info and warning -strong equal their mid tones there.
|
|
618
617
|
//
|
|
619
618
|
// They read the --color-*-strong aliases, not --wui-*-strong, because dark mode remaps the
|
|
620
|
-
// aliases to the
|
|
619
|
+
// aliases to the lifted fills: the deep fills sink into the dark track (about 2:1). The label
|
|
621
620
|
// flips to a dark ink there (--color-progress-label), which clears AA on all five dark fills.
|
|
622
621
|
.wui-progress-info {
|
|
623
|
-
background-color: var(--color-info);
|
|
622
|
+
background-color: var(--color-info-strong);
|
|
624
623
|
}
|
|
625
624
|
.wui-progress-success {
|
|
626
625
|
background-color: var(--color-success-strong);
|
|
627
626
|
}
|
|
628
627
|
.wui-progress-warning {
|
|
629
|
-
background-color: var(--color-warning);
|
|
628
|
+
background-color: var(--color-warning-strong);
|
|
630
629
|
}
|
|
631
630
|
.wui-progress-danger {
|
|
632
631
|
background-color: var(--color-danger-strong);
|
|
@@ -1006,15 +1005,51 @@
|
|
|
1006
1005
|
.alert-accent.alert-dismissible {
|
|
1007
1006
|
padding-right: 53px;
|
|
1008
1007
|
}
|
|
1009
|
-
// The dismiss × is
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
//
|
|
1008
|
+
// The dismiss × is a 32px rounded square like the modal close, centred vertically rather
|
|
1009
|
+
// than pinned to the top corner. Its 8px glyph takes the variant's text colour: Bootstrap's
|
|
1010
|
+
// glyph is a fixed-colour background image, so the button drops it and paints the same
|
|
1011
|
+
// shape as a mask on ::before, filled with the colour. Hover tints the square with a
|
|
1012
|
+
// transparent wash of the variant. Both colours come from tokens the dark theme remaps, so
|
|
1013
|
+
// the close filter is not needed here. A variant without its own tokens falls back to ink.
|
|
1014
1014
|
.alert-dismissible .btn-close {
|
|
1015
1015
|
top: 50%;
|
|
1016
|
-
|
|
1016
|
+
right: 10px;
|
|
1017
|
+
display: grid;
|
|
1018
|
+
place-items: center;
|
|
1019
|
+
width: 32px;
|
|
1020
|
+
height: 32px;
|
|
1021
|
+
padding: 0;
|
|
1022
|
+
background-image: none;
|
|
1023
|
+
border-radius: var(--radius-lg);
|
|
1024
|
+
corner-shape: squircle;
|
|
1025
|
+
opacity: 1;
|
|
1026
|
+
filter: none;
|
|
1017
1027
|
transform: translateY(-50%);
|
|
1028
|
+
transition: background-color 180ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
1029
|
+
}
|
|
1030
|
+
.alert-dismissible .btn-close::before {
|
|
1031
|
+
content: "";
|
|
1032
|
+
width: 8px;
|
|
1033
|
+
height: 8px;
|
|
1034
|
+
background-color: var(--alert-text, var(--color-text-muted));
|
|
1035
|
+
mask: var(--bs-btn-close-bg) center / contain no-repeat;
|
|
1036
|
+
}
|
|
1037
|
+
.alert-dismissible .btn-close:hover {
|
|
1038
|
+
background-color: color-mix(in srgb, var(--alert-accent, var(--color-text-muted)) 8%, transparent);
|
|
1039
|
+
}
|
|
1040
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1041
|
+
.alert-dismissible .btn-close {
|
|
1042
|
+
transition: none;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
// Bootstrap's .btn-close paints a box-shadow ring on :focus (fires on mouse click too).
|
|
1046
|
+
// Drop it; keep a keyboard-only outline so dismissal stays reachable without a mouse.
|
|
1047
|
+
.alert .btn-close:focus {
|
|
1048
|
+
box-shadow: none;
|
|
1049
|
+
}
|
|
1050
|
+
.alert .btn-close:focus-visible {
|
|
1051
|
+
outline: 2px solid var(--color-primary);
|
|
1052
|
+
outline-offset: 2px;
|
|
1018
1053
|
}
|
|
1019
1054
|
|
|
1020
1055
|
// ============================================================================
|