@webority/theme 0.9.19 → 0.9.21

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.19",
3
+ "version": "0.9.21",
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": {
@@ -509,6 +509,10 @@
509
509
  z-index: var(--wui-z-menu);
510
510
  width: 312px;
511
511
  max-width: calc(100vw - 16px);
512
+ // JS (anchorOverlay's clampHeight) sets an inline max-height when the viewport can't fit the
513
+ // whole grid above or below the trigger: overflow-y is the scroll fallback that makes the
514
+ // clamped remainder reachable instead of silently clipped.
515
+ overflow-y: auto;
512
516
  padding: 18px;
513
517
  background: var(--color-surface);
514
518
  border: 1px solid var(--color-border);
@@ -828,6 +832,9 @@ button.datepicker-month:hover {
828
832
  z-index: var(--wui-z-menu);
829
833
  width: 620px;
830
834
  max-width: calc(100vw - 16px);
835
+ // See the matching note on .datepicker-pop: the scroll fallback for clampHeight's inline
836
+ // max-height.
837
+ overflow-y: auto;
831
838
  padding: 18px;
832
839
  background: var(--color-surface);
833
840
  border: 1px solid var(--color-border);
@@ -309,11 +309,23 @@
309
309
  line-height: 0;
310
310
  margin-bottom: 22px;
311
311
  }
312
+ // A caller-supplied illustration occupies the SAME footprint as the built-in badge, whatever
313
+ // the source file measures — the box is the theme's, the artwork is the caller's. Without
314
+ // this a 1024px export blows the dialog open and a 48px one sits lost in the whitespace, so
315
+ // "use your own image" would in practice mean "first go and resize it to ours". `contain`
316
+ // keeps a non-square source whole rather than cropping it.
317
+ .wui-confirm-icon img {
318
+ display: block;
319
+ width: 80px;
320
+ height: 80px;
321
+ object-fit: contain;
322
+ }
312
323
  // Icon size tracks the copy: a title+message dialog keeps the full 80px badge (set on
313
324
  // the element), but a lone title (no message) is one line and gets a smaller badge.
314
325
  // `.wui-confirm-msg` is a real element rendered only when a message exists, so `:has()`
315
326
  // is reliable here; CSS width/height override the SVG's own width/height attributes.
316
- .wui-confirm-content:not(:has(.wui-confirm-msg)) .wui-confirm-icon svg {
327
+ .wui-confirm-content:not(:has(.wui-confirm-msg)) .wui-confirm-icon svg,
328
+ .wui-confirm-content:not(:has(.wui-confirm-msg)) .wui-confirm-icon img {
317
329
  width: 56px;
318
330
  height: 56px;
319
331
  }
@@ -549,21 +549,17 @@
549
549
  display: inline-grid;
550
550
  place-items: center;
551
551
  transform: translateY(-50%);
552
- border: 1px solid var(--color-border);
552
+ border: 0;
553
553
  border-radius: 999px;
554
554
  background: var(--color-surface);
555
555
  color: var(--color-text-muted);
556
556
  cursor: pointer;
557
557
  transition:
558
558
  left 0.2s var(--wui-ease-ui),
559
- background 0.12s ease,
560
- color 0.12s ease,
561
- box-shadow 0.12s ease;
559
+ color 0.12s ease;
562
560
  }
563
561
  .app-sidebar-toggle:hover {
564
- background: var(--color-bg-muted);
565
- color: var(--color-text);
566
- box-shadow: var(--shadow-sm);
562
+ color: var(--color-primary);
567
563
  }
568
564
  .app-sidebar-toggle:focus-visible {
569
565
  outline: 2px solid var(--color-primary);
@@ -576,14 +572,13 @@
576
572
  // `block` kills the inline-block baseline gap (.wui-icon is inline-block), which otherwise
577
573
  // pushes the glyph a hair down in the round button — so the grid can centre it exactly.
578
574
  display: block;
579
- // Optical centring nudge for the chevron in the round button.
580
- // (translateX is in the icon's own frame, so after the collapsed 180° rotation the same value
581
- // mirrors on screen — keeping the flipped chevron optically centred too.)
582
- transform: translateX(-2px);
583
575
  transition: transform 0.2s ease;
584
576
  }
577
+ // The double-chevron glyph is a left/right MIRROR pair, not a point-symmetric shape, so a
578
+ // 180deg rotate (used for the old single-chevron glyph) would flip it upside down too;
579
+ // scaleX(-1) mirrors only the axis that differs between the collapse and expand glyphs.
585
580
  .app-shell.collapsed .app-sidebar-toggle > * {
586
- transform: rotate(180deg) translateX(2px);
581
+ transform: scaleX(-1);
587
582
  }
588
583
 
589
584
  .app-main {
@@ -604,16 +599,15 @@
604
599
  min-height: 72px;
605
600
  padding: 12px 28px;
606
601
  background: var(--color-surface);
607
- // Transparent rather than absent, so gaining the divider on scroll doesn't
608
- // shift the layout by a pixel.
602
+ // Reserved rather than absent, so a consumer colouring the divider on
603
+ // `.app-topbar.scrolled` doesn't shift the layout by a pixel. The library
604
+ // adds that class on scroll but deliberately paints nothing: how heavy the
605
+ // topbar reads once the page moves is a per-surface art-direction call.
609
606
  border-bottom: 1px solid transparent;
610
607
  transition:
611
608
  border-color 0.2s ease,
612
609
  box-shadow 0.2s ease;
613
610
  }
614
- .app-topbar.scrolled {
615
- border-bottom-color: var(--color-border);
616
- }
617
611
  // Two groups: the leading one shrinks and ellipsises a long page title, the
618
612
  // trailing one is pinned so actions are never pushed off-screen.
619
613
  .app-topbar-start {