@webority/theme 0.9.14 → 0.9.15

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.9.14",
3
+ "version": "0.9.15",
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": {
@@ -692,35 +692,6 @@ button.wui-input-leading:focus-visible {
692
692
  transform: translateY(-1px);
693
693
  }
694
694
 
695
- // ---- Loading shimmer skeleton ----------------------------------------
696
- .shimmer {
697
- position: relative;
698
- overflow: hidden;
699
- background: var(--wui-bg-muted);
700
- }
701
- .shimmer::after {
702
- content: "";
703
- position: absolute;
704
- inset: 0;
705
- background: linear-gradient(90deg,
706
- transparent,
707
- rgba(255, 255, 255, 0.5),
708
- transparent);
709
- transform: translateX(-100%);
710
- animation: shimmer 1.4s infinite;
711
- }
712
- // Dark mode shimmer — lightens the gradient for visibility on darker surfaces.
713
- :root[data-theme="dark"] .shimmer::after {
714
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.08), transparent);
715
- }
716
-
717
- // ---- Keyframes -------------------------------------------------------
718
-
719
- @keyframes shimmer {
720
- 0% { transform: translateX(-100%); }
721
- 100% { transform: translateX(100%); }
722
- }
723
-
724
695
  // ---- Native scrollbars (document + opt-in) --------------------------
725
696
  // Scoped to html/body and `.wui-scroll` — never `*`. Global
726
697
  // `*` restyled every nested scroller (modals, tiny panels) and fought
@@ -805,9 +776,6 @@ html.is-scrolling body::-webkit-scrollbar-thumb {
805
776
  .press-feedback {
806
777
  transition: none;
807
778
  }
808
- .shimmer::after {
809
- animation: none;
810
- }
811
779
  // Hover animation options: hide the moving layer and drop lift/glow so no
812
780
  // option animates, regardless of which .btn-anim-* is applied.
813
781
  .btn:not(.btn-icon):not(.u-action)::before {
@@ -716,6 +716,15 @@ textarea.form-control.autosize {
716
716
  outline: 2px solid var(--color-primary);
717
717
  outline-offset: 2px;
718
718
  }
719
+ .pw-toggle .pw-eye-off {
720
+ display: none;
721
+ }
722
+ .pw-toggle.pw-revealed .pw-eye {
723
+ display: none;
724
+ }
725
+ .pw-toggle.pw-revealed .pw-eye-off {
726
+ display: block;
727
+ }
719
728
 
720
729
  // Clearable ✕ — a trailing reset button, placed inside .input-wrap / .input-icon. It only
721
730
  // renders while the field has a value; .has-clear reserves the room so text never sits under it.
@@ -678,16 +678,34 @@ button.step:focus-visible .step-circle {
678
678
  .repeater-row {
679
679
  position: relative;
680
680
  display: flex;
681
+ // When present, the row-label line is the full-width FIRST line (a header band) and the
682
+ // fields wrap to the line beneath it. The markup renders that band only when the row is
683
+ // labelled or removable (see .repeater-row-label) — a removable row's empty band reserves
684
+ // the gap that keeps the fields clear of the absolute remove control. A row that is neither
685
+ // has no band and stays compact; there is no overlap to avoid, since the control is absent too.
686
+ flex-wrap: wrap;
681
687
  align-items: flex-start;
682
688
  gap: 12px;
683
- // Extra top room so the remove control (absolute, top-right) sits in a header
684
- // band clear of the fields — the fields start below it and still run full width.
685
- padding: 28px 16px 16px;
689
+ padding: 14px 16px 16px;
686
690
  border: 1px solid var(--color-border);
687
691
  border-radius: var(--radius-lg);
688
692
  corner-shape: squircle;
689
693
  background: var(--color-surface);
690
694
  }
695
+ // The row's header band. Rendered only when the row is labelled (shows the label) or removable
696
+ // (an empty band reserving the gap that keeps the fields off the remove control); a row that is
697
+ // neither omits it and stays compact. Full-width so the fields wrap below it; min-height + the row
698
+ // gap clear the 36px remove disc; the right padding keeps any label text clear of the top-right
699
+ // control. Set the text via React rowLabel / Razor <app-repeater-row label="…">.
700
+ .repeater-row-label {
701
+ flex: 0 0 100%;
702
+ min-height: 24px;
703
+ padding-right: 44px;
704
+ font-size: 12px;
705
+ font-weight: 600;
706
+ line-height: 1.4;
707
+ color: var(--color-text-muted);
708
+ }
691
709
  .repeater-index {
692
710
  flex: none;
693
711
  width: 22px;
@@ -708,12 +726,13 @@ button.step:focus-visible .step-circle {
708
726
  min-width: 0;
709
727
  }
710
728
  .repeater-remove {
711
- // Pulled out of the row's flex flow and parked in the top-right corner, level
712
- // with the field labels, so it never steals horizontal room from the fields —
713
- // the last field can now run to the row's right edge instead of stopping short.
729
+ // Pulled out of the row's flex flow and parked in the top-right corner of the header
730
+ // band, so it never steals horizontal room from the fields — the last field can run to
731
+ // the row's right edge instead of stopping short. Sits a little below the top edge so it
732
+ // reads as part of the band rather than pinned to the corner.
714
733
  position: absolute;
715
- top: 6px;
716
- right: 8px;
734
+ top: 12px;
735
+ right: 12px;
717
736
  }
718
737
  .repeater-add {
719
738
  align-self: flex-start;