@wwtdev/bsds-css 2.0.9 → 2.1.1

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.
@@ -77,7 +77,7 @@
77
77
  .bs-accordion :where(header button) > :where([data-position="end"]) {
78
78
  grid-area: end;
79
79
  transform: rotate(0);
80
- transition: transform 250ms ease-out;
80
+ transition: var(--bs-trans-rotate180);
81
81
  }
82
82
 
83
83
  .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
@@ -2,9 +2,13 @@
2
2
  .bs-badge {
3
3
  --badge-bg: var(--bs-red-base);
4
4
  --badge-text: var(--bs-white);
5
+ display: inline-block;
5
6
  }
6
7
 
7
- .bs-badge[data-position^='left']::before,
8
+ /* ------ Badge wrapped around text ------ */
9
+
10
+ /* Badge DOT */
11
+ .bs-badge:where([data-position^='left'])::before,
8
12
  .bs-badge:where(:not([data-position^='left']))::after {
9
13
  align-items: center;
10
14
  background: var(--badge-bg);
@@ -26,11 +30,13 @@
26
30
  font-size: 0.8125em;
27
31
  }
28
32
 
29
- .bs-badge[data-count]:where([data-position^='left'])::before,
30
- .bs-badge[data-count]:where(:not([data-position^='left']))::after {
33
+ /* Badge COUNT */
34
+
35
+ .bs-badge:where([data-count][data-position^='left'])::before,
36
+ .bs-badge:where([data-count]:not([data-position^='left']))::after {
31
37
  color: var(--badge-text);
32
38
  content: attr(data-count);
33
- min-height: 1rem;
39
+ height: 1rem;
34
40
  min-width: 1rem;
35
41
  padding: 0 4px;
36
42
  top: -0.0625rem;
@@ -38,31 +44,52 @@
38
44
  width: auto;
39
45
  }
40
46
 
41
- .bs-badge[data-count]::before {
42
- margin-right: 0.25rem;
47
+ .bs-badge:where([data-count='0'])::before,
48
+ .bs-badge:where([data-count='0'])::after {
49
+ display: none;
43
50
  }
44
51
 
45
- .bs-badge[data-count]::after {
46
- margin-left: 0.25rem;
52
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::before,
53
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::after {
54
+ display: inline-flex;
47
55
  }
48
56
 
49
- .bs-badge[data-count='0']::before,
50
- .bs-badge[data-count='0']::after {
51
- display: none;
57
+ /* Badge SPACING against wrapped text */
58
+
59
+ .bs-badge::before {
60
+ margin-right: 0.25rem;
52
61
  }
53
62
 
54
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
55
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
56
- display: inline-flex;
63
+ .bs-badge::after {
64
+ margin-left: 0.25rem;
57
65
  }
58
66
 
59
- .bs-badge[data-badge-color^='blue'] {
67
+ /* Badge COLORS */
68
+
69
+ .bs-badge:where([data-badge-color^='blue']) {
60
70
  --badge-bg: var(--bs-blue-base);
61
71
  }
62
- .bs-badge[data-badge-color^='white'] {
72
+ .bs-badge:where([data-badge-color^='white']) {
63
73
  --badge-bg: var(--bs-white);
64
74
  --badge-text: var(--bs-black);
65
75
  }
66
76
 
77
+ /* ------ Standalone Badge (not wrapped around text) ------ */
78
+ .bs-badge:where([data-variant="notext"]) {
79
+ align-items: center;
80
+ display: inline-flex;
81
+ justify-content: center;
82
+ }
83
+
84
+ .bs-badge:where([data-variant="notext"]) {
85
+ line-height: 1;
86
+ }
87
+
88
+ .bs-badge:where([data-variant="notext"])::after,
89
+ .bs-badge:where([data-variant="notext"])::before {
90
+ margin: 0;
91
+ top: unset;
92
+ }
93
+
67
94
  }
68
95
 
@@ -3,7 +3,7 @@
3
3
  --btn-main: var(--bs-blue-base);
4
4
  --btn-secondary: var(--bs-blue-medium);
5
5
  --btn-highlight: var(--bs-blue-100);
6
- --btn-padding: .25rem .75rem .375rem;
6
+ --btn-padding: .25rem .75rem;
7
7
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
8
8
  align-items: center;
9
9
  background-color: var(--btn-main);
@@ -12,8 +12,9 @@
12
12
  color: var(--bs-white);
13
13
  cursor: pointer;
14
14
  display: inline-flex;
15
- font-size: var(--bs-text-md);
15
+ font-size: var(--btn-text-size, var(--bs-text-md));
16
16
  font-weight: 600;
17
+ height: var(--btn-height, 2.5rem);
17
18
  justify-content: center;
18
19
  line-height: 1.5;
19
20
  outline: 2px solid transparent;
@@ -35,7 +36,7 @@
35
36
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
36
37
  }
37
38
 
38
- /* Button Focus Styles */
39
+ /* ------------ Focus Styles ------------ */
39
40
  .bs-button::before {
40
41
  border-color: transparent;
41
42
  border-radius: 0.5rem;
@@ -65,7 +66,7 @@
65
66
  box-shadow: none;
66
67
  }
67
68
 
68
- /* Ghost Buttons */
69
+ /* ------------ Ghost Buttons ------------ */
69
70
  .bs-button:where([data-ghost]:not([data-ghost="false"])) {
70
71
  --btn-light: var(--bs-blue-10);
71
72
  --btn-secondary: var(--bs-blue-10);
@@ -86,7 +87,7 @@
86
87
  inset 0px 0px 4px 1px var(--btn-highlight);
87
88
  }
88
89
 
89
- /* Button type */
90
+ /* ------------ Button type ------------ */
90
91
  .bs-button:where([data-variant^='secondary']) {
91
92
  --btn-main: var(--bs-plum-400);
92
93
  --btn-secondary: var(--bs-plum-300);
@@ -118,14 +119,15 @@
118
119
  --btn-highlight: var(--bs-red-100);
119
120
  }
120
121
 
121
- /* Text Button */
122
+ /* ------------ Text Button ------------ */
122
123
  .bs-button:where([data-text]:not([data-text="false"])) {
123
- --btn-padding: 0 0;
124
- --btn-focus-pseudo-width: calc(100% + 1.25rem); /* text btns don't have side padding, but we do want focus outline to look padded */
124
+ --btn-height: auto;
125
+ --btn-padding: 0;
126
+ --btn-focus-pseudo-width: calc(100% + 1rem); /* text btns don't have side padding, but we do want focus outline to look padded */
127
+ --btn-text-size: var(--bs-text-md);
125
128
  background-color: transparent;
126
129
  color: var(--bs-blue-500);
127
130
  cursor: pointer;
128
- font-size: var(--bs-text-md);
129
131
  font-weight: 400;
130
132
  line-height: 150%;
131
133
  }
@@ -141,15 +143,29 @@
141
143
  box-shadow: none;
142
144
  }
143
145
 
144
- /* Button Size */
146
+ /* ------------ Button Size -------------- */
145
147
  .bs-button:where([data-size^='sm']) {
146
- font-size: var(--bs-text-sm);
148
+ --btn-height: 1.75rem;
149
+ --btn-padding: .25rem .75rem .375rem;
150
+ --btn-text-size: var(--bs-text-sm);
151
+ }
152
+
153
+ .bs-button:where([data-size][data-text]:not([data-text="false"])) {
154
+ --btn-height: auto;
155
+ --btn-padding: 0;
156
+ }
157
+
158
+ .bs-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
159
+ --btn-text-size: var(--bs-text-base);
147
160
  }
148
- .bs-button:where([data-size^='sm']):where([data-text]:not([data-text="false"])) {
149
- font-size: var(--bs-text-base);
161
+
162
+ /* Size XS only applies to text buttons */
163
+ .bs-button:where([data-size^='xs'][data-text]:not([data-text="false"])) {
164
+ --btn-text-size: var(--bs-text-sm);
150
165
  }
151
166
 
152
- /* Disabled Styling */
167
+
168
+ /* ------------ Disabled Styling ------------ */
153
169
  :where(button:disabled),
154
170
  .bs-button:where(:disabled),
155
171
  .bs-button:where([aria-disabled="true"]) /* for links as buttons */ {
@@ -171,16 +187,7 @@
171
187
  background-color: transparent;
172
188
  }
173
189
 
174
- /* Icon Height */
175
- .bs-button :where(svg:not([height])) {
176
- height: var(--bs-text-base);
177
- }
178
-
179
- .bs-button:where([data-size^='sm']) :where(svg:not([height])) {
180
- height: var(--bs-text-xs);
181
- }
182
-
183
- /* links as buttons */
190
+ /* ------------ links as buttons ------------ */
184
191
  a.bs-button {
185
192
  align-items: center;
186
193
  display: inline-flex;
@@ -40,7 +40,7 @@ a.bs-circle-button {
40
40
  height: calc(100% + 0.5rem);
41
41
  inset: -0.25rem;
42
42
  position: absolute;
43
- transition: border-color 0.125s ease-in-out;
43
+ transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
44
44
  width: calc(100% + 0.5rem);
45
45
  }
46
46
 
@@ -101,10 +101,12 @@ a.bs-circle-button {
101
101
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
102
102
  }
103
103
 
104
- .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon) {
104
+ .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
105
+ .bs-circle-button:where([data-direction="right"]):hover::before {
105
106
  transform: translateX(.25rem);
106
107
  }
107
- .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon) {
108
+ .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon),
109
+ .bs-circle-button:where([data-direction="left"]):hover::before {
108
110
  transform: translateX(-.25rem);
109
111
  }
110
112
 
@@ -0,0 +1,101 @@
1
+ @mixin filter-buttons() {
2
+ /*
3
+ custom properties:
4
+ --filterbtn-caret-size
5
+ --filterbtn-caret-transform
6
+ --filterbtn-color
7
+ --filterbtn-focus-color
8
+ --filterbtn-height
9
+ --filterbtn-text-size
10
+ --filterbtn-weight
11
+ */
12
+
13
+ button:where(.bs-filter-button) {
14
+ flex-shrink: 0;
15
+ }
16
+
17
+ .bs-filter-button {
18
+ align-items: center;
19
+ border-radius: 0.25rem;
20
+ color: var(--filterbtn-color, var(--bs-ink-blue));
21
+ column-gap: 0.5rem;
22
+ cursor: pointer;
23
+ display: inline-flex;
24
+ font-size: var(--filterbtn-text-size, var(--bs-text-base));
25
+ font-weight: var(--filterbtn-weight, 400);
26
+ height: var(--filterbtn-height, 2rem);
27
+ line-height: 1.5;
28
+ outline: solid var(--filterbtn-focus-color, transparent) .125rem;
29
+ outline-offset: -.125rem;
30
+ padding-inline: .5rem;
31
+ transition: outline-color 100ms ease-in-out;
32
+ width: max-content;
33
+ }
34
+
35
+ .bs-filter-button :where(.bs-icon),
36
+ .bs-filter-button :where(span:has(svg:only-child)) {
37
+ display: block;
38
+ height: var(--filterbtn-caret-size, 1rem);
39
+ line-height: 1;
40
+ transform: var(--filterbtn-caret-transform, rotate(0deg));
41
+ transform-origin: center;
42
+ transition: var(--bs-trans-rotate180);
43
+ width: var(--filterbtn-caret-size, 1rem);
44
+ }
45
+
46
+ .bs-filter-button:where([data-size="sm"],[data-size="xs"]) {
47
+ --filterbtn-height: 1.75rem;
48
+ --filterbtn-text-size: var(--bs-text-sm);
49
+ --filterbtn-caret-size: .75rem;
50
+ }
51
+
52
+ .bs-filter-button:where([data-size="sm"]) {
53
+ --filterbtn-text-size: var(--bs-text-sm);
54
+ }
55
+
56
+ .bs-filter-button:where([data-size="xs"]) {
57
+ --filterbtn-text-size: var(--bs-text-xs);
58
+ --filterbtn-weight: 600;
59
+ }
60
+
61
+ /* Hover state */
62
+ .bs-filter-button:hover {
63
+ --filterbtn-color: var(--bs-blue-base);
64
+ }
65
+
66
+ /* Focus state */
67
+ .bs-filter-button:where(:focus-visible) {
68
+ --filterbtn-focus-color: var(--bs-blue-base);
69
+ }
70
+
71
+ /* Filter open state */
72
+ .bs-filter-button:where([aria-expanded="true"],[data-open="true"]) {
73
+ --filterbtn-caret-transform: rotate(180deg);
74
+ }
75
+
76
+ /* Badge non-standard color */
77
+ .bs-filter-button :where(.bs-badge) {
78
+ --badge-bg: var(--bs-ink-blue);
79
+ }
80
+
81
+ :where(.dark) .bs-filter-button :where(.bs-badge) {
82
+ --badge-bg: var(--bs-blue-medium);
83
+ }
84
+
85
+ .bs-filter-button:hover :where(.bs-badge) {
86
+ --badge-bg: var(--filterbtn-color);
87
+ }
88
+
89
+ /* Disabled state */
90
+ .bs-filter-button:where(:disabled) {
91
+ --filterbtn-color: var(--bs-ink-disabled);
92
+ cursor: default;
93
+ }
94
+
95
+ .bs-filter-button:where(:disabled) :where(.bs-badge) {
96
+ --badge-bg: var(--bs-bg-disabled);
97
+ --badge-text: var(--bs-ink-disabled);
98
+ }
99
+
100
+ }
101
+
@@ -11,7 +11,7 @@
11
11
  border-radius: .25rem;
12
12
  color: var(--bs-ink-base);
13
13
  display: flex;
14
- height: 2.5rem;
14
+ height: var(--input-addon-height, 2.5rem);
15
15
  overflow: hidden;
16
16
  padding: 0;
17
17
  pointer-events: none;
@@ -53,7 +53,7 @@ and issues with box-sizing
53
53
  flex-shrink: 0;
54
54
  position: relative;
55
55
  }
56
- .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"]), .bs-input-addon, bs-input) {
56
+ .bs-input-addon > :where([data-autowidth]:not([data-autowidth="false"]), .bs-input-addon, bs-input, .bs-input) {
57
57
  flex-grow: 1;
58
58
  flex-shrink: 1;
59
59
  }
@@ -74,6 +74,7 @@ and issues with box-sizing
74
74
  .bs-input-addon > *,
75
75
  .bs-input-addon :where(input, select),
76
76
  .bs-input-addon :is(bs-input, bs-select) :where(input, select),
77
+ .bs-input-addon :is(input, select):where(.bs-input, .bs-select),
77
78
  .bs-input-addon :where(.bs-input-addon) {
78
79
  --input-border: transparent;
79
80
  --input-border-width: 0px;
@@ -83,9 +84,11 @@ and issues with box-sizing
83
84
  --input-addon-nested-border: transparent;
84
85
  }
85
86
 
86
- .bs-input-addon :where(:focus-within) :where(input, select),
87
+ .bs-input-addon :where(:focus-within) :where(input, select, button),
87
88
  .bs-input-addon :where(:focus-within) :is(bs-input, bs-select) :where(input, select),
88
- .bs-input-addon :where(input, select):where(:focus, :focus-within, :focus-visible),
89
+ .bs-input-addon :where(:focus-within) :is(input, select, button):where(.bs-input, .bs-select),
90
+ .bs-input-addon :where(input, select, button):where(:focus, :focus-within, :focus-visible),
91
+ .bs-input-addon :is(input, select):where(.bs-input, .bs-select):where(:focus, :focus-within, :focus-visible),
89
92
  .bs-input-addon :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
90
93
  --input-border: transparent;
91
94
  box-shadow: none;
@@ -139,6 +142,7 @@ and issues with box-sizing
139
142
  .bs-input-addon:where(:not([data-multifocus]):focus-within),
140
143
  .bs-input-addon:where([data-multifocus="false"]:focus-within),
141
144
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :where(input, select):where(:focus, :focus-within, :focus-visible),
145
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :is(input, select):where(.bs-input, .bs-select):where(:focus, :focus-within, :focus-visible),
142
146
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) :is(bs-input, bs-select) :where(input, select):where(:focus, :focus-within, :focus-visible) {
143
147
  --input-border: var(--focus-border);
144
148
  position: relative;
@@ -154,11 +158,13 @@ and issues with box-sizing
154
158
  z-index: 1;
155
159
  }
156
160
 
157
- .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(:not(.bs-input-addon)) > :where(input:focus, select:focus),
161
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(:not(.bs-input-addon)) > :where(input:focus, select:focus, button:focus),
162
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :is(input, select):where(.bs-input, .bs-select):where(:focus),
158
163
  .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :is(bs-input, bs-select) :where(input:focus, select:focus),
159
- .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(input:focus, select:focus) {
164
+ .bs-input-addon:where([data-multifocus]:not([data-multifocus="false"])) > :where(input:focus, select:focus, button:focus) {
160
165
  border-radius: .25rem;
161
166
  box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
167
+ z-index: 1;
162
168
  }
163
169
 
164
170
  .bs-input-addon:where(:not([data-multifocus]):focus-within)::after,
@@ -183,7 +189,7 @@ and issues with box-sizing
183
189
 
184
190
  /* -------- Disabled styles -------- */
185
191
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])),
186
- .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) bs-button .bs-button {
192
+ .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) .bs-button {
187
193
  --input-bg: var(--bs-gray-200);
188
194
  --input-border: var(--bs-gray-400);
189
195
  color: var(--bs-gray-400);
@@ -8,12 +8,13 @@
8
8
  box-sizing: content-box;
9
9
  }
10
10
 
11
- .bs-input-search:where(.bs-input-addon) :where([data-component="bs-icon-search"]) {
12
- --icon-size: 1.75rem;
13
- padding-left: 0.75rem;
11
+ .bs-input-search :where([data-component="bs-icon-search"]) {
12
+ --icon-size: var(--search-icon-size, 1.75rem);
13
+ padding: var(--search-icon-padding, 0 0 0 .75rem);
14
14
  }
15
15
 
16
- .bs-input-search:where(.bs-input-addon) :where(button) {
16
+ /* Clear Button */
17
+ .bs-input-search button {
17
18
  align-items: center;
18
19
  background-color: transparent;
19
20
  cursor: pointer;
@@ -24,11 +25,40 @@
24
25
  transition: transform 100ms ease-in-out;
25
26
  }
26
27
 
27
- .bs-input-search:where(.bs-input-addon) :where(button:active) {
28
+ .bs-input-search button:where(:active) {
28
29
  transform: scale(0.97);
29
30
  transform-origin: center;
30
31
  box-shadow: inset 0px 0px 4px 1px var(--bs-blue-base);
31
32
  }
32
33
 
34
+ .bs-input-search button:where(:focus) {
35
+ border-radius: .25rem;
36
+ box-shadow: var(--focus-border) 0px 0px 0px 1px inset;
37
+ z-index: 1;
38
+ }
39
+
40
+
41
+ /* Filter variant */
42
+
43
+ .bs-input-search:where([data-variant="filter"]) {
44
+ --focus-border: transparent;
45
+ --input-border: transparent;
46
+ --input-addon-height: 1.5rem;
47
+ --input-caret: var(--bs-blue-base);
48
+ --input-padding-block: 0 0.125rem;
49
+ --input-padding-inline: 0.5rem;
50
+ --input-placeholder: var(--bs-ink-light);
51
+ --input-text-size: var(--bs-text-sm);
52
+ --search-icon-size: 1rem;
53
+ --search-icon-padding: 0;
54
+ }
55
+
56
+ /* -------- Disabled styles -------- */
57
+ .bs-input-addon:where([data-variant="filter"][data-disabled="true"]),
58
+ .bs-input-addon:where([data-variant="filter"][data-disabled="true"]) :is(.bs-button, .bs-input) {
59
+ --input-bg: var(--bs-bg-base);
60
+ --input-border: transparent;
61
+ }
62
+
33
63
  }
34
64
 
@@ -5,26 +5,36 @@
5
5
  margin-top: 0.25rem;
6
6
  }
7
7
 
8
+ /*
9
+ Custom properties:
10
+ --input-bg (background color)
11
+ --input-border (border color)
12
+ --input-border-width (border width)
13
+ --input-caret (caret color)
14
+ --input-padding-block (padding block)
15
+ --input-padding-inline (padding inline)
16
+ --input-placeholder (placeholder color)
17
+ --input-text-size (font size)
18
+ */
19
+
8
20
  input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
9
21
  textarea,
10
22
  select,
11
23
  :is(.bs-input, .bs-select, .bs-textarea) {
12
- --input-bg: var(--bs-bg-base);
13
- --input-border: var(--bs-violet-medium);
14
24
  appearance: none;
15
- background-color: var(--input-bg);
16
- border-color: var(--input-border);
25
+ background-color: var(--input-bg, var(--bs-bg-base));
26
+ border-color: var(--input-border, var(--bs-violet-medium));
17
27
  border-radius: 0.25rem;
18
28
  border-style: solid;
19
29
  border-width: var(--input-border-width, 1px);
20
- caret-color: var(--bs-blue-base);
30
+ caret-color: var(--input-caret, var(--bs-blue-base));
21
31
  color: var(--bs-ink-base);
22
- font-size: var(--bs-text-base);
32
+ font-size: var(--input-text-size, var(--bs-text-base));
23
33
  font-weight: 400;
24
34
  height: 2.5rem;
25
35
  line-height: var(--bs-leading-base);
26
- min-height: 2.5rem;
27
- padding-inline: 0.75rem;
36
+ padding-block: var(--input-padding-block, 0.0625rem);
37
+ padding-inline: var(--input-padding-inline, 0.75rem);
28
38
  }
29
39
 
30
40
  input:where(:not([type='checkbox'], [type='radio'], [type='file'], [type='range'])),
@@ -49,7 +59,7 @@ textarea {
49
59
 
50
60
  :is(input, textarea, select)::placeholder,
51
61
  :is(.bs-input, .bs-select, .bs-textarea)::placeholder {
52
- color: var(--bs-violet-lightest);
62
+ color: var(--input-placeholder, var(--bs-violet-lightest));
53
63
  }
54
64
  :is(input, textarea, select):where(:focus-visible)::placeholder,
55
65
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible)::placeholder {
@@ -59,6 +69,7 @@ textarea {
59
69
  :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:focus-visible),
60
70
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible) {
61
71
  --input-border: var(--bs-blue-base);
72
+ outline-style: none;
62
73
  outline-width: 0px;
63
74
  }
64
75
 
@@ -76,7 +76,7 @@
76
76
  .bs-accordion :where(header button) > :where([data-position="end"]) {
77
77
  grid-area: end;
78
78
  transform: rotate(0);
79
- transition: transform 250ms ease-out;
79
+ transition: var(--bs-trans-rotate180);
80
80
  }
81
81
 
82
82
  .bs-accordion :where(header[data-open]:not([data-open="false"])) :where([data-position="end"]) {
@@ -1,9 +1,13 @@
1
1
  .bs-badge {
2
2
  --badge-bg: var(--bs-red-base);
3
3
  --badge-text: var(--bs-white);
4
+ display: inline-block;
4
5
  }
5
6
 
6
- .bs-badge[data-position^='left']::before,
7
+ /* ------ Badge wrapped around text ------ */
8
+
9
+ /* Badge DOT */
10
+ .bs-badge:where([data-position^='left'])::before,
7
11
  .bs-badge:where(:not([data-position^='left']))::after {
8
12
  align-items: center;
9
13
  background: var(--badge-bg);
@@ -25,11 +29,13 @@
25
29
  font-size: 0.8125em;
26
30
  }
27
31
 
28
- .bs-badge[data-count]:where([data-position^='left'])::before,
29
- .bs-badge[data-count]:where(:not([data-position^='left']))::after {
32
+ /* Badge COUNT */
33
+
34
+ .bs-badge:where([data-count][data-position^='left'])::before,
35
+ .bs-badge:where([data-count]:not([data-position^='left']))::after {
30
36
  color: var(--badge-text);
31
37
  content: attr(data-count);
32
- min-height: 1rem;
38
+ height: 1rem;
33
39
  min-width: 1rem;
34
40
  padding: 0 4px;
35
41
  top: -0.0625rem;
@@ -37,28 +43,49 @@
37
43
  width: auto;
38
44
  }
39
45
 
40
- .bs-badge[data-count]::before {
41
- margin-right: 0.25rem;
46
+ .bs-badge:where([data-count='0'])::before,
47
+ .bs-badge:where([data-count='0'])::after {
48
+ display: none;
42
49
  }
43
50
 
44
- .bs-badge[data-count]::after {
45
- margin-left: 0.25rem;
51
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::before,
52
+ .bs-badge:where([data-show-zero]):where(:not([data-show-zero="false"]))::after {
53
+ display: inline-flex;
46
54
  }
47
55
 
48
- .bs-badge[data-count='0']::before,
49
- .bs-badge[data-count='0']::after {
50
- display: none;
56
+ /* Badge SPACING against wrapped text */
57
+
58
+ .bs-badge::before {
59
+ margin-right: 0.25rem;
51
60
  }
52
61
 
53
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::before,
54
- .bs-badge[data-show-zero]:where(:not([data-show-zero="false"]))::after {
55
- display: inline-flex;
62
+ .bs-badge::after {
63
+ margin-left: 0.25rem;
56
64
  }
57
65
 
58
- .bs-badge[data-badge-color^='blue'] {
66
+ /* Badge COLORS */
67
+
68
+ .bs-badge:where([data-badge-color^='blue']) {
59
69
  --badge-bg: var(--bs-blue-base);
60
70
  }
61
- .bs-badge[data-badge-color^='white'] {
71
+ .bs-badge:where([data-badge-color^='white']) {
62
72
  --badge-bg: var(--bs-white);
63
73
  --badge-text: var(--bs-black);
64
74
  }
75
+
76
+ /* ------ Standalone Badge (not wrapped around text) ------ */
77
+ .bs-badge:where([data-variant="notext"]) {
78
+ align-items: center;
79
+ display: inline-flex;
80
+ justify-content: center;
81
+ }
82
+
83
+ .bs-badge:where([data-variant="notext"]) {
84
+ line-height: 1;
85
+ }
86
+
87
+ .bs-badge:where([data-variant="notext"])::after,
88
+ .bs-badge:where([data-variant="notext"])::before {
89
+ margin: 0;
90
+ top: unset;
91
+ }