@wwtdev/bsds-css 2.0.8 → 2.1.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.
@@ -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);
@@ -14,6 +14,7 @@
14
14
  display: inline-flex;
15
15
  font-size: var(--bs-text-md);
16
16
  font-weight: 600;
17
+ height: 2.5rem;
17
18
  justify-content: center;
18
19
  line-height: 1.5;
19
20
  outline: 2px solid transparent;
@@ -143,7 +144,9 @@
143
144
 
144
145
  /* Button Size */
145
146
  .bs-button:where([data-size^='sm']) {
147
+ --btn-padding: .25rem .75rem .375rem;
146
148
  font-size: var(--bs-text-sm);
149
+ height: 1.75rem;
147
150
  }
148
151
  .bs-button:where([data-size^='sm']):where([data-text]:not([data-text="false"])) {
149
152
  font-size: var(--bs-text-base);
@@ -171,15 +174,6 @@
171
174
  background-color: transparent;
172
175
  }
173
176
 
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
177
  /* links as buttons */
184
178
  a.bs-button {
185
179
  align-items: center;
@@ -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
 
@@ -22,6 +22,16 @@
22
22
  opacity: 1;
23
23
  }
24
24
 
25
+ .bs-modal :where(.close-button-container) {
26
+ display: flex;
27
+ justify-content: flex-end;
28
+ margin-bottom: 1.5rem;
29
+ }
30
+
31
+ .bs-modal :where(.close-button) {
32
+ cursor: pointer;
33
+ }
34
+
25
35
  @media (min-width: 752px) {
26
36
  .bs-modal {
27
37
  left: 50%;
@@ -15,10 +15,9 @@
15
15
  font-size: var(--bs-text-xs);
16
16
  height: 1.5rem;
17
17
  gap: var(--pill-gap);
18
- line-height: 1.33;
19
- padding: 6px 6px 4px;
18
+ line-height: 1rem;
19
+ padding: 0 .375rem;
20
20
  text-decoration: none;
21
- vertical-align: middle;
22
21
  }
23
22
 
24
23
  :where(.bs-pill .bs-icon) {
@@ -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
+ }
@@ -2,7 +2,7 @@
2
2
  --btn-main: var(--bs-blue-base);
3
3
  --btn-secondary: var(--bs-blue-medium);
4
4
  --btn-highlight: var(--bs-blue-100);
5
- --btn-padding: .25rem .75rem .375rem;
5
+ --btn-padding: .25rem .75rem;
6
6
  --btn-focus-pseudo-width: calc(100% + 0.5rem);
7
7
  align-items: center;
8
8
  background-color: var(--btn-main);
@@ -13,6 +13,7 @@
13
13
  display: inline-flex;
14
14
  font-size: var(--bs-text-md);
15
15
  font-weight: 600;
16
+ height: 2.5rem;
16
17
  justify-content: center;
17
18
  line-height: 1.5;
18
19
  outline: 2px solid transparent;
@@ -142,7 +143,9 @@
142
143
 
143
144
  /* Button Size */
144
145
  .bs-button:where([data-size^='sm']) {
146
+ --btn-padding: .25rem .75rem .375rem;
145
147
  font-size: var(--bs-text-sm);
148
+ height: 1.75rem;
146
149
  }
147
150
  .bs-button:where([data-size^='sm']):where([data-text]:not([data-text="false"])) {
148
151
  font-size: var(--bs-text-base);
@@ -170,15 +173,6 @@
170
173
  background-color: transparent;
171
174
  }
172
175
 
173
- /* Icon Height */
174
- .bs-button :where(svg:not([height])) {
175
- height: var(--bs-text-base);
176
- }
177
-
178
- .bs-button:where([data-size^='sm']) :where(svg:not([height])) {
179
- height: var(--bs-text-xs);
180
- }
181
-
182
176
  /* links as buttons */
183
177
  a.bs-button {
184
178
  align-items: center;
@@ -39,7 +39,7 @@ a.bs-circle-button {
39
39
  height: calc(100% + 0.5rem);
40
40
  inset: -0.25rem;
41
41
  position: absolute;
42
- transition: border-color 0.125s ease-in-out;
42
+ transition: border-color 125ms ease-in-out, transform 100ms ease-in-out;
43
43
  width: calc(100% + 0.5rem);
44
44
  }
45
45
 
@@ -100,10 +100,12 @@ a.bs-circle-button {
100
100
  box-shadow: inset 0px 0px 4px 1px var(--btn-main);
101
101
  }
102
102
 
103
- .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon) {
103
+ .bs-circle-button:where([data-direction="right"]):hover :where(.bs-circle-button-icon),
104
+ .bs-circle-button:where([data-direction="right"]):hover::before {
104
105
  transform: translateX(.25rem);
105
106
  }
106
- .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon) {
107
+ .bs-circle-button:where([data-direction="left"]):hover :where(.bs-circle-button-icon),
108
+ .bs-circle-button:where([data-direction="left"]):hover::before {
107
109
  transform: translateX(-.25rem);
108
110
  }
109
111