@wwtdev/bsds-css 3.0.0-rc.44 → 3.0.0-rc.45

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/wwt-bsds.css CHANGED
@@ -6554,14 +6554,30 @@ a.bs-text-button {
6554
6554
  --step-color: var(--bs-ink-negative);
6555
6555
  --progress-step-bg: var(--bs-negative-base);
6556
6556
  }
6557
- .bs-vertical-nav {
6557
+ :root {
6558
+ --bs-vertical-nav-width: 9.875rem;
6559
+ --bs-vertical-nav-narrow-width: 4.5rem;
6560
+ --bs-vertical-nav-collapsed-width: 4rem;
6561
+ /* Dynamic width set by the navigation component for page layout */
6562
+ --bs-page-nav-width: 0px;
6563
+ }
6564
+ .bs-vertical-nav-wrapper {
6558
6565
  --active-color: rgba(255, 255, 255, 0.25);
6559
6566
  --bg-color: var(--bs-navy-base);
6560
6567
  --border-color: var(--bs-border-dark);
6568
+ --text-color: var(--bs-white);
6569
+ --link-color: var(--bs-white);
6570
+ --link-hover-color: var(--bs-white);
6571
+ --link-active-color: var(--bs-white);
6572
+ --toggle-bg-color: var(--bg-color);
6573
+ --toggle-color: var(--bs-white);
6561
6574
  --top-offset: 48px;
6575
+ }
6576
+ .bs-vertical-nav {
6562
6577
  -ms-overflow-style: none; /* Internet Explorer 10+ */
6563
6578
  background-color: var(--bg-color);
6564
- color: var(--bs-white);
6579
+ border-inline-end: 1px solid var(--border-color);
6580
+ color: var(--text-color);
6565
6581
  display: flex;
6566
6582
  flex-direction: column;
6567
6583
  height: 100dvh;
@@ -6587,22 +6603,22 @@ a.bs-text-button {
6587
6603
  opacity: 1;
6588
6604
  visibility: visible;
6589
6605
  }
6590
- .dark .bs-vertical-nav {
6606
+ .bs-vertical-nav:where([data-collapsible="true"]) {
6607
+ transition: opacity 200ms ease 10ms, width 350ms cubic-bezier(0.4, 0, 0.2, 1);
6608
+ }
6609
+ .dark .bs-vertical-nav-wrapper {
6591
6610
  --active-color: rgba(255, 255, 255, 0.25);
6592
6611
  --bg-color: var(--bs-bg-base);
6593
- --border-color: var(--bs-border-dark);
6594
- border-right: 1px solid var(--bs-border-medium);
6612
+ --border-color: var(--bs-border-medium);
6595
6613
  }
6596
6614
  @media (min-width: 1166px) {
6597
6615
  .bs-vertical-nav {
6598
- border-right: 1px solid var(--bg-color);
6599
6616
  opacity: 1;
6600
6617
  padding-bottom: 1rem;
6601
6618
  padding-left: 0.5rem;
6602
6619
  padding-right: 0.5rem;
6603
6620
  padding-top: 1rem;
6604
6621
  right: auto;
6605
- transition: none;
6606
6622
  visibility: visible;
6607
6623
  width: var(--bs-vertical-nav-width);
6608
6624
  }
@@ -6610,10 +6626,58 @@ a.bs-text-button {
6610
6626
  .bs-vertical-nav:where([data-narrow="true"]) {
6611
6627
  width: var(--bs-vertical-nav-narrow-width);
6612
6628
  }
6629
+
6630
+ .bs-vertical-nav:where([data-collapsed="true"]) {
6631
+ width: var(--bs-vertical-nav-collapsed-width);
6632
+ }
6613
6633
  }
6614
6634
  .bs-vertical-nav::-webkit-scrollbar {
6615
6635
  display: none; /* Safari and Chrome */
6616
6636
  }
6637
+ /* ===== Collapse Toggle Button ===== */
6638
+ .bs-vertical-nav-toggle {
6639
+ align-items: center;
6640
+ background: var(--toggle-bg-color);
6641
+ border: 1px solid var(--border-color);
6642
+ border-radius: 100px;
6643
+ color: var(--toggle-color);
6644
+ cursor: pointer;
6645
+ display: none; /* Hidden by default on mobile */
6646
+ height: 24px;
6647
+ width: 24px;
6648
+ justify-content: center;
6649
+ padding: 0;
6650
+ position: fixed;
6651
+ left: calc(var(--bs-vertical-nav-width) - 0.5rem);
6652
+ pointer-events: auto; /* Ensure button is clickable */
6653
+ top: calc(var(--top-offset) + 3rem); /* top-offset + 3rem */
6654
+ transition: left 300ms ease-out, opacity 100ms ease-out;
6655
+ z-index: 1002; /* Above nav to prevent hover conflicts */
6656
+ }
6657
+ @media (min-width: 1166px) {
6658
+ .bs-vertical-nav-toggle {
6659
+ display: flex;
6660
+ opacity: 1;
6661
+ transition: left 300ms ease-out, opacity 100ms ease-out;
6662
+ }
6663
+
6664
+ .bs-vertical-nav-toggle:where([data-collapsed="true"]) {
6665
+ left: calc(var(--bs-vertical-nav-collapsed-width) - 0.5rem);
6666
+ }
6667
+
6668
+ /* Adjust position for narrow variant when NOT collapsed */
6669
+ .bs-vertical-nav-toggle:where([data-narrow="true"]:not([data-collapsed="true"])) {
6670
+ left: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem);
6671
+ }
6672
+ }
6673
+ .bs-vertical-nav-toggle-icon {
6674
+ height: 8px;
6675
+ width: 8px;
6676
+ color: inherit;
6677
+ transition: transform 200ms var(--bs-transition-ease);
6678
+ will-change: transform;
6679
+ flex-shrink: 0;
6680
+ }
6617
6681
  /* ===== Sections ===== */
6618
6682
  .bs-vertical-nav :where(.bs-vertical-nav-section) {
6619
6683
  border-top: 2px solid var(--border-color);
@@ -6625,6 +6689,10 @@ a.bs-text-button {
6625
6689
  margin-top: 0.25rem;
6626
6690
  }
6627
6691
  }
6692
+ /* Divider-only sections have no additional padding since no toggle button */
6693
+ .bs-vertical-nav :where(.bs-vertical-nav-section[data-divider-only="true"]) {
6694
+ padding-top: 0.25rem;
6695
+ }
6628
6696
  /* Don't show border if the very first item is a section */
6629
6697
  .bs-vertical-nav :where(ul li:first-child) {
6630
6698
  border-top: none;
@@ -6693,54 +6761,64 @@ a.bs-text-button {
6693
6761
  .bs-vertical-nav :where(ul li a) {
6694
6762
  align-items: center;
6695
6763
  border-radius: 4px;
6696
- color: var(--bs-white);
6764
+ color: var(--link-color);
6697
6765
  cursor: pointer;
6698
6766
  display: flex;
6699
6767
  font-size: 1rem;
6700
6768
  font-weight: 400;
6701
6769
  gap: 0.5rem;
6702
6770
  height: 100%;
6703
- padding-bottom: 0.75rem;
6704
- padding-left: 0.75rem;
6705
- padding-right: 0.75rem;
6706
- padding-top: 0.75rem;
6771
+ padding: 0.5rem 0.75rem;
6772
+ position: relative;
6707
6773
  text-decoration: none;
6708
- width: 100%;
6774
+ }
6775
+ /* Narrow variant - text always visible on desktop (overrides collapsed state) */
6776
+ @media (min-width: 1166px) {
6777
+ .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a > span:last-child) {
6778
+ opacity: 1;
6779
+ visibility: visible;
6780
+ width: auto;
6781
+ }
6709
6782
  }
6710
6783
  @media (min-width: 1166px) {
6711
6784
  .bs-vertical-nav :where(ul li a) {
6712
6785
  font-size: 0.875rem;
6713
- padding-bottom: 0.5rem;
6714
- padding-top: 0.5rem;
6786
+ min-height: 2.5rem; /* Fixed minimum height to prevent height changes */
6787
+ padding: 0.5rem 0.75rem; /* Explicit padding for consistency */
6715
6788
  /* nav width - nav left padding - nav right padding */
6716
6789
  width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
6717
6790
  }
6718
6791
 
6792
+ /* Collapsed state width */
6793
+ .bs-vertical-nav:where([data-collapsed="true"]) :where(ul li a) {
6794
+ /* collapsed width - nav left padding - nav right padding */
6795
+ width: calc(var(--bs-vertical-nav-collapsed-width) - 0.5rem - 0.5rem);
6796
+ }
6797
+
6719
6798
  /* Text overflow - normal width - no icon */
6720
6799
  .bs-vertical-nav :where(ul li a:not(:has(.bs-vertical-nav-link-icon)) span:first-child) {
6721
6800
  overflow: hidden;
6722
6801
  text-overflow: ellipsis;
6802
+ white-space: nowrap;
6723
6803
  /* nav width - nav left padding - nav right padding - link left padding - link right padding */
6724
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem);
6804
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem);
6725
6805
  }
6726
6806
 
6727
6807
  /* Text overflow - normal width - with icon */
6728
6808
  .bs-vertical-nav :where(ul li a:has(.bs-vertical-nav-link-icon) span:nth-child(2)) {
6729
6809
  overflow: hidden;
6730
6810
  text-overflow: ellipsis;
6811
+ white-space: nowrap;
6731
6812
  /* nav width - nav left padding - nav right padding - link left padding - link right padding - icon width - icon gap */
6732
- width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 0.875rem - 0.5rem);
6813
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem - 0.75rem - 0.75rem - 1rem - 0.5rem);
6733
6814
  }
6734
6815
 
6735
6816
  .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a) {
6736
6817
  flex-direction: column;
6737
6818
  font-size: 0.6875rem;
6738
- gap: 0.25rem;
6819
+ gap: 0.5rem; /* 8px - matches Figma */
6739
6820
  line-height: 1.3;
6740
- padding-bottom: 0.75rem;
6741
- padding-left: 0.25rem;
6742
- padding-right: 0.25rem;
6743
- padding-top: 0.75rem;
6821
+ padding: 0.5rem 0.75rem; /* 8px 12px - matches Figma */
6744
6822
  text-align: center;
6745
6823
  /* nav width - nav left padding - nav right padding */
6746
6824
  width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
@@ -6751,32 +6829,118 @@ a.bs-text-button {
6751
6829
  .bs-vertical-nav:where([data-narrow="true"]) :where(ul li a:has(.bs-vertical-nav-link-icon) span:nth-child(2)) {
6752
6830
  overflow: hidden;
6753
6831
  text-overflow: ellipsis;
6832
+ white-space: nowrap;
6754
6833
  /* nav width - nav left padding - nav right padding - link left padding */
6755
6834
  width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
6756
6835
  }
6757
6836
  }
6758
6837
  .bs-vertical-nav :where(ul li a:hover) {
6838
+ color: var(--link-hover-color);
6759
6839
  font-weight: 600;
6760
6840
  }
6761
6841
  .bs-vertical-nav :where(ul li a[data-active="true"]) {
6762
6842
  background-color: var(--active-color);
6843
+ color: var(--link-active-color);
6763
6844
  font-weight: 600;
6845
+ transition: background-color 200ms ease-out;
6764
6846
  }
6847
+ /* Icon sizing - mobile/default */
6765
6848
  .bs-vertical-nav :where(.bs-vertical-nav-link-icon) {
6766
6849
  height: 1rem;
6767
6850
  width: 1rem;
6851
+ flex-shrink: 0; /* Prevent icon from shrinking */
6768
6852
  }
6769
6853
  @media (min-width: 1166px) {
6770
- .bs-vertical-nav :where(.bs-vertical-nav-link-icon) {
6854
+ /* Wide and collapsible variant icons - 14px */
6855
+ .bs-vertical-nav:not([data-narrow="true"]) :where(.bs-vertical-nav-link-icon) {
6771
6856
  height: 0.875rem;
6772
6857
  width: 0.875rem;
6858
+ margin-left: 0.25rem; /* Visual centering adjustment */
6773
6859
  }
6774
6860
 
6861
+ /* Narrow variant icons - 16px (inherits from base) */
6775
6862
  .bs-vertical-nav:where([data-narrow="true"]) :where(.bs-vertical-nav-link-icon) {
6776
6863
  height: 1rem;
6777
6864
  width: 1rem;
6778
6865
  }
6779
6866
  }
6867
+ /* Default: Show text on mobile */
6868
+ .bs-vertical-nav :where(ul li a > span:last-child) {
6869
+ opacity: 1;
6870
+ visibility: visible;
6871
+ width: auto;
6872
+ }
6873
+ /* Desktop: Show text when NOT collapsed */
6874
+ @media (min-width: 1166px) {
6875
+ .bs-vertical-nav:not([data-collapsed="true"]) :where(ul li a > span:last-child) {
6876
+ opacity: 1;
6877
+ visibility: visible;
6878
+ width: auto;
6879
+ /* Immediate visibility when appropriate */
6880
+ transition: opacity 150ms ease, visibility 0ms linear;
6881
+ }
6882
+ }
6883
+ /* Desktop: Hide text when collapsed */
6884
+ @media (min-width: 1166px) {
6885
+ .bs-vertical-nav:where([data-collapsed="true"]) :where(ul li a > span:last-child) {
6886
+ opacity: 0;
6887
+ visibility: hidden;
6888
+ width: 0;
6889
+ overflow: hidden;
6890
+ white-space: nowrap;
6891
+ /* Delay visibility to prevent flash during breakpoint transition */
6892
+ transition: opacity 150ms ease, visibility 0ms linear 150ms;
6893
+ }
6894
+ }
6895
+ /* Keep icons visible when collapsed */
6896
+ .bs-vertical-nav:where([data-collapsed="true"]) :where(.bs-vertical-nav-link-icon) {
6897
+ display: block;
6898
+ }
6899
+ /* Hide section toggle when collapsed */
6900
+ .bs-vertical-nav:where([data-collapsed="true"]) :where(.bs-vertical-nav-section-toggle) {
6901
+ display: none;
6902
+ }
6903
+ /* ===== Hover Expansion (CSS-only) ===== */
6904
+ @media (min-width: 1166px) {
6905
+ /* Expand nav on hover when collapsed and collapsible - but NOT when hovering the toggle button */
6906
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"][data-collapsible="true"]) {
6907
+ width: var(--bs-vertical-nav-width);
6908
+ }
6909
+
6910
+ /* Narrow variant should respect narrow width on hover */
6911
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"][data-narrow="true"]) {
6912
+ width: var(--bs-vertical-nav-narrow-width);
6913
+ }
6914
+
6915
+ /* Expand link widths on hover when collapsed */
6916
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"]) :where(ul li a) {
6917
+ width: calc(var(--bs-vertical-nav-width) - 0.5rem - 0.5rem);
6918
+ }
6919
+
6920
+ /* Narrow variant links should respect narrow width on hover */
6921
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"][data-narrow="true"]) :where(ul li a) {
6922
+ width: calc(var(--bs-vertical-nav-narrow-width) - 0.5rem - 0.5rem);
6923
+ }
6924
+
6925
+ /* Show text on hover when collapsed */
6926
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"]) :where(ul li a > span:last-child) {
6927
+ opacity: 1;
6928
+ visibility: visible;
6929
+ width: auto;
6930
+ overflow: visible;
6931
+ }
6932
+
6933
+ /* Hide toggle button on hover when collapsed - but NOT when hovering the button itself */
6934
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav-toggle[data-collapsed="true"]) {
6935
+ opacity: 0;
6936
+ pointer-events: none; /* Prevent interaction when hidden */
6937
+ }
6938
+
6939
+ /* Show section toggles on hover when collapsed */
6940
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsed="true"]) :where(.bs-vertical-nav-section-toggle) {
6941
+ display: flex;
6942
+ }
6943
+ }
6780
6944
  /* ===== End Items ===== */
6781
6945
  .bs-vertical-nav :where(.bs-vertical-nav-end-items) {
6782
6946
  display: flex;
@@ -6784,11 +6948,23 @@ a.bs-text-button {
6784
6948
  gap: 0.25rem;
6785
6949
  margin-top: auto;
6786
6950
  }
6951
+ /* End items visibility for collapsible variant (desktop only) */
6952
+ @media (min-width: 1166px) {
6953
+ /* Hide end items when collapsible variant is collapsed */
6954
+ .bs-vertical-nav:where([data-collapsible="true"][data-collapsed="true"]) :where(.bs-vertical-nav-end-items) {
6955
+ display: none;
6956
+ }
6957
+
6958
+ /* Show end items on hover when collapsible variant is collapsed */
6959
+ .bs-vertical-nav-wrapper:where(:hover:not(:has(.bs-vertical-nav-toggle:hover))) :where(.bs-vertical-nav[data-collapsible="true"][data-collapsed="true"]) :where(.bs-vertical-nav-end-items) {
6960
+ display: flex;
6961
+ }
6962
+ }
6787
6963
  .bs-vertical-nav :where(.bs-vertical-nav-end-items > *) {
6788
- color: var(--bs-white);
6964
+ color: var(--text-color);
6789
6965
  }
6790
6966
  .bs-vertical-nav :where(.bs-vertical-nav-end-items > *:not(button)) {
6791
- color: var(--bs-white);
6967
+ color: var(--text-color);
6792
6968
  padding-bottom: 0.5rem;
6793
6969
  padding-left: 0.75rem;
6794
6970
  padding-right: 0.75rem;
@@ -6805,9 +6981,16 @@ a.bs-text-button {
6805
6981
  margin-right: 0.75rem;
6806
6982
  margin-top: 0.5rem;
6807
6983
  }
6984
+ /* Hide end items in narrow variant (all screen sizes) */
6808
6985
  .bs-vertical-nav:where([data-narrow="true"]) :where(.bs-vertical-nav-end-items) {
6809
6986
  display: none;
6810
6987
  }
6988
+ /* ===== CSS-Only Page Layout Support ===== */
6989
+ /* Apply to any element that needs to adjust for navigation width (e.g., headers, main content) */
6990
+ .bs-header-with-nav {
6991
+ margin-inline-start: var(--bs-page-nav-width);
6992
+ transition: margin-inline-start 350ms cubic-bezier(0.4, 0, 0.2, 1);
6993
+ }
6811
6994
  /*
6812
6995
  POP SYSTEM COMPONENTS
6813
6996
  Components that are built on top of BsPopover. The popover.css must come first.