@wwtdev/bsds-css 2.1.2 → 2.1.4

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.
@@ -30,12 +30,11 @@ a.bs-circle-button {
30
30
  text-decoration: none;
31
31
  }
32
32
 
33
- .bs-circle-button::before {
33
+ .bs-circle-button :where(.bs-circle-button-icon)::before {
34
34
  border-color: var(--btn-border-color);
35
35
  border-radius: var(--btn-border-radius);
36
36
  border-style: solid;
37
37
  border-width: 0.125rem;
38
- content: '';
39
38
  height: calc(100% + 0.5rem);
40
39
  inset: -0.25rem;
41
40
  position: absolute;
@@ -61,17 +60,17 @@ a.bs-circle-button {
61
60
  --icon-size: var(--btn-icon-size);
62
61
  }
63
62
 
64
-
65
- /* Button Size */
66
- .bs-circle-button:where([data-size^='sm']) {
67
- --btn-icon-padding: .375rem;
68
- --btn-icon-size: .75rem;
69
- --btn-text-size: var(--bs-text-sm);
63
+ /* non-bs-icon svgs */
64
+ .bs-circle-button :where(.bs-circle-button-icon) > :where(svg) {
65
+ height: var(--btn-icon-size);
66
+ width: var(--btn-icon-size);
70
67
  }
71
68
 
72
69
  /* Icon Buttons with Text */
73
70
  .bs-circle-button:where([data-text]:not([data-text="false"])) {
74
- --btn-border-radius: 0.5rem;
71
+ --btn-text-size: var(--bs-text-md);
72
+ --btn-icon-size: 0.75rem;
73
+ --btn-icon-padding: 0.375rem;
75
74
  }
76
75
 
77
76
  /* Ghost Buttons */
@@ -118,10 +117,14 @@ a.bs-circle-button {
118
117
  inset 0px 0px 4px 1px var(--btn-highlight);
119
118
  }
120
119
 
121
- .bs-circle-button:focus-visible {
120
+ .bs-circle-button:where(:focus-visible) {
122
121
  --btn-border-color: var(--btn-main);
123
122
  }
124
123
 
124
+ .bs-circle-button:where(:focus-visible) :where(.bs-circle-button-icon)::before {
125
+ content: '';
126
+ }
127
+
125
128
  /* Disabled State */
126
129
  .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) /* for links as buttons */ {
127
130
  --btn-icon-stroke-color: var(--bs-ink-disabled);
@@ -131,3 +134,23 @@ a.bs-circle-button {
131
134
  .bs-circle-button:where(:disabled, [aria-disabled]:not([aria-disabled="false"])) :where(.bs-circle-button-icon) {
132
135
  background-color: var(--bs-bg-disabled);
133
136
  }
137
+
138
+
139
+ /* Button Size */
140
+ .bs-circle-button:where([data-size^='sm']) {
141
+ --btn-icon-padding: .375rem;
142
+ --btn-icon-size: .75rem;
143
+ --btn-text-size: var(--bs-text-sm);
144
+ }
145
+
146
+ .bs-circle-button:where([data-size^='sm'][data-text]:not([data-text="false"])) {
147
+ --btn-icon-padding: .3125rem;
148
+ --btn-icon-size: .625rem;
149
+ --btn-text-size: var(--bs-text-base);
150
+ }
151
+
152
+ .bs-circle-button:where([data-size='xs'][data-text]:not([data-text="false"])) {
153
+ --btn-icon-padding: .25rem;
154
+ --btn-icon-size: .5rem;
155
+ --btn-text-size: var(--bs-text-sm);
156
+ }
@@ -1,15 +1,13 @@
1
1
  /* Option list */
2
2
  .bs-dropdown-options {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 0.5rem;
3
6
  list-style: none;
4
- margin-bottom: 0.25rem;
5
- margin-top: 0.25rem;
7
+ margin-block: 0.25rem;
6
8
  max-height: var(--options-height-max, 20rem);/* constrain scrollable to options section */
7
9
  overflow-y: auto;
8
- padding: 0;
9
- }
10
-
11
- .bs-dropdown-options :where(li:first-child) {
12
- margin-top: 0.5rem;
10
+ padding-block: 0.5rem;
13
11
  }
14
12
 
15
13
  /* Option list item */
@@ -24,11 +22,8 @@
24
22
  column-gap: 0.5rem;
25
23
  cursor: pointer;
26
24
  display: grid;
27
- margin-bottom: 0.5rem;
28
- padding-bottom: 0.25rem;
29
- padding-left: 1.25rem;
30
- padding-right: 1.375rem;
31
- padding-top: 0.25rem;
25
+ padding-block: 0.25rem;
26
+ padding-inline: 1.25rem;
32
27
  row-gap: 0.125rem;
33
28
  word-break: break-word;
34
29
  word-wrap: break-word;
@@ -40,7 +35,7 @@
40
35
  }
41
36
 
42
37
  /* Variant: description */
43
- .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"] :nth-child(2)) {
38
+ .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"] > :nth-child(2)) {
44
39
  color: var(--bs-ink-light);
45
40
  font-size: var(--bs-text-xs);
46
41
  min-height: 1.125rem;
@@ -48,7 +43,7 @@
48
43
  }
49
44
 
50
45
  /* Variant: 2-col description */
51
- .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"] :nth-child(3)) {
46
+ .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"] > :nth-child(3)) {
52
47
  color: var(--bs-ink-light);
53
48
  font-size: var(--bs-text-xs);
54
49
  grid-column-start: 2;
@@ -57,7 +52,7 @@
57
52
  }
58
53
 
59
54
  /* Hover or data-selected */
60
- .bs-dropdown-options :where(li:hover),
55
+ .bs-dropdown-options :where(li:not([role="separator"]):hover),
61
56
  .bs-dropdown-options :where(li[data-selected]) {
62
57
  background-color: var(--bs-bg-medium);
63
58
  border-left: 4px solid var(--bs-blue-base);
@@ -76,18 +71,18 @@
76
71
  }
77
72
 
78
73
  /* Hover or data-selected for 2-col/description variants */
79
- .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"]:hover :nth-child(2)),
80
- .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"]:hover :nth-child(3)),
81
- .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"][data-selected] :nth-child(2)),
82
- .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"][data-selected] :nth-child(3)) {
74
+ .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"]:hover > :nth-child(2)),
75
+ .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"]:hover > :nth-child(3)),
76
+ .bs-dropdown-options :where(li:not([data-variant~="2-col"])[data-variant~="description"][data-selected] > :nth-child(2)),
77
+ .bs-dropdown-options :where(li[data-variant~="2-col"][data-variant~="description"][data-selected] > :nth-child(3)) {
83
78
  color: var(--bs-blue-base);
84
79
  }
85
80
 
86
81
  /* Hover or data-selected for negative + 2-col/description variants */
87
- .bs-dropdown-options :where(li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"]:hover :nth-child(2)),
88
- .bs-dropdown-options :where(li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"]:hover :nth-child(3)),
89
- .bs-dropdown-options :where(li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"][data-selected] :nth-child(2)),
90
- .bs-dropdown-options :where(li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"][data-selected] :nth-child(3)) {
82
+ .bs-dropdown-options :where(li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"]:hover > :nth-child(2)),
83
+ .bs-dropdown-options :where(li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"]:hover > :nth-child(3)),
84
+ .bs-dropdown-options :where(li[data-variant~="negative"]:not([data-variant~="2-col"])[data-variant~="description"][data-selected] > :nth-child(2)),
85
+ .bs-dropdown-options :where(li[data-variant~="negative"][data-variant~="2-col"][data-variant~="description"][data-selected] > :nth-child(3)) {
91
86
  color: var(--bs-red-500);
92
87
  }
93
88
 
@@ -120,9 +115,35 @@
120
115
  --focus-border-color: var(--bs-red-200);
121
116
  }
122
117
 
118
+ /* Multi-select divider */
119
+ .bs-dropdown-options :where(li[role="separator"]) {
120
+ cursor: default;
121
+ padding-block: 0.125rem;
122
+ padding-right: 1.375rem;
123
+ }
124
+
125
+ .bs-dropdown-options :where(hr) {
126
+ background-color: var(--bs-navy-light);
127
+ height: .0625rem;
128
+ margin-block: 0;
129
+ margin-inline: 0;
130
+ }
131
+
123
132
  @media (min-width: 752px) {
124
133
  .bs-dropdown-options :where(li) {
125
134
  padding-left: 0.5rem;
126
135
  padding-right: 0.75rem;
127
136
  }
137
+
138
+ .bs-dropdown-options :where(li[role="separator"]) {
139
+ padding-right: 0.625rem;
140
+ }
141
+
142
+ .bs-dropdown-options :where(li:focus-visible) {
143
+ padding-left: 0.625rem;
144
+ }
145
+
146
+ .bs-dropdown-options :where(li[data-selected]:focus-visible) {
147
+ padding-left: 0.5rem;
148
+ }
128
149
  }
@@ -17,6 +17,10 @@
17
17
  position: relative;
18
18
  }
19
19
 
20
+ .bs-input-addon * {
21
+ background-color: transparent;
22
+ }
23
+
20
24
  /**
21
25
  Implement an outer 'border' via pseudo-element instead of
22
26
  on main element to avoid content shifting, double-stroke effect,
@@ -61,7 +65,6 @@ and issues with box-sizing
61
65
  }
62
66
 
63
67
  .bs-input-addon > *:where(:not(.bs-input-addon)) {
64
- background-color: var(--input-bg, var(--bs-bg-base));
65
68
  border-width: 0px;
66
69
  display: flex;
67
70
  height: 100%;
@@ -98,7 +101,7 @@ and issues with box-sizing
98
101
  /** Inner borders should be straight; shown only if variant: "inner-bordered" */
99
102
  .bs-input-addon:where([data-variant="inner-bordered"]),
100
103
  .bs-input-addon:where([data-variant="inner-bordered"]) :where(.bs-input-addon) {
101
- --input-addon-nested-border: var(--bs-violet-100);
104
+ --input-addon-nested-border: var(--bs-violet-lightest);
102
105
  }
103
106
 
104
107
  .bs-input-addon > :where(.bs-input-addon:not(:last-child, :focus-within)),
@@ -132,6 +135,10 @@ and issues with box-sizing
132
135
  border-radius: 0px;
133
136
  }
134
137
 
138
+ /* -------- Hover styles -------- */
139
+ .bs-input-addon:hover {
140
+ --input-bg: var(--bs-bg-input-hover);
141
+ }
135
142
 
136
143
  /* -------- Focus styles -------- */
137
144
  .bs-input-addon {
@@ -189,9 +196,9 @@ and issues with box-sizing
189
196
  /* -------- Disabled styles -------- */
190
197
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])),
191
198
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) .bs-button {
192
- --input-bg: var(--bs-gray-200);
193
- --input-border: var(--bs-gray-400);
194
- color: var(--bs-gray-400);
199
+ --input-bg: var(--bs-bg-disabled);
200
+ --input-border: var(--bs-ink-disabled);
201
+ color: var(--bs-ink-disabled);
195
202
  }
196
203
  .bs-input-addon:where([data-disabled]:not([data-disabled="false"])) * {
197
204
  pointer-events: none;
@@ -52,6 +52,11 @@
52
52
  --search-icon-padding: 0;
53
53
  }
54
54
 
55
+ /* Filter variant: cancels out base hover state styles */
56
+ .bs-input-addon:where([data-variant="filter"]):hover {
57
+ --input-bg: var(--bs-bg-base);
58
+ }
59
+
55
60
  /* -------- Disabled styles -------- */
56
61
  .bs-input-addon:where([data-variant="filter"][data-disabled="true"]),
57
62
  .bs-input-addon:where([data-variant="filter"][data-disabled="true"]) :is(.bs-button, .bs-input) {
@@ -7,21 +7,23 @@ label:where(.bs-label) {
7
7
  .bs-label,
8
8
  :where(label, legend) {
9
9
  --label-color: var(--bs-ink-base);
10
-
11
10
  color: var(--label-color);
12
11
  font-size: var(--bs-text-sm);
13
12
  font-weight: 600;
14
13
  line-height: var(--bs-leading-base);
15
14
  }
16
15
 
17
- :where([data-required]:not([data-required="false"])),
16
+ /* Required asterisk */
17
+ :where(label, legend) :where([data-required]:not([data-required="false"])),
18
18
  .bs-label :where([data-required="true"]) {
19
- --label-color: var(--bs-ink-red);
19
+ color: var(--label-asterisk-color, var(--bs-ink-red));
20
20
  }
21
21
 
22
+ /* Disabled state */
22
23
  :where(label[data-disabled]:not([data-disabled="false"])),
23
24
  :where(label[data-disabled]:not([data-disabled="false"])) *,
24
25
  .bs-label:where([data-disabled="true"]),
25
26
  .bs-label:where([data-disabled="true"]) * {
27
+ --label-asterisk-color: transparent;
26
28
  --label-color: var(--bs-ink-disabled);
27
29
  }
@@ -54,13 +54,13 @@
54
54
  width: var(--switch-width);
55
55
  }
56
56
 
57
- .bs-switch input:where(:checked) ~ span,
58
- .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span {
57
+ .bs-switch :where(input:checked) ~ :where(span),
58
+ .bs-switch:where([aria-pressed]:not([aria-pressed="false"])) :where(span) {
59
59
  --switch-background: var(--bs-blue-base);
60
60
  }
61
61
 
62
62
  /* Toggle "ball" */
63
- .bs-switch span::before {
63
+ .bs-switch :where(span)::before {
64
64
  background-color: var(--ball-background);
65
65
  border-radius: 50%;
66
66
  box-sizing: border-box;
@@ -75,34 +75,25 @@
75
75
  z-index: 2;
76
76
  }
77
77
 
78
- .bs-switch input:where(:checked) ~ span::before,
79
- .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span::before {
78
+ .bs-switch :where(input:checked) ~ :where(span)::before,
79
+ .bs-switch:where([aria-pressed]:not([aria-pressed="false"])) :where(span)::before {
80
80
  transform: translate(calc(var(--switch-width) - var(--offset-double) - var(--ball-diameter)), -50%);
81
81
  }
82
82
 
83
- .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::before,
84
- .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::before {
83
+ .bs-switch :where(input:checked) ~ :where(span[data-inner-on-label][data-inner-off-label])::before,
84
+ .bs-switch:where([aria-pressed]:not([aria-pressed="false"])) :where(span[data-inner-on-label][data-inner-off-label])::before {
85
85
  transform: translate(calc(var(--switch-width) - var(--offset-double) - var(--ball-diameter)), -50%);
86
86
  }
87
87
 
88
88
 
89
89
  /* Inner "on/off" text */
90
-
91
- .bs-switch span:where([data-inner-on-label][data-inner-off-label]) {
92
- color: white;
93
- --switch-width: 3.5rem;
94
- }
95
-
96
- .bs-switch:where([data-size="sm"]) span:where([data-inner-on-label][data-inner-off-label]) {
97
- --switch-width: 2.625rem;
98
- }
99
-
100
- .bs-switch span::after {
90
+ .bs-switch :where(span)::after {
101
91
  align-items: center;
102
92
  color: var(--ball-background);
93
+ content: var(--inner-label-text);
103
94
  display: flex;
104
95
  height: 100%;
105
- justify-content: flex-start;
96
+ justify-content: var(--inner-label-position, flex-start);
106
97
  left: 0;
107
98
  line-height: var(--inner-text-line-height);
108
99
  padding: var(--inner-text-padding);
@@ -112,35 +103,45 @@
112
103
  width: 100%;
113
104
  }
114
105
 
115
- .bs-switch input:where(:not(:checked)) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
116
- .bs-switch:where([aria-pressed="false"]) span:where([data-inner-on-label][data-inner-off-label])::after {
117
- content: attr(data-inner-off-label);
118
- justify-content: flex-end;
106
+ .bs-switch :where([data-inner-on-label][data-inner-off-label]) {
107
+ --switch-width: 3.5rem;
108
+ }
109
+
110
+ .bs-switch:where([data-size="sm"]) :where([data-inner-on-label][data-inner-off-label]) {
111
+ --switch-width: 2.625rem;
119
112
  }
120
113
 
121
- .bs-switch input:where(:checked) ~ span:where([data-inner-on-label][data-inner-off-label])::after,
122
- .bs-switch:where([aria-pressed]):where(:not([aria-pressed="false"])) span:where([data-inner-on-label][data-inner-off-label])::after {
123
- content: attr(data-inner-on-label);
124
- justify-content: flex-start;
114
+ .bs-switch :where(input:not(:checked)) ~ :where([data-inner-on-label][data-inner-off-label])::after,
115
+ .bs-switch:where([aria-pressed="false"]) :where([data-inner-on-label][data-inner-off-label])::after {
116
+ --inner-label-position: flex-end;
117
+ --inner-label-text: attr(data-inner-off-label);
118
+ }
119
+
120
+ .bs-switch :where(input:checked) ~ :where([data-inner-on-label][data-inner-off-label])::after,
121
+ .bs-switch:where([aria-pressed]:not([aria-pressed="false"])) :where([data-inner-on-label][data-inner-off-label])::after {
122
+ --inner-label-text: attr(data-inner-on-label);
125
123
  }
126
124
 
127
125
  /* Focus state */
128
126
 
129
- .bs-switch :where(input:focus-visible) + span {
127
+ .bs-switch :where(input:focus-visible) + :where(span),
128
+ .bs-switch:where(:focus-visible) :where(button span) {
130
129
  box-shadow: 0 0 0 2px var(--offset-color, var(--bs-bg-base)),
131
130
  0 0 0 4px var(--outline-color, var(--bs-blue-base));
132
131
  outline: 2px solid transparent;
133
132
  }
134
- :where(.box) .bs-switch :where(input:focus-visible) + span {
133
+ :where(.box) .bs-switch :where(input:focus-visible) + :where(span),
134
+ :where(.box) .bs-switch:where(:focus-visible) :where(button span) {
135
135
  --offset-color: var(--bs-bg-medium);
136
136
  }
137
- :where(.box[data-invert]) .bs-switch :where(input:focus-visible) + span {
137
+ :where(.box[data-invert]) .bs-switch :where(input:focus-visible) + :where(span),
138
+ :where(.box[data-invert]) .bs-switch:where(:focus-visible) :where(button span) {
138
139
  --offset-color: var(--bs-bg-invert-base);
139
140
  }
140
141
 
141
142
  /* Disabled state */
142
-
143
- .bs-switch:where([data-disabled]:not([data-disabled="false"])) {
143
+ .bs-switch:where([data-disabled]:not([data-disabled="false"]), :disabled, [disabled]),
144
+ .bs-switch:where([data-disabled]:not([data-disabled="false"]), :disabled, [disabled]) :is(input ~ span, button span) {
144
145
  --ball-background: var(--bs-ink-disabled);
145
146
  --switch-background: var(--bs-bg-disabled);
146
147
  }
@@ -65,6 +65,8 @@ textarea {
65
65
  opacity: 0;
66
66
  }
67
67
 
68
+ /* FOCUS state */
69
+
68
70
  :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:focus-visible),
69
71
  :is(.bs-input, .bs-select, .bs-textarea):where(:focus-visible) {
70
72
  --input-border: var(--bs-blue-base);
@@ -72,6 +74,15 @@ textarea {
72
74
  outline-width: 0px;
73
75
  }
74
76
 
77
+ /* HOVER state */
78
+
79
+ :is(input:where(:not([type='checkbox'], [type='radio'])), textarea, select):where(:hover),
80
+ :is(.bs-input, .bs-select, .bs-textarea):where(:hover) {
81
+ --input-bg: var(--bs-bg-input-hover);
82
+ }
83
+
84
+ /* DISABLED state */
85
+
75
86
  :is(input:where(:not([type='checkbox'],[type='radio'])), textarea, select):where(:disabled),
76
87
  :is(.bs-input, .bs-select, .bs-textarea):where(:disabled) {
77
88
  --input-border: var(--bs-ink-disabled);
@@ -104,8 +115,7 @@ see https://bugs.chromium.org/p/chromium/issues/detail?id=89530
104
115
  :is(input, textarea, select)[disabled]::placeholder,
105
116
  :is(.bs-input, .bs-textarea, .bs-select):disabled::placeholder,
106
117
  :is(.bs-input, .bs-textarea, .bs-select)[disabled]::placeholder {
107
- color: var(--bs-ink-disabled);
108
- opacity: 1;
118
+ opacity: 0;
109
119
  }
110
120
 
111
121
  /* Select */
@@ -21,7 +21,18 @@
21
21
  opacity: 1;
22
22
  }
23
23
 
24
- .bs-modal :where(.close-button-container) {
24
+ .bs-modal :where(.modal-header) {
25
+ align-items: center;
26
+ display: flex;
27
+ justify-content: space-between;
28
+ margin-bottom: 1.5rem;
29
+ }
30
+
31
+ .bs-modal :where(.modal-title) {
32
+ flex-grow: 1;
33
+ }
34
+
35
+ .bs-modal :where(.only-close-button-modal-header) {
25
36
  display: flex;
26
37
  justify-content: flex-end;
27
38
  margin-bottom: 1.5rem;
@@ -373,6 +373,9 @@ button {
373
373
  --bs-font-normal: 400;
374
374
  --bs-font-bold: 600;
375
375
 
376
+ /* Special use cases */
377
+ --bs-bg-input-hover: rgba(201, 202, 217, 0.20);
378
+
376
379
  /* deprecate / phase out.. */
377
380
  --bs-bg-subtle: var(--bs-gray-100);
378
381
  --bs-bg-invert: var(--bs-navy-500);