@wwtdev/bsds-css 2.21.1 → 2.23.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.
@@ -3,16 +3,18 @@
3
3
  --active-color: rgba(255, 255, 255, 0.25);
4
4
  --bg-color: var(--bs-navy-base);
5
5
  --border-color: var(--bs-border-dark);
6
+ --expand-y-transform: translateY(calc(-1 * var(--top-offset)));
6
7
  --top-offset: 48px;
7
8
  --width: auto;
8
9
  -ms-overflow-style: none; /* Internet Explorer 10+ */
9
10
  background-color: var(--bg-color);
10
11
  color: var(--bs-white);
11
- display: none;
12
+ display: flex;
12
13
  flex-direction: column;
13
14
  height: 100vh;
14
15
  left: 0;
15
16
  max-height: calc(100vh - var(--top-offset));
17
+ opacity: 0;
16
18
  overflow: scroll;
17
19
  padding-bottom: 1.5rem;
18
20
  padding-left: 1.5rem;
@@ -22,15 +24,16 @@
22
24
  right: 0;
23
25
  scrollbar-width: none; /* Firefox */
24
26
  top: var(--top-offset);
25
- transition-duration: 0.2s;
26
- transition-property: max-height, transform;
27
- transition-timing-function: ease;
27
+ /* Slight delay for visibility to change prior to opacity */
28
+ transition: opacity 200ms ease 10ms;
29
+ visibility: hidden;
28
30
  width: var(--width);
29
31
  z-index: 1001;
30
32
  }
31
33
 
32
34
  .bs-vertical-nav:where([data-mobile-shown="true"]) {
33
- display: flex;
35
+ opacity: 1;
36
+ visibility: visible;
34
37
  }
35
38
 
36
39
  .dark .bs-vertical-nav {
@@ -40,16 +43,18 @@
40
43
  border-right: 1px solid var(--bs-border-medium);
41
44
  }
42
45
 
43
- @media (min-width: 752px) {
46
+ @media (min-width: 1166px) {
44
47
  .bs-vertical-nav {
45
48
  --width: 9.875rem;
46
49
  border-right: 1px solid var(--bg-color);
47
- display: flex;
50
+ opacity: 1;
48
51
  padding-bottom: 1rem;
49
52
  padding-left: 0.5rem;
50
53
  padding-right: 0.5rem;
51
54
  padding-top: 1rem;
52
55
  right: auto;
56
+ transition: max-height 200ms ease, transform 200ms ease;
57
+ visibility: visible;
53
58
  }
54
59
 
55
60
  .bs-vertical-nav:where([data-narrow="true"]) {
@@ -62,7 +67,7 @@
62
67
  }
63
68
 
64
69
  .bs-vertical-nav:where([data-y-expand="true"]) {
65
- transform: translateY(calc(-1 * var(--top-offset)));
70
+ transform: var(--expand-y-transform);
66
71
  max-height: 100vh;
67
72
  }
68
73
 
@@ -73,7 +78,7 @@
73
78
  padding-top: 0.5rem;
74
79
  }
75
80
 
76
- @media (min-width: 752px) {
81
+ @media (min-width: 1166px) {
77
82
  .bs-vertical-nav :where(.bs-vertical-nav-section) {
78
83
  margin-top: 0.25rem;
79
84
  }
@@ -123,7 +128,7 @@
123
128
  padding-left: 0;
124
129
  }
125
130
 
126
- @media (min-width: 752px) {
131
+ @media (min-width: 1166px) {
127
132
  .bs-vertical-nav :where(ul) {
128
133
  gap: 0.25rem;
129
134
  }
@@ -146,7 +151,7 @@
146
151
  width: 100%;
147
152
  }
148
153
 
149
- @media (min-width: 752px) {
154
+ @media (min-width: 1166px) {
150
155
  .bs-vertical-nav :where(ul li a) {
151
156
  font-size: 0.875rem;
152
157
  padding-bottom: 0.5rem;
@@ -180,7 +185,7 @@
180
185
  width: 1rem;
181
186
  }
182
187
 
183
- @media (min-width: 752px) {
188
+ @media (min-width: 1166px) {
184
189
  .bs-vertical-nav :where(.bs-vertical-nav-link-icon) {
185
190
  height: 0.875rem;
186
191
  width: 0.875rem;
@@ -207,7 +212,7 @@
207
212
  width: 1rem;
208
213
  }
209
214
 
210
- @media (min-width: 752px) {
215
+ @media (min-width: 1166px) {
211
216
  .bs-vertical-nav :where(.bs-vertical-nav-external-links .bs-vertical-nav-external-link-icon) {
212
217
  height: 0.875rem;
213
218
  width: 0.875rem;
@@ -5,7 +5,7 @@
5
5
  border: 2px solid var(--bs-ink-blue);
6
6
  column-gap: 0.75rem;
7
7
  display: grid;
8
- grid-template-columns: 1.25rem 1fr 1rem;
8
+ grid-template-columns: 1.125rem 1fr 1rem;
9
9
  grid-template-areas: "icon title close"
10
10
  ". description ."
11
11
  ". action .";
@@ -15,43 +15,57 @@
15
15
  @media (min-width: 752px) {
16
16
  .bs-alert {
17
17
  padding: 1.5rem;
18
- }
19
- }
20
-
21
- .bs-alert:where([data-horizontal="true"]) {
22
- grid-template-columns: 1.25rem 1fr 1rem;
23
- grid-template-areas: "icon title close"
18
+ grid-template-columns: 1.25rem 1fr 1rem;
19
+ grid-template-areas: "icon title close"
20
+ ". description ."
24
21
  ". action .";
22
+ }
25
23
  }
26
24
 
27
25
  @media (min-width: 752px) {
28
26
  .bs-alert:where([data-horizontal="true"]) {
27
+ padding: 1rem 1.5rem;
29
28
  grid-template-areas: "icon title action close";
30
- grid-template-columns: 1.25rem max-content 1fr 1rem;
29
+ grid-template-columns: 1.125rem max-content 1fr 1rem;
31
30
  }
32
31
  }
33
32
 
34
33
  .bs-alert :where(.bs-alert-icon) {
35
- align-self: center;
34
+ margin-top: 0.25rem;
35
+ align-self: start;
36
36
  color: var(--bs-ink-blue);
37
37
  grid-area: icon;
38
- height: 1.25rem;
39
- width: 1.25rem;
38
+ height: 1.125rem;
39
+ width: 1.125rem;
40
40
  }
41
41
 
42
42
  .bs-alert :where(.bs-alert-title) {
43
43
  font-size: 1.125rem;
44
+ line-height: 1.3;
45
+ color: var(--bs-ink-base);
44
46
  grid-area: title;
45
47
  }
46
48
 
47
49
  @media (min-width: 752px) {
48
50
  .bs-alert :where(.bs-alert-title) {
49
51
  font-size: 1.25rem;
52
+ line-height: 1.3;
53
+ }
54
+
55
+ .bs-alert:where([data-horizontal="true"]) :where(.bs-alert-title) {
56
+ font-size: 1.125rem;
57
+ line-height: 1.5;
58
+ }
59
+
60
+ .bs-alert:where(:not([data-horizontal="true"])) :where(.bs-alert-icon) {
61
+ height: 1.25rem;
62
+ width: 1.25rem;
50
63
  }
51
64
  }
52
65
 
53
66
  .bs-alert :where(.bs-alert-description) {
54
67
  font-size: 0.875rem;
68
+ color: var(--bs-ink-medium);
55
69
  grid-area: description;
56
70
  margin-top: 0.5rem;
57
71
  }
@@ -67,7 +81,8 @@
67
81
  }
68
82
 
69
83
  .bs-alert :where(.bs-alert-close) {
70
- align-self: center;
84
+ margin-top: 0.25rem;
85
+ align-self: start;
71
86
  background-color: transparent;
72
87
  cursor: pointer;
73
88
  grid-area: close;
@@ -90,6 +90,11 @@ textarea {
90
90
  outline-width: 0px;
91
91
  }
92
92
 
93
+ /* OPEN state */
94
+ :is(select, .bs-select):where(:open) {
95
+ background: var(--bs-bg-base-to-light);
96
+ }
97
+
93
98
  /* DISABLED state */
94
99
  :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled),
95
100
  :is(.bs-input, .bs-select, .bs-textarea):where(:disabled) {
@@ -1,45 +1,25 @@
1
1
  .bs-horizontal-nav-mobile {
2
2
  --bg-color: var(--bs-bg-light);
3
3
  --top-offset: 48px;
4
- -ms-overflow-style: none; /* Internet Explorer 10+ */
5
- background-color: var(--bg-color);
6
4
  display: flex;
7
5
  flex-direction: column;
8
- height: auto;
9
6
  left: 0;
10
- max-height: calc(100vh - var(--top-offset));
11
- overflow: scroll;
12
7
  position: fixed;
13
8
  right: 0;
14
- scrollbar-width: none; /* Firefox */
15
9
  top: var(--top-offset);
16
10
  z-index: 1001;
17
11
  }
18
12
 
19
- .bs-horizontal-nav-mobile:where([data-shown="true"]) {
20
- height: 100vh;
21
- }
22
-
23
- @media (min-width: 752px) {
13
+ @media (min-width: 1166px) {
24
14
  .bs-horizontal-nav-mobile {
25
15
  display: none;
26
16
  }
27
17
  }
28
18
 
29
- /* ===== Nav List ===== */
30
- .bs-horizontal-nav-mobile :where(ul) {
31
- display: none;
32
- flex-direction: column;
33
- list-style: none;
34
- }
35
-
36
- .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(ul) {
37
- display: flex;
38
- }
39
-
40
19
  /* ===== Toggle ===== */
41
20
  .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle) {
42
21
  align-items: center;
22
+ background-color: var(--bs-bg-light);
43
23
  color: var(--bs-ink-light);
44
24
  cursor: pointer;
45
25
  display: flex;
@@ -52,6 +32,10 @@
52
32
  width: 100%;
53
33
  }
54
34
 
35
+ .bs-horizontal-nav-mobile:where([data-hide-toggle="true"]) :where(.bs-horizontal-nav-mobile-toggle) {
36
+ display: none;
37
+ }
38
+
55
39
  .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-toggle-title) {
56
40
  align-items: center;
57
41
  display: flex;
@@ -77,16 +61,51 @@
77
61
  transform: rotate(180deg);
78
62
  }
79
63
 
64
+ /* ===== Nav Menu Container ===== */
65
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu) {
66
+ -ms-overflow-style: none; /* Internet Explorer 10+ */
67
+ background-color: var(--bg-color);
68
+ display: flex;
69
+ flex-direction: column;
70
+ height: 100vh;
71
+ /* 100vh - top offset - toggle height */
72
+ max-height: calc(100vh - var(--top-offset) - 48px);
73
+ opacity: 0;
74
+ overflow: scroll;
75
+ scrollbar-width: none; /* Firefox */
76
+ transition-duration: 200ms;
77
+ transition-property: opacity;
78
+ transition-timing-function: ease;
79
+ }
80
+
81
+ .bs-horizontal-nav-mobile:where([data-hide-toggle="true"]) :where(.bs-horizontal-nav-mobile-menu) {
82
+ max-height: calc(100vh - var(--top-offset));
83
+ }
84
+
85
+ .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(.bs-horizontal-nav-mobile-menu) {
86
+ opacity: 1;
87
+ }
88
+
89
+ /* ===== Nav List ===== */
90
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul) {
91
+ background-color: var(--bg-color);
92
+ display: flex;
93
+ flex-direction: column;
94
+ list-style: none;
95
+ }
96
+
80
97
  /* ===== Nav Items ===== */
81
- .bs-horizontal-nav-mobile :where(ul > li) {
98
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li) {
82
99
  border-top: 1px solid var(--bs-border-base);
83
100
  }
84
101
 
85
- .bs-horizontal-nav-mobile :where(ul:not(.bs-horizontal-nav-mobile-nested-menu) > li:last-child) {
102
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li:last-child) {
86
103
  border-bottom: 1px solid var(--bs-border-base);
87
104
  }
88
105
 
89
- .bs-horizontal-nav-mobile :where(ul > li > a) {
106
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li > a),
107
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li > a),
108
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-links > ul > li > a) {
90
109
  color: var(--bs-ink-light);
91
110
  cursor: pointer;
92
111
  display: flex;
@@ -97,16 +116,20 @@
97
116
  padding-top: 0.75rem;
98
117
  }
99
118
 
100
- .bs-horizontal-nav-mobile :where(ul > li > a:hover) {
119
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li > a:hover),
120
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li > a:hover),
121
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-links > ul > li > a:hover) {
101
122
  color: var(--bs-ink-blue);
102
123
  }
103
124
 
104
- .bs-horizontal-nav-mobile :where(ul > li > a[data-active="true"]) {
125
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li > a[data-active="true"]),
126
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li > a[data-active="true"]) {
105
127
  color: var(--bs-ink-base);
106
128
  font-weight: 600;
107
129
  }
108
130
 
109
- .bs-horizontal-nav-mobile :where(ul > li > a[data-active="true"]:hover) {
131
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li > a[data-active="true"]:hover),
132
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li > a[data-active="true"]:hover) {
110
133
  color: var(--bs-ink-blue);
111
134
  }
112
135
 
@@ -124,11 +147,11 @@
124
147
  width: 100%;
125
148
  }
126
149
 
127
- .bs-horizontal-nav-mobile :where(ul li .bs-horizontal-nav-mobile-nested-toggle[data-active="true"]) {
150
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-toggle[data-active="true"]) {
128
151
  font-weight: 600;
129
152
  }
130
153
 
131
- .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-toggle) {
154
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li[data-expanded="true"] > .bs-horizontal-nav-mobile-nested-toggle) {
132
155
  background-color: var(--bs-bg-medium);
133
156
  color: var(--bs-ink-blue);
134
157
  font-weight: 600;
@@ -147,7 +170,7 @@
147
170
  width: 0.75rem;
148
171
  }
149
172
 
150
- .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-toggle-caret) {
173
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-toggle-caret) {
151
174
  transform: rotate(180deg);
152
175
  }
153
176
 
@@ -156,18 +179,19 @@
156
179
  display: none;
157
180
  }
158
181
 
159
- .bs-horizontal-nav-mobile :where(ul li[data-expanded="true"] .bs-horizontal-nav-mobile-nested-menu) {
182
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-menu > ul > li[data-expanded="true"] > .bs-horizontal-nav-mobile-nested-menu) {
160
183
  display: block;
161
184
  }
162
185
 
163
- .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-nested-menu > li) {
164
- border-top: none;
186
+ /* ===== External Links ===== */
187
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-links) {
188
+ margin-top: auto;
189
+ padding-top: 2.25rem;
165
190
  }
166
191
 
167
- /* ===== External Links ===== */
168
- .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-link) {
169
- align-items: center;
192
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-links > ul > li > a) {
170
193
  display: flex;
194
+ align-items: center;
171
195
  gap: 0.5rem;
172
196
  }
173
197
 
@@ -178,13 +202,24 @@
178
202
 
179
203
  /* ===== Slotted Items ===== */
180
204
  .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-slotted-items) {
181
- display: none;
182
205
  padding-bottom: 0.75rem;
183
206
  padding-left: 2.25rem;
184
207
  padding-right: 2.25rem;
185
208
  padding-top: 0.75rem;
209
+ margin-top: auto;
186
210
  }
187
211
 
188
- .bs-horizontal-nav-mobile:where([data-shown="true"]) :where(.bs-horizontal-nav-mobile-slotted-items) {
189
- display: block;
212
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-external-links ~ .bs-horizontal-nav-mobile-slotted-items) {
213
+ margin-top: 0;
214
+ }
215
+
216
+ /* Vue Transition Styles - Only used in Vue component */
217
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-enter-from),
218
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-leave-to) {
219
+ opacity: 0;
220
+ }
221
+
222
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-enter-to),
223
+ .bs-horizontal-nav-mobile :where(.bs-horizontal-nav-mobile-leave-from) {
224
+ opacity: 1;
190
225
  }
@@ -13,7 +13,7 @@
13
13
  z-index: 1001;
14
14
  }
15
15
 
16
- @media (min-width: 752px) {
16
+ @media (min-width: 1166px) {
17
17
  .bs-horizontal-nav {
18
18
  display: flex;
19
19
  }
@@ -0,0 +1,83 @@
1
+ .bs-inline-tabs {
2
+ display: flex;
3
+ gap: var(--bs-space-2);
4
+ }
5
+
6
+ .bs-inline-tab {
7
+ display: inline-flex;
8
+ justify-content: center;
9
+ align-items: center;
10
+ padding: var(--bs-space-2) var(--bs-space-3);
11
+ font-size: var(--bs-text-sm);
12
+ font-weight: 600;
13
+ line-height: 1.5;
14
+ color: var(--bs-ink-royal);
15
+ text-align: center; /* needed for "as link" wrap cases */
16
+ text-decoration: none;
17
+ background-color: var(--bs-bg-medium);
18
+ border-radius: var(--bs-space-1);
19
+ border: 1px solid transparent;
20
+ outline: none;
21
+ cursor: pointer;
22
+ transition: all 100ms ease-in-out;
23
+ }
24
+
25
+ /* Variant */
26
+ .bs-inline-tab:where([data-variant="white"]) {
27
+ background-color: var(--bs-bg-base);
28
+ }
29
+
30
+ /* Hover */
31
+ .bs-inline-tab:where(:not([data-selected]):hover) {
32
+ border-color: var(--bs-ink-royal); /* "ink-royal" instead of "royal-base", matches Figma design */
33
+ }
34
+
35
+ /* Keyboard Focus */
36
+ .bs-inline-tab:where(:focus-visible) {
37
+ outline: 2px solid var(--bs-ink-royal);
38
+
39
+ &:where([data-selected]) {
40
+ outline-offset: 2px;
41
+ }
42
+ }
43
+
44
+ /* Selected */
45
+ .bs-inline-tab:where([data-selected]) {
46
+ color: var(--bs-ink-white);
47
+ background-color: var(--bs-royal-400); /* "400" instead of "base", matches Figma design */
48
+ }
49
+
50
+ /* Disabled (as button or link) */
51
+ .bs-inline-tab:where(:disabled, [aria-disabled="true"]) {
52
+ color: var(--bs-ink-light);
53
+ background-color: var(--bs-gray-light);
54
+ cursor: default;
55
+ pointer-events: none;
56
+ }
57
+
58
+ /* Selected & Disabled */
59
+ .bs-inline-tab:where([data-selected]):where(:disabled, [aria-disabled="true"]) {
60
+ color: var(--bs-ink-white);
61
+ background-color: var(--bs-gray-base);
62
+ }
63
+
64
+ /* -- Dark Mode Overrides -- */
65
+
66
+ :where(.dark .bs-inline-tab) {
67
+
68
+ /* Ink */
69
+ &:not([data-selected], :disabled, [aria-disabled="true"]) {
70
+ color: var(--bs-ink-medium);
71
+ }
72
+
73
+ /* Selected & Disabled */
74
+ &[data-selected]:where(:disabled, [aria-disabled="true"]) {
75
+ color: var(--bs-ink-invert-base);
76
+ }
77
+
78
+ /* Keyboard Focus */
79
+ &[data-selected]:where(:focus-visible) {
80
+ outline-offset: 0;
81
+ }
82
+
83
+ }