@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.
@@ -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-strong);
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-strong);
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;
@@ -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-strong);
36
+ border-color: var(--color-field-border-hover);
37
37
  }
38
38
  .wui-rich-text-shell:focus-within {
39
39
  background: var(--color-surface);
@@ -547,12 +547,25 @@
547
547
  .app-nav-sub.expanded {
548
548
  grid-template-rows: 1fr;
549
549
  }
550
- // Child link indented under the parent label (icon slot + gap), smaller, no icon.
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 —
@@ -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
- // success + danger use the DEEPENED -strong fills, not the mid tones: when showLabel is set the
614
- // bar carries Bootstrap's WHITE label text, and white on the mid --wui-success (#17C653) /
615
- // --wui-danger (#F8285A) fails AA (2.78:1 / 3.86:1). The -strong fills clear it (both ~5.8:1),
616
- // the same trick btn-danger uses. info/warning/neutral stay on their mid tones (info/neutral
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 bright fills: the deep fills sink into the dark track (about 2:1). The label
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 Bootstrap's ink-dark glyph; the token whitens it on a dark page.
1010
- .alert .btn-close {
1011
- filter: var(--color-close-filter);
1012
- }
1013
- // Centre the dismiss × vertically rather than pinning it to the top corner.
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
- padding: 12px 16px;
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
  // ============================================================================