@wwtdev/bsds-css 3.0.14 → 3.0.16

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.
@@ -5188,7 +5188,7 @@ a.bs-text-button {
5188
5188
  @media (min-width: 1166px) {
5189
5189
  .bs-vertical-nav {
5190
5190
  opacity: 1;
5191
- padding: 1rem;
5191
+ padding: 1rem 0.5rem;
5192
5192
  right: auto;
5193
5193
  visibility: visible;
5194
5194
  pointer-events: auto;
@@ -5204,6 +5204,13 @@ a.bs-text-button {
5204
5204
  width: var(--bs-vertical-nav-narrow-width);
5205
5205
  }
5206
5206
 
5207
+ /* Collapsible variant keeps 1rem inline gutter in all states (collapsed and click-expanded),
5208
+ unlike wide/narrow which use 0.5rem. Targeting data-collapsible (not data-collapsed) so
5209
+ the rule also applies when the toggle is click-expanded. */
5210
+ .bs-vertical-nav:where([data-collapsible="true"]) {
5211
+ padding-inline: 1rem;
5212
+ }
5213
+
5207
5214
  .bs-vertical-nav:where([data-collapsed="true"]) {
5208
5215
  width: var(--bs-vertical-nav-collapsed-width);
5209
5216
  }
@@ -5297,8 +5304,8 @@ a.bs-text-button {
5297
5304
  }
5298
5305
  @media (min-width: 1166px) {
5299
5306
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle) {
5300
- /* nav width - nav left padding - nav right padding */
5301
- width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem);
5307
+ /* nav width - nav left padding - nav right padding (0.5rem each for wide) */
5308
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
5302
5309
  }
5303
5310
 
5304
5311
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle span:first-child) {
@@ -5306,7 +5313,7 @@ a.bs-text-button {
5306
5313
  text-align: start;
5307
5314
  text-overflow: ellipsis;
5308
5315
  /* nav width - nav left padding - nav right padding - link left padding - link right padding - caret width */
5309
- width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem - 0.75rem);
5316
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 0.75rem);
5310
5317
  }
5311
5318
  }
5312
5319
  .bs-vertical-nav :where(.bs-vertical-nav-section-toggle-caret) {
@@ -5324,7 +5331,7 @@ a.bs-text-button {
5324
5331
  .bs-vertical-nav :where(ul) {
5325
5332
  display: flex;
5326
5333
  flex-direction: column;
5327
- gap: 0;
5334
+ gap: 0.25rem;
5328
5335
  list-style: none;
5329
5336
  margin-top: 0;
5330
5337
  padding-left: 0;
@@ -5357,13 +5364,17 @@ a.bs-text-button {
5357
5364
  font-size: 0.875rem;
5358
5365
  min-height: 2.5rem; /* Fixed minimum height to prevent height changes */
5359
5366
  padding: 0.5rem 0.75rem; /* Explicit padding for consistency */
5360
- /* nav width - nav left padding - nav right padding */
5367
+ /* nav width - nav left padding - nav right padding (0.5rem each for wide) */
5368
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
5369
+ }
5370
+
5371
+ /* Collapsible click-expanded: wide width but with 1rem inline gutter, not 0.5rem */
5372
+ .bs-vertical-nav:where([data-collapsible="true"]) :where(ul li a) {
5361
5373
  width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem);
5362
5374
  }
5363
5375
 
5364
- /* Collapsed state width */
5376
+ /* Collapsible collapsed: narrow content-box inside 1rem gutter */
5365
5377
  .bs-vertical-nav:where([data-collapsed="true"]) :where(ul li a) {
5366
- /* collapsed width - nav left padding - nav right padding */
5367
5378
  width: calc(var(--bs-vertical-nav-collapsed-width) - 1rem - 1rem);
5368
5379
  }
5369
5380
 
@@ -5373,7 +5384,7 @@ a.bs-text-button {
5373
5384
  text-overflow: ellipsis;
5374
5385
  white-space: nowrap;
5375
5386
  /* nav width - nav left padding - nav right padding - link left padding - link right padding */
5376
- width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem);
5387
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem);
5377
5388
  }
5378
5389
 
5379
5390
  /* Text overflow - normal width - with icon */
@@ -5382,28 +5393,35 @@ a.bs-text-button {
5382
5393
  text-overflow: ellipsis;
5383
5394
  white-space: nowrap;
5384
5395
  /* nav width - nav left padding - nav right padding - link left padding - link right padding - icon width - icon gap */
5385
- width: calc(var(--bs-vertical-nav-width) - 1rem - 1rem - 0.75rem - 0.75rem - 1rem - 0.5rem);
5396
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 1rem - 0.5rem);
5386
5397
  }
5387
5398
 
5388
5399
  .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a) {
5389
5400
  flex-direction: column;
5390
5401
  font-size: 0.6875rem;
5391
- gap: 0.5rem; /* 8px - matches Figma */
5402
+ gap: 0.5rem;
5403
+ justify-content: center;
5392
5404
  line-height: 1.3;
5393
- padding: 0.5rem 0.75rem; /* 8px 12px - matches Figma */
5405
+ /* 68px covers 1- and 2-line labels at 11px/1.3 lh + 16px icon + 8px gap + 16px padding */
5406
+ min-height: 4.25rem;
5407
+ padding: 0.5rem 0.75rem;
5394
5408
  text-align: center;
5395
- /* nav width - nav left padding - nav right padding */
5396
- width: calc(var(--bs-vertical-nav-narrow-width) - 1rem - 1rem);
5409
+ /* narrow-width (72px) - 0.5rem left - 0.5rem right = 56px, matches span */
5410
+ width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
5397
5411
  }
5398
5412
 
5399
- /* Text overflow - narrow width */
5400
- .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a:not(:has(.bs-vertical-nav-link-icon)) span:first-child),
5401
- .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a:has(.bs-vertical-nav-link-icon) span:nth-child(2)) {
5413
+ /* Text overflow - narrow: multi-word wraps naturally at spaces ("Content Audit" → 2 lines).
5414
+ Single long words overflow their line and truncate with ellipsis ("Presentations" "Present...").
5415
+ Span is 52px, 4px narrower than the 56px link, centered via align-items: center on the link.
5416
+ That gives 2px of inner padding each side inside the active highlight (per UX).
5417
+ Specificity bumped to (0,2,2) to beat later generic `ul li a > span:last-child {width: auto}`. */
5418
+ .bs-vertical-nav[data-narrow="true"] :where(ul li a:not(:has(.bs-vertical-nav-link-icon))) span:first-child,
5419
+ .bs-vertical-nav[data-narrow="true"] :where(ul li a:has(.bs-vertical-nav-link-icon)) span:nth-child(2) {
5402
5420
  overflow: hidden;
5403
5421
  text-overflow: ellipsis;
5404
- white-space: nowrap;
5405
- /* nav width - nav left padding - nav right padding - link left padding */
5406
- width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
5422
+ white-space: normal;
5423
+ /* narrow-width - nav padding (0.5rem each) - 2px inner padding (0.125rem each) = 52px */
5424
+ width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem - 0.125rem - 0.125rem);
5407
5425
  }
5408
5426
  }
5409
5427
  .bs-vertical-nav-section:where([data-app-links="true"]) {
@@ -5427,6 +5445,14 @@ a.bs-text-button {
5427
5445
  font-weight: 600;
5428
5446
  transition: background-color 200ms ease-out;
5429
5447
  }
5448
+ /* Keyboard focus ring — matches house convention (accordion, filter-button, link, pagination) */
5449
+ .bs-vertical-nav :where(ul li a:focus-visible) {
5450
+ outline: 2px solid var(--bs-primary-base);
5451
+ outline-offset: 2px;
5452
+ }
5453
+ .bs-vertical-nav :where(ul li a:focus:not(:focus-visible)) {
5454
+ outline: none;
5455
+ }
5430
5456
  /* Icon sizing - mobile/default */
5431
5457
  .bs-vertical-nav :where(.bs-vertical-nav-link-icon) {
5432
5458
  height: 1rem;
@@ -5819,7 +5845,37 @@ a.bs-text-button {
5819
5845
  --bs-popover-width: 28.75rem; /* 460px */
5820
5846
  }
5821
5847
  .bs-flyout:where([data-size="lg"]) {
5822
- --bs-popover-width: 33.4375rem /* 535px */;
5848
+ --bs-popover-width: 33.4375rem; /* 535px */
5849
+ }
5850
+ /* -- RESIZING -- */
5851
+ .bs-flyout:where([data-resize]) {
5852
+ /* using clip instead of hidden, to allow resizer hover target
5853
+ to extend outside of the flyout bounds via overflow-clip-margin */
5854
+ overflow: clip;
5855
+ transform: translateX(var(--bs-flyout-resize-pushed, 0px));
5856
+ }
5857
+ .bs-flyout-resizer {
5858
+ cursor: col-resize;
5859
+ inset-block: 0;
5860
+ position: absolute;
5861
+ width: 10px;
5862
+ z-index: 1;
5863
+ /* prevents browser from trying to hijack touch interactions to handle on its own */
5864
+ touch-action: none;
5865
+ }
5866
+ /* right flyout */
5867
+ .bs-flyout:where([data-resize="right"]) {
5868
+ overflow-clip-margin: 5px;
5869
+ }
5870
+ .bs-flyout:where([data-resize="right"]) :where(.bs-flyout-resizer) {
5871
+ left: -5px;
5872
+ }
5873
+ /* left flyout - not using same as right flyout, to avoid overlapping potential scrollbar too much */
5874
+ .bs-flyout:where([data-resize="left"]) {
5875
+ overflow-clip-margin: 7px;
5876
+ }
5877
+ .bs-flyout:where([data-resize="left"]) :where(.bs-flyout-resizer) {
5878
+ right: -7px;
5823
5879
  }
5824
5880
  /* -- SHADOWS -- */
5825
5881
  .bs-flyout:where([data-place-self="left"]) {
@@ -5845,11 +5901,11 @@ a.bs-text-button {
5845
5901
  /* The 105% is so the huge shadow on the flyout ends-up off-screen too, otherwise at 100%, you notice it cut out when the panel closes */
5846
5902
  .bs-flyout-enter-from .bs-flyout[data-place-self="left"],
5847
5903
  .bs-flyout-leave-to .bs-flyout[data-place-self="left"] {
5848
- transform: translateX(-105%);
5904
+ transform: translate(calc(-105% + var(--bs-flyout-resize-pushed, 0px)));
5849
5905
  }
5850
5906
  .bs-flyout-enter-from .bs-flyout[data-place-self="right"],
5851
5907
  .bs-flyout-leave-to .bs-flyout[data-place-self="right"] {
5852
- transform: translateX(105%);
5908
+ transform: translate(calc(105% + var(--bs-flyout-resize-pushed, 0px)));
5853
5909
  }
5854
5910
  /*
5855
5911
  HEADS-UP: