@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.
- package/dist/components/_buttons.scss +2 -2
- package/dist/components/_dropdown-options.scss +26 -0
- package/dist/components/_dropdown.scss +1 -1
- package/dist/components/_filter-buttons.scss +14 -6
- package/dist/components/_spinner.scss +95 -0
- package/dist/components/_tab-list.scss +30 -8
- package/dist/components/_timeline.scss +104 -0
- package/dist/components/buttons.css +2 -2
- package/dist/components/dropdown-options.css +26 -0
- package/dist/components/dropdown.css +1 -1
- package/dist/components/filter-buttons.css +14 -6
- package/dist/components/spinner.css +91 -0
- package/dist/components/tab-list.css +30 -8
- package/dist/components/timeline.css +100 -0
- package/dist/wwt-bsds.css +229 -17
- package/dist/wwt-bsds.min.css +1 -1
- package/package.json +1 -1
|
@@ -151,12 +151,12 @@
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
/* ------------ Button Sizes, Media-based Text Sizing -------------- */
|
|
154
|
-
/* Std button: Mobile 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:
|
|
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;
|
|
@@ -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,
|
|
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
|
-
|
|
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:
|
|
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-
|
|
44
|
-
flex-
|
|
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
|
-
|
|
67
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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,
|
|
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:
|
|
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;
|
|
@@ -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,
|
|
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
|
-
|
|
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:
|
|
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-
|
|
43
|
-
flex-
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
|
|
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
|
+
}
|