@wwtdev/bsds-css 2.3.3 → 2.4.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.
@@ -151,12 +151,12 @@
151
151
  }
152
152
 
153
153
  /* ------------ Button Sizes, Media-based Text Sizing -------------- */
154
- /* Std button: Mobile text size, WM text size */
154
+ /* Std button: Mobile text size, DT text size */
155
155
  .bs-button {
156
156
  --btn-text-size: 1rem;
157
157
  }
158
158
 
159
- @media (min-width: 752px) {
159
+ @media (min-width: 1166px) {
160
160
  .bs-button {
161
161
  --btn-text-size: 1.125rem;
162
162
  }
@@ -13,6 +13,32 @@
13
13
  padding-left: 0;
14
14
  }
15
15
 
16
+ /* Stabilize scrollbar gutter for Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=764076) */
17
+ @media (min-width: 752px) {
18
+ /* 5th or 8th child triggers overflow-y (depending on variant) */
19
+ :where([data-width="content"]) > .bs-dropdown-options:where(:has([data-variant*="description"]:nth-child(5))),
20
+ :where([data-width="content"]) > .bs-dropdown-options:where(:has(li:not([data-variant*="description"]):nth-child(8))) {
21
+ scrollbar-gutter: stable;
22
+ }
23
+
24
+ /* Fallback for older Firefox+ only if we're not setting data-overflow values */
25
+ @supports not selector(:has(*)) {
26
+ :where([data-width="content"]) > .bs-dropdown-options {
27
+ scrollbar-gutter: stable;
28
+ }
29
+ }
30
+
31
+ /* Also allow this for js solutions if :has not available via data-overflow */
32
+ /* Reset scrollbar gutter when data-overflow is used */
33
+ :where([data-width="content"]) > .bs-dropdown-options:where([data-overflow]) {
34
+ scrollbar-gutter: auto;
35
+ }
36
+
37
+ :where([data-width="content"]) > .bs-dropdown-options:where([data-overflow="true"]) {
38
+ scrollbar-gutter: stable;
39
+ }
40
+ }
41
+
16
42
  /* Option list item */
17
43
  .bs-dropdown-options :where(li) {
18
44
  align-items: center;
@@ -92,7 +92,7 @@
92
92
  }
93
93
 
94
94
  .bs-dropdown:where([data-width="content"]) {
95
- --dropdown-wscreen-width: auto;
95
+ --dropdown-wscreen-width: max-content;
96
96
  }
97
97
 
98
98
  .bs-dropdown-parent:where([data-width="toggle"]) :where(.bs-dropdown),
@@ -12,25 +12,32 @@ custom properties:
12
12
 
13
13
  button:where(.bs-filter-button) {
14
14
  flex-shrink: 0;
15
+ position: relative;
15
16
  }
16
17
 
17
18
  .bs-filter-button {
18
19
  align-items: center;
19
- border-radius: 0.25rem;
20
20
  color: var(--filterbtn-color, var(--bs-ink-blue));
21
21
  column-gap: 0.5rem;
22
22
  cursor: pointer;
23
23
  display: inline-flex;
24
24
  font-size: var(--filterbtn-text-size, var(--bs-text-base));
25
25
  font-weight: var(--filterbtn-weight, 400);
26
- height: var(--filterbtn-height, 2rem);
26
+ height: var(--filterbtn-height, 1.5rem);
27
27
  line-height: 1.5;
28
- outline: solid var(--filterbtn-focus-color, transparent) .125rem;
29
- outline-offset: -.125rem;
30
- padding-inline: .5rem;
31
28
  transition: outline-color 100ms ease-in-out;
32
29
  width: max-content;
33
30
  }
31
+ .bs-filter-button::after {
32
+ border: solid var(--filterbtn-focus-color, transparent) 2px;
33
+ border-radius: 0.25rem;
34
+ content: '';
35
+ display: block;
36
+ height: 100%;
37
+ position: absolute;
38
+ transform: scale(1.25);
39
+ width: 100%;
40
+ }
34
41
 
35
42
  .bs-filter-button :where(.bs-icon),
36
43
  .bs-filter-button :where(span:has(svg:only-child)) {
@@ -44,7 +51,7 @@ button:where(.bs-filter-button) {
44
51
  }
45
52
 
46
53
  .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
47
- --filterbtn-height: 1.75rem;
54
+
48
55
  --filterbtn-text-size: var(--bs-text-sm);
49
56
  --filterbtn-caret-size: .75rem;
50
57
  }
@@ -65,6 +72,7 @@ button:where(.bs-filter-button) {
65
72
 
66
73
  /* Focus state */
67
74
  .bs-filter-button:where(:focus-visible) {
75
+ outline: none;
68
76
  --filterbtn-focus-color: var(--bs-blue-base);
69
77
  }
70
78
 
@@ -0,0 +1,95 @@
1
+ @mixin spinner() {
2
+ :where(.bs-spinner) {
3
+ display: block;
4
+ }
5
+
6
+ /* ------------ Sizes ------------ */
7
+ .bs-spinner {
8
+ aspect-ratio: 1;
9
+ fill: none;
10
+ height: var(--spinner-size, 2rem);
11
+ width: var(--spinner-size, 2rem);
12
+ }
13
+
14
+ .bs-spinner:where([data-size="sm"]) {
15
+ --spinner-size: 1rem;
16
+ }
17
+
18
+ .bs-spinner:where([data-size="md"]) {
19
+ --spinner-size: 2rem;
20
+ }
21
+
22
+ .bs-spinner:where([data-size="lg"]) {
23
+ --spinner-size: 3rem;
24
+ }
25
+
26
+ /* ------------ Color Variants ------------ */
27
+
28
+ .bs-spinner :where(circle) {
29
+ animation: bs-spin 1s linear infinite;
30
+ stroke-linecap: round;
31
+ stroke-width: 10%;
32
+ transition: all 1s ease-in-out;
33
+ }
34
+
35
+ .bs-spinner:where(:not([data-variant="gradient"])) :where(circle) {
36
+ animation: bs-spin 1s linear infinite, bs-stroke-change 2s linear infinite;
37
+ }
38
+
39
+ .bs-spinner :where(circle) {
40
+ --bs-spinner-color-1: var(--bs-blue-400);
41
+ --bs-spinner-color-2: var(--bs-blue-200);
42
+ }
43
+
44
+ .bs-spinner:where([data-variant="white"]) :where(circle) {
45
+ --bs-spinner-color-1: white;
46
+ --bs-spinner-color-2: white;
47
+ }
48
+
49
+ :where(#bs-spinner-gradient stop) {
50
+ stop-color: var(--bs-plum-400);
51
+ }
52
+ :where(#bs-spinner-gradient stop:first-child) {
53
+ stop-color: var(--bs-blue-400);
54
+ }
55
+ :where(#bs-spinner-gradient stop:last-child) {
56
+ stop-color: var(--bs-red-400);
57
+ }
58
+
59
+ @keyframes bs-spin {
60
+ 0% {
61
+ stroke-dasharray: 0 100;
62
+ stroke-dashoffset: 0;
63
+ }
64
+ 25% {
65
+ stroke-dasharray: 33 67;
66
+ stroke-dashoffset: -40;
67
+ }
68
+ 70% {
69
+ stroke-dasharray: 33 67;
70
+ stroke-dashoffset: -60;
71
+ }
72
+ 85% {
73
+ stroke-dasharray: 17 83;
74
+ stroke-dashoffset: -77;
75
+ }
76
+ 100% {
77
+ stroke-dasharray: 0 100;
78
+ stroke-dashoffset: -100;
79
+ }
80
+ }
81
+
82
+ @keyframes bs-stroke-change {
83
+ 0% {
84
+ stroke: var(--bs-spinner-color-1);
85
+ }
86
+ 33% {
87
+ stroke: var(--bs-spinner-color-2, var(--bs-spinner-color-1));
88
+ }
89
+ 100% {
90
+ stroke: var(--bs-spinner-color-1);
91
+ }
92
+ }
93
+
94
+ }
95
+
@@ -27,24 +27,27 @@
27
27
  :is(.bs-tab-list, bs-tab-list):where([data-resizing]:not([data-resizing="false"])) {
28
28
  --tab-list-opacity: 0;
29
29
  }
30
- @media (min-width: 752px) {
30
+ @media (min-width: 1166px) {
31
31
  :is(.bs-tab-list, bs-tab-list) {
32
32
  --tab-justify: flex-start;
33
33
  --tab-text-size: var(--bs-text-base);
34
34
  }
35
35
  }
36
36
 
37
+ /* ------------- Tabs and Toggle ------------- */
37
38
  :is(bs-tab-list, .bs-tab-list) :where([role="tab"], .bs-tab-list-toggle) {
38
39
  align-items: center;
39
40
  color: var(--tab-color, var(--bs-ink-light));
40
41
  column-gap: .5rem;
41
42
  cursor: var(--tab-cursor);
42
43
  display: var(--tab-display);
43
- flex-grow: 0;
44
- flex-shrink: 0;
44
+ flex-basis: var(--tab-basis, content);
45
+ flex-grow: var(--tab-grow, 1);
46
+ flex-shrink: var(--tab-shrink, 0);
45
47
  font-size: inherit;
46
48
  font-weight: var(--tab-weight, var(--bs-font-normal));
47
49
  height: 2.5rem;
50
+ justify-content: var(--tab-justify-self, center);
48
51
  padding: .5rem;
49
52
  outline-color: var(--bs-blue-base);
50
53
  outline-offset: -1px;
@@ -63,14 +66,24 @@
63
66
  --tab-weight: var(--bs-font-bold);
64
67
  }
65
68
 
66
- :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"]) {
67
- display: none;
69
+ /* ---- always use DT styles when tabs have yet to be width-adapted (they're invisible during this time) ---- */
70
+ :is(.bs-tab-list, bs-tab-list):where([data-resizing="true"]) {
71
+ --tab-basis: auto;
72
+ --tab-grow: 0;
73
+ --tab-justify-self: flex-start;
74
+ --tab-shrink: 0;
68
75
  }
69
- :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"][data-active]:not([data-active="false"])) {
70
- display: block;
76
+
77
+ @media (min-width: 1166px) {
78
+ :is(.bs-tab-list, bs-tab-list) {
79
+ --tab-basis: auto;
80
+ --tab-grow: 0;
81
+ --tab-justify-self: flex-start;
82
+ --tab-shrink: 0;
83
+ }
71
84
  }
72
85
 
73
- /* Active line */
86
+ /* ------------- Active line ------------- */
74
87
  :is(.bs-tab-list, bs-tab-list)::after {
75
88
  background-color: var(--bs-blue-base);
76
89
  bottom: 0;
@@ -84,5 +97,14 @@
84
97
  width: 100%;
85
98
  }
86
99
 
100
+ /* ------------- Tab Panels ------------- */
101
+
102
+ :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"]) {
103
+ display: none;
104
+ }
105
+ :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"][data-active]:not([data-active="false"])) {
106
+ display: block;
107
+ }
108
+
87
109
  }
88
110
 
@@ -0,0 +1,104 @@
1
+ @mixin timeline() {
2
+ .bs-progress-bar, .bs-timeline {
3
+ background-color: var(--bs-bg-base);
4
+ display: flex;
5
+ position: relative;
6
+ }
7
+
8
+ .bs-progress-bar {
9
+ gap: .25rem;
10
+ }
11
+
12
+ /* ------------ Step Item ------------ */
13
+
14
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item) {
15
+ background-color: var(--step-bg, inherit);
16
+ flex-grow: 1;
17
+ flex-shrink: 0;
18
+ position: relative;
19
+ }
20
+
21
+ /* -- Step Items in Timeline -- */
22
+
23
+ .bs-timeline :where(.bs-step-item) {
24
+ align-items: center;
25
+ color: var(--step-color, var(--bs-ink-disabled));
26
+ display: flex;
27
+ flex-direction: column;
28
+ padding-inline: 1rem;
29
+ row-gap: 0.5rem;
30
+ }
31
+
32
+ .bs-timeline :where(.bs-step-item *) {
33
+ text-wrap: nowrap;
34
+ }
35
+
36
+ .bs-timeline :where(.bs-step-item .bs-step-icon) {
37
+ background-color: inherit;
38
+ height: 1.5rem;
39
+ text-align: center;
40
+ width: 1.5rem;
41
+ z-index: 10;
42
+ }
43
+
44
+ .bs-timeline :where(.bs-step-item)::after {
45
+ border-top: 0.125rem solid var(--bs-border-base);
46
+ content: '';
47
+ display: block;
48
+ position: absolute;
49
+ top: 0.75rem;
50
+ width: 100%;
51
+ }
52
+
53
+ /* -- Step Items in Progress Bar -- */
54
+
55
+ .bs-progress-bar :where(.bs-step-item) {
56
+ --step-bg: var(--progress-step-bg, var(--bs-bg-disabled));
57
+ height: .25rem;
58
+ }
59
+
60
+ .bs-progress-bar :where(.bs-step-item > *) {
61
+ border: 0;
62
+ clip: rect(0 0 0 0);
63
+ height: 1px;
64
+ margin: 0;
65
+ overflow: hidden;
66
+ padding: 0;
67
+ position: absolute;
68
+ white-space: nowrap;
69
+ width: 1px;
70
+ }
71
+
72
+
73
+
74
+ /* ------------ Status colors ------------ */
75
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="in-progress"]) {
76
+ --step-color: var(--bs-ink-base);
77
+ --progress-step-bg: var(--bs-purple-light);
78
+ }
79
+
80
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="complete"]),
81
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="paused"]),
82
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="ongoing"]) {
83
+ --step-color: var(--bs-ink-purple);
84
+ --progress-step-bg: var(--bs-purple-medium);
85
+ }
86
+
87
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="base"]) {
88
+ --progress-step-bg: var(--bs-purple-base);
89
+ }
90
+
91
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="warning"]) {
92
+ --step-color: var(--bs-ink-orange);
93
+ --progress-step-bg: var(--bs-orange-base);
94
+ }
95
+
96
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="error"]),
97
+ :is(.bs-progress-bar, .bs-timeline) :where(.bs-step-item[data-status="cancelled"]) {
98
+ --step-color: var(--bs-ink-red);
99
+ --progress-step-bg: var(--bs-red-base);
100
+ }
101
+
102
+
103
+ }
104
+
@@ -150,12 +150,12 @@
150
150
  }
151
151
 
152
152
  /* ------------ Button Sizes, Media-based Text Sizing -------------- */
153
- /* Std button: Mobile text size, WM text size */
153
+ /* Std button: Mobile text size, DT text size */
154
154
  .bs-button {
155
155
  --btn-text-size: 1rem;
156
156
  }
157
157
 
158
- @media (min-width: 752px) {
158
+ @media (min-width: 1166px) {
159
159
  .bs-button {
160
160
  --btn-text-size: 1.125rem;
161
161
  }
@@ -12,6 +12,32 @@
12
12
  padding-left: 0;
13
13
  }
14
14
 
15
+ /* Stabilize scrollbar gutter for Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=764076) */
16
+ @media (min-width: 752px) {
17
+ /* 5th or 8th child triggers overflow-y (depending on variant) */
18
+ :where([data-width="content"]) > .bs-dropdown-options:where(:has([data-variant*="description"]:nth-child(5))),
19
+ :where([data-width="content"]) > .bs-dropdown-options:where(:has(li:not([data-variant*="description"]):nth-child(8))) {
20
+ scrollbar-gutter: stable;
21
+ }
22
+
23
+ /* Fallback for older Firefox+ only if we're not setting data-overflow values */
24
+ @supports not selector(:has(*)) {
25
+ :where([data-width="content"]) > .bs-dropdown-options {
26
+ scrollbar-gutter: stable;
27
+ }
28
+ }
29
+
30
+ /* Also allow this for js solutions if :has not available via data-overflow */
31
+ /* Reset scrollbar gutter when data-overflow is used */
32
+ :where([data-width="content"]) > .bs-dropdown-options:where([data-overflow]) {
33
+ scrollbar-gutter: auto;
34
+ }
35
+
36
+ :where([data-width="content"]) > .bs-dropdown-options:where([data-overflow="true"]) {
37
+ scrollbar-gutter: stable;
38
+ }
39
+ }
40
+
15
41
  /* Option list item */
16
42
  .bs-dropdown-options :where(li) {
17
43
  align-items: center;
@@ -91,7 +91,7 @@
91
91
  }
92
92
 
93
93
  .bs-dropdown:where([data-width="content"]) {
94
- --dropdown-wscreen-width: auto;
94
+ --dropdown-wscreen-width: max-content;
95
95
  }
96
96
 
97
97
  .bs-dropdown-parent:where([data-width="toggle"]) :where(.bs-dropdown),
@@ -11,25 +11,32 @@ custom properties:
11
11
 
12
12
  button:where(.bs-filter-button) {
13
13
  flex-shrink: 0;
14
+ position: relative;
14
15
  }
15
16
 
16
17
  .bs-filter-button {
17
18
  align-items: center;
18
- border-radius: 0.25rem;
19
19
  color: var(--filterbtn-color, var(--bs-ink-blue));
20
20
  column-gap: 0.5rem;
21
21
  cursor: pointer;
22
22
  display: inline-flex;
23
23
  font-size: var(--filterbtn-text-size, var(--bs-text-base));
24
24
  font-weight: var(--filterbtn-weight, 400);
25
- height: var(--filterbtn-height, 2rem);
25
+ height: var(--filterbtn-height, 1.5rem);
26
26
  line-height: 1.5;
27
- outline: solid var(--filterbtn-focus-color, transparent) .125rem;
28
- outline-offset: -.125rem;
29
- padding-inline: .5rem;
30
27
  transition: outline-color 100ms ease-in-out;
31
28
  width: max-content;
32
29
  }
30
+ .bs-filter-button::after {
31
+ border: solid var(--filterbtn-focus-color, transparent) 2px;
32
+ border-radius: 0.25rem;
33
+ content: '';
34
+ display: block;
35
+ height: 100%;
36
+ position: absolute;
37
+ transform: scale(1.25);
38
+ width: 100%;
39
+ }
33
40
 
34
41
  .bs-filter-button :where(.bs-icon),
35
42
  .bs-filter-button :where(span:has(svg:only-child)) {
@@ -43,7 +50,7 @@ button:where(.bs-filter-button) {
43
50
  }
44
51
 
45
52
  .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
46
- --filterbtn-height: 1.75rem;
53
+
47
54
  --filterbtn-text-size: var(--bs-text-sm);
48
55
  --filterbtn-caret-size: .75rem;
49
56
  }
@@ -64,6 +71,7 @@ button:where(.bs-filter-button) {
64
71
 
65
72
  /* Focus state */
66
73
  .bs-filter-button:where(:focus-visible) {
74
+ outline: none;
67
75
  --filterbtn-focus-color: var(--bs-blue-base);
68
76
  }
69
77
 
@@ -0,0 +1,91 @@
1
+ :where(.bs-spinner) {
2
+ display: block;
3
+ }
4
+
5
+ /* ------------ Sizes ------------ */
6
+ .bs-spinner {
7
+ aspect-ratio: 1;
8
+ fill: none;
9
+ height: var(--spinner-size, 2rem);
10
+ width: var(--spinner-size, 2rem);
11
+ }
12
+
13
+ .bs-spinner:where([data-size="sm"]) {
14
+ --spinner-size: 1rem;
15
+ }
16
+
17
+ .bs-spinner:where([data-size="md"]) {
18
+ --spinner-size: 2rem;
19
+ }
20
+
21
+ .bs-spinner:where([data-size="lg"]) {
22
+ --spinner-size: 3rem;
23
+ }
24
+
25
+ /* ------------ Color Variants ------------ */
26
+
27
+ .bs-spinner :where(circle) {
28
+ animation: bs-spin 1s linear infinite;
29
+ stroke-linecap: round;
30
+ stroke-width: 10%;
31
+ transition: all 1s ease-in-out;
32
+ }
33
+
34
+ .bs-spinner:where(:not([data-variant="gradient"])) :where(circle) {
35
+ animation: bs-spin 1s linear infinite, bs-stroke-change 2s linear infinite;
36
+ }
37
+
38
+ .bs-spinner :where(circle) {
39
+ --bs-spinner-color-1: var(--bs-blue-400);
40
+ --bs-spinner-color-2: var(--bs-blue-200);
41
+ }
42
+
43
+ .bs-spinner:where([data-variant="white"]) :where(circle) {
44
+ --bs-spinner-color-1: white;
45
+ --bs-spinner-color-2: white;
46
+ }
47
+
48
+ :where(#bs-spinner-gradient stop) {
49
+ stop-color: var(--bs-plum-400);
50
+ }
51
+ :where(#bs-spinner-gradient stop:first-child) {
52
+ stop-color: var(--bs-blue-400);
53
+ }
54
+ :where(#bs-spinner-gradient stop:last-child) {
55
+ stop-color: var(--bs-red-400);
56
+ }
57
+
58
+ @keyframes bs-spin {
59
+ 0% {
60
+ stroke-dasharray: 0 100;
61
+ stroke-dashoffset: 0;
62
+ }
63
+ 25% {
64
+ stroke-dasharray: 33 67;
65
+ stroke-dashoffset: -40;
66
+ }
67
+ 70% {
68
+ stroke-dasharray: 33 67;
69
+ stroke-dashoffset: -60;
70
+ }
71
+ 85% {
72
+ stroke-dasharray: 17 83;
73
+ stroke-dashoffset: -77;
74
+ }
75
+ 100% {
76
+ stroke-dasharray: 0 100;
77
+ stroke-dashoffset: -100;
78
+ }
79
+ }
80
+
81
+ @keyframes bs-stroke-change {
82
+ 0% {
83
+ stroke: var(--bs-spinner-color-1);
84
+ }
85
+ 33% {
86
+ stroke: var(--bs-spinner-color-2, var(--bs-spinner-color-1));
87
+ }
88
+ 100% {
89
+ stroke: var(--bs-spinner-color-1);
90
+ }
91
+ }
@@ -26,24 +26,27 @@
26
26
  :is(.bs-tab-list, bs-tab-list):where([data-resizing]:not([data-resizing="false"])) {
27
27
  --tab-list-opacity: 0;
28
28
  }
29
- @media (min-width: 752px) {
29
+ @media (min-width: 1166px) {
30
30
  :is(.bs-tab-list, bs-tab-list) {
31
31
  --tab-justify: flex-start;
32
32
  --tab-text-size: var(--bs-text-base);
33
33
  }
34
34
  }
35
35
 
36
+ /* ------------- Tabs and Toggle ------------- */
36
37
  :is(bs-tab-list, .bs-tab-list) :where([role="tab"], .bs-tab-list-toggle) {
37
38
  align-items: center;
38
39
  color: var(--tab-color, var(--bs-ink-light));
39
40
  column-gap: .5rem;
40
41
  cursor: var(--tab-cursor);
41
42
  display: var(--tab-display);
42
- flex-grow: 0;
43
- flex-shrink: 0;
43
+ flex-basis: var(--tab-basis, content);
44
+ flex-grow: var(--tab-grow, 1);
45
+ flex-shrink: var(--tab-shrink, 0);
44
46
  font-size: inherit;
45
47
  font-weight: var(--tab-weight, var(--bs-font-normal));
46
48
  height: 2.5rem;
49
+ justify-content: var(--tab-justify-self, center);
47
50
  padding: .5rem;
48
51
  outline-color: var(--bs-blue-base);
49
52
  outline-offset: -1px;
@@ -62,14 +65,24 @@
62
65
  --tab-weight: var(--bs-font-bold);
63
66
  }
64
67
 
65
- :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"]) {
66
- display: none;
68
+ /* ---- always use DT styles when tabs have yet to be width-adapted (they're invisible during this time) ---- */
69
+ :is(.bs-tab-list, bs-tab-list):where([data-resizing="true"]) {
70
+ --tab-basis: auto;
71
+ --tab-grow: 0;
72
+ --tab-justify-self: flex-start;
73
+ --tab-shrink: 0;
67
74
  }
68
- :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"][data-active]:not([data-active="false"])) {
69
- display: block;
75
+
76
+ @media (min-width: 1166px) {
77
+ :is(.bs-tab-list, bs-tab-list) {
78
+ --tab-basis: auto;
79
+ --tab-grow: 0;
80
+ --tab-justify-self: flex-start;
81
+ --tab-shrink: 0;
82
+ }
70
83
  }
71
84
 
72
- /* Active line */
85
+ /* ------------- Active line ------------- */
73
86
  :is(.bs-tab-list, bs-tab-list)::after {
74
87
  background-color: var(--bs-blue-base);
75
88
  bottom: 0;
@@ -82,3 +95,12 @@
82
95
  transition: transform var(--active-line-transition-duration) ease-in;
83
96
  width: 100%;
84
97
  }
98
+
99
+ /* ------------- Tab Panels ------------- */
100
+
101
+ :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"]) {
102
+ display: none;
103
+ }
104
+ :where(.bs-tab-panel, bs-tab-panel):where([role="tabpanel"][data-active]:not([data-active="false"])) {
105
+ display: block;
106
+ }