@databricks/design-system 2.0.3 → 2.0.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.
- package/CHANGELOG.md +18 -0
- package/dist/{WizardStepContentWrapper-DsAS2ZAT.js → WizardStepContentWrapper-8bs2FwRi.js} +118 -34
- package/dist/WizardStepContentWrapper-8bs2FwRi.js.map +1 -0
- package/dist/index-dark.css +31 -31
- package/dist/index-dark.mitigated.css +31 -31
- package/dist/index.css +166 -166
- package/dist/index.js +34 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mitigated.css +166 -166
- package/dist/patterns.js +1 -1
- package/dist/test-utils/rtl.js +1 -1
- package/dist/test-utils/rtl.js.map +1 -1
- package/dist-types/design-system/Alert/Alert.d.ts +1 -1
- package/dist-types/design-system/DesignSystemProvider/DesignSystemProvider.d.ts +28 -6
- package/dist-types/design-system/DesignSystemProvider/DesignTokenScopeWithEmotionTheme.d.ts +23 -0
- package/dist-types/design-system/DesignSystemProvider/index.d.ts +1 -0
- package/dist-types/test-utils/rtl/buttonVariants.d.ts +11 -0
- package/package.json +7 -1
- package/dist/WizardStepContentWrapper-DsAS2ZAT.js.map +0 -1
package/dist/index.mitigated.css
CHANGED
|
@@ -15806,27 +15806,27 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
15806
15806
|
Use this for any layout where items are laid out vertically.
|
|
15807
15807
|
|
|
15808
15808
|
\3c !-- Basic: default gap between each child -->
|
|
15809
|
-
<div class="
|
|
15809
|
+
<div class="db-stack">
|
|
15810
15810
|
<h2>Title</h2>
|
|
15811
15811
|
<p>Body</p>
|
|
15812
15812
|
<button>Action</button>
|
|
15813
15813
|
</div>
|
|
15814
15814
|
|
|
15815
15815
|
\3c !-- Wider gap for this instance -->
|
|
15816
|
-
<div class="
|
|
15816
|
+
<div class="db-stack" style="--db-stack-gap: var(--db-spacing-lg)">…</div>
|
|
15817
15817
|
|
|
15818
15818
|
\3c !-- Don't stretch children to full width (e.g. left-aligned buttons) -->
|
|
15819
|
-
<div class="
|
|
15819
|
+
<div class="db-stack" style="--db-stack-align: flex-start">…</div>
|
|
15820
15820
|
*/
|
|
15821
|
-
.
|
|
15821
|
+
.db-stack {
|
|
15822
15822
|
/* These variables act as the *parameters* for the stack instance. */
|
|
15823
|
-
--
|
|
15824
|
-
--
|
|
15823
|
+
--db-stack-gap: var(--db-spacing-xs);
|
|
15824
|
+
--db-stack-align: stretch;
|
|
15825
15825
|
|
|
15826
15826
|
display: flex;
|
|
15827
15827
|
flex-direction: column;
|
|
15828
|
-
align-items: var(--
|
|
15829
|
-
gap: var(--
|
|
15828
|
+
align-items: var(--db-stack-align);
|
|
15829
|
+
gap: var(--db-stack-gap);
|
|
15830
15830
|
}
|
|
15831
15831
|
|
|
15832
15832
|
/**
|
|
@@ -15834,29 +15834,29 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
15834
15834
|
Use this for any layout where items are laid out horizontally and should wrap on smaller viewport sizes.
|
|
15835
15835
|
|
|
15836
15836
|
\3c !-- Basic: items wrap as needed -->
|
|
15837
|
-
<div class="
|
|
15837
|
+
<div class="db-cluster">
|
|
15838
15838
|
<span>one</span>
|
|
15839
15839
|
<span>two</span>
|
|
15840
15840
|
<span>three</span>
|
|
15841
15841
|
</div>
|
|
15842
15842
|
|
|
15843
15843
|
\3c !-- Push children apart (e.g. title left, actions right) -->
|
|
15844
|
-
<div class="
|
|
15844
|
+
<div class="db-cluster" style="--db-cluster-justify: space-between">…</div>
|
|
15845
15845
|
|
|
15846
15846
|
\3c !-- Looser gap for this instance -->
|
|
15847
|
-
<div class="
|
|
15847
|
+
<div class="db-cluster" style="--db-cluster-gap: var(--db-spacing-sm)">…</div>
|
|
15848
15848
|
*/
|
|
15849
|
-
.
|
|
15849
|
+
.db-cluster {
|
|
15850
15850
|
/* These variables act as the *parameters* for the cluster instance. */
|
|
15851
|
-
--
|
|
15852
|
-
--
|
|
15853
|
-
--
|
|
15851
|
+
--db-cluster-gap: var(--db-spacing-2xs);
|
|
15852
|
+
--db-cluster-align: center;
|
|
15853
|
+
--db-cluster-justify: flex-start;
|
|
15854
15854
|
|
|
15855
15855
|
display: flex;
|
|
15856
15856
|
flex-wrap: wrap;
|
|
15857
|
-
align-items: var(--
|
|
15858
|
-
justify-content: var(--
|
|
15859
|
-
gap: var(--
|
|
15857
|
+
align-items: var(--db-cluster-align);
|
|
15858
|
+
justify-content: var(--db-cluster-justify);
|
|
15859
|
+
gap: var(--db-cluster-gap);
|
|
15860
15860
|
}
|
|
15861
15861
|
|
|
15862
15862
|
:where(:root), :where(.du-bois-light) {
|
|
@@ -16078,21 +16078,21 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16078
16078
|
*
|
|
16079
16079
|
* Structure (assumed by the React component):
|
|
16080
16080
|
*
|
|
16081
|
-
* <label class="
|
|
16082
|
-
* <input type="checkbox" class="
|
|
16083
|
-
* <span class="
|
|
16084
|
-
* <svg class="
|
|
16085
|
-
* <span class="
|
|
16081
|
+
* <label class="db-checkbox">
|
|
16082
|
+
* <input type="checkbox" class="db-checkbox-input" />
|
|
16083
|
+
* <span class="db-checkbox-indicator"> ← border + fill react to state
|
|
16084
|
+
* <svg class="db-checkbox-checkmark" .../> ← visible when :checked
|
|
16085
|
+
* <span class="db-checkbox-dash" /> ← visible when :indeterminate
|
|
16086
16086
|
* </span>
|
|
16087
|
-
* <span class="
|
|
16087
|
+
* <span class="db-checkbox-label">{children}</span>
|
|
16088
16088
|
* </label>
|
|
16089
16089
|
*
|
|
16090
|
-
* State and hiding rules target `.
|
|
16090
|
+
* State and hiding rules target `.db-checkbox-input` — the checkbox's OWN input —
|
|
16091
16091
|
* never a bare `input`: consumers may render an inline <input> (e.g. a number
|
|
16092
16092
|
* field) inside the label children, and a descendant `input` selector would hide
|
|
16093
16093
|
* / absolutely-position that field and mis-drive the `:has(…)` state rules. */
|
|
16094
16094
|
|
|
16095
|
-
.
|
|
16095
|
+
.db-checkbox {
|
|
16096
16096
|
/* `display: flex` (block-level), NOT `inline-flex`: an inline-flex root puts
|
|
16097
16097
|
* the label inside an inline-line-box whose leading pushes block-level siblings
|
|
16098
16098
|
* (e.g. `<FormMessage>`) down by a few pixels — making validation messages sit
|
|
@@ -16108,7 +16108,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16108
16108
|
user-select: none;
|
|
16109
16109
|
/* No `gap` here — spacing between indicator and label, plus the trailing
|
|
16110
16110
|
* whitespace that gives sibling checkboxes their visual separation, lives
|
|
16111
|
-
* on `.
|
|
16111
|
+
* on `.db-checkbox-label` as padding-inline. Matches AntD's `.{prefix}-checkbox + span`
|
|
16112
16112
|
* rule and the prior Emotion-based NativeCheckbox implementation. */
|
|
16113
16113
|
min-height: var(--db-line-height-base, 20px);
|
|
16114
16114
|
width: fit-content;
|
|
@@ -16118,43 +16118,43 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16118
16118
|
* visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
|
|
16119
16119
|
* anyway. Putting `:hover` on the root also makes the entire label area
|
|
16120
16120
|
* — not just the indicator square — drive the visual feedback. */
|
|
16121
|
-
.
|
|
16121
|
+
.db-checkbox:hover:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
|
|
16122
16122
|
background-color: var(--db-checkbox-surface-hover);
|
|
16123
16123
|
border-color: var(--db-checkbox-border-hover);
|
|
16124
16124
|
}
|
|
16125
16125
|
|
|
16126
|
-
.
|
|
16126
|
+
.db-checkbox:active:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
|
|
16127
16127
|
background-color: var(--db-checkbox-surface-press);
|
|
16128
16128
|
border-color: var(--db-checkbox-border-press);
|
|
16129
16129
|
}
|
|
16130
16130
|
|
|
16131
16131
|
/* Selected fill — checked and indeterminate share the same surface. */
|
|
16132
|
-
.
|
|
16132
|
+
.db-checkbox:has(.db-checkbox-input:is(:checked, :indeterminate)) .db-checkbox-indicator {
|
|
16133
16133
|
background-color: var(--db-checkbox-surface-checked);
|
|
16134
16134
|
border-color: var(--db-checkbox-surface-checked);
|
|
16135
16135
|
}
|
|
16136
16136
|
|
|
16137
|
-
.
|
|
16137
|
+
.db-checkbox:hover:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
|
|
16138
16138
|
background-color: var(--db-checkbox-surface-checked-hover);
|
|
16139
16139
|
border-color: var(--db-checkbox-surface-checked-hover);
|
|
16140
16140
|
}
|
|
16141
16141
|
|
|
16142
|
-
.
|
|
16142
|
+
.db-checkbox:active:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
|
|
16143
16143
|
background-color: var(--db-checkbox-surface-checked-press);
|
|
16144
16144
|
border-color: var(--db-checkbox-surface-checked-press);
|
|
16145
16145
|
}
|
|
16146
16146
|
|
|
16147
16147
|
/* Mark visibility. */
|
|
16148
|
-
.
|
|
16148
|
+
.db-checkbox:has(.db-checkbox-input:checked) .db-checkbox-checkmark {
|
|
16149
16149
|
opacity: 1;
|
|
16150
16150
|
}
|
|
16151
16151
|
|
|
16152
|
-
.
|
|
16152
|
+
.db-checkbox:has(.db-checkbox-input:indeterminate) .db-checkbox-dash {
|
|
16153
16153
|
opacity: 1;
|
|
16154
16154
|
}
|
|
16155
16155
|
|
|
16156
16156
|
/* Focus-visible (keyboard only). */
|
|
16157
|
-
.
|
|
16157
|
+
.db-checkbox:has(.db-checkbox-input:focus-visible) .db-checkbox-indicator {
|
|
16158
16158
|
outline: var(--db-checkbox-focus-ring-width) solid var(--db-checkbox-focus-ring);
|
|
16159
16159
|
outline-offset: 4px;
|
|
16160
16160
|
}
|
|
@@ -16162,25 +16162,25 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16162
16162
|
/* Disabled (covers unchecked, checked, indeterminate). Sourced from
|
|
16163
16163
|
* `input:disabled` so the standalone-disabled and group-disabled paths both
|
|
16164
16164
|
* land here without needing a separate root modifier class. */
|
|
16165
|
-
.
|
|
16165
|
+
.db-checkbox:has(.db-checkbox-input:disabled) {
|
|
16166
16166
|
cursor: not-allowed;
|
|
16167
16167
|
}
|
|
16168
16168
|
|
|
16169
|
-
.
|
|
16169
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-label {
|
|
16170
16170
|
color: var(--db-checkbox-text-disabled);
|
|
16171
16171
|
}
|
|
16172
16172
|
|
|
16173
|
-
.
|
|
16173
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-indicator {
|
|
16174
16174
|
background-color: var(--db-checkbox-surface-disabled);
|
|
16175
16175
|
border-color: var(--db-checkbox-border-disabled);
|
|
16176
16176
|
box-shadow: none;
|
|
16177
16177
|
}
|
|
16178
16178
|
|
|
16179
|
-
.
|
|
16179
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-checkmark {
|
|
16180
16180
|
color: var(--db-checkbox-mark-disabled);
|
|
16181
16181
|
}
|
|
16182
16182
|
|
|
16183
|
-
.
|
|
16183
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-dash {
|
|
16184
16184
|
background-color: var(--db-checkbox-mark-disabled);
|
|
16185
16185
|
}
|
|
16186
16186
|
|
|
@@ -16193,7 +16193,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16193
16193
|
* `pointer-events: none` (the prior native-only behavior) is what regressed
|
|
16194
16194
|
* interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
|
|
16195
16195
|
* pointer / disabled `not-allowed` cursor so the box keeps AntD's cursor too. */
|
|
16196
|
-
.
|
|
16196
|
+
.db-checkbox .db-checkbox-input {
|
|
16197
16197
|
position: absolute;
|
|
16198
16198
|
inset: 0;
|
|
16199
16199
|
inline-size: var(--db-checkbox-size);
|
|
@@ -16207,7 +16207,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16207
16207
|
* Vertical math: aligns the indicator to the cap-height of the first text
|
|
16208
16208
|
* line so checkbox + label sit on the same visual baseline even when the
|
|
16209
16209
|
* label wraps. */
|
|
16210
|
-
.
|
|
16210
|
+
.db-checkbox .db-checkbox-indicator {
|
|
16211
16211
|
display: grid;
|
|
16212
16212
|
place-items: center;
|
|
16213
16213
|
flex-shrink: 0;
|
|
@@ -16230,7 +16230,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16230
16230
|
box-shadow var(--db-checkbox-transition-duration) ease;
|
|
16231
16231
|
}
|
|
16232
16232
|
|
|
16233
|
-
.
|
|
16233
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark {
|
|
16234
16234
|
grid-area: 1 / 1;
|
|
16235
16235
|
inline-size: 100%;
|
|
16236
16236
|
block-size: 100%;
|
|
@@ -16239,7 +16239,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16239
16239
|
transition: opacity var(--db-checkbox-transition-duration) ease;
|
|
16240
16240
|
}
|
|
16241
16241
|
|
|
16242
|
-
.
|
|
16242
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark path {
|
|
16243
16243
|
fill: none;
|
|
16244
16244
|
stroke: currentColor;
|
|
16245
16245
|
stroke-width: 2;
|
|
@@ -16247,7 +16247,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16247
16247
|
stroke-linejoin: round;
|
|
16248
16248
|
}
|
|
16249
16249
|
|
|
16250
|
-
.
|
|
16250
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-dash {
|
|
16251
16251
|
grid-area: 1 / 1;
|
|
16252
16252
|
inline-size: var(--db-checkbox-indeterminate-mark-width);
|
|
16253
16253
|
block-size: var(--db-checkbox-indeterminate-mark-height);
|
|
@@ -16264,7 +16264,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16264
16264
|
* `padding-right` extends the checkbox's bounding box so adjacent checkboxes in a
|
|
16265
16265
|
* flex row sit ~16px apart (8px trailing + 8px group `gap`) — same visual rhythm
|
|
16266
16266
|
* as the AntD variant. */
|
|
16267
|
-
.
|
|
16267
|
+
.db-checkbox .db-checkbox-label {
|
|
16268
16268
|
color: var(--db-checkbox-text);
|
|
16269
16269
|
padding-inline: var(--db-checkbox-label-spacing);
|
|
16270
16270
|
word-break: break-word;
|
|
@@ -16277,7 +16277,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16277
16277
|
*
|
|
16278
16278
|
* Each helper-text class is listed once per theme (`du-bois-light-*` /
|
|
16279
16279
|
* `du-bois-dark-*`). The selectors deliberately repeat the root/group class
|
|
16280
|
-
* (`.
|
|
16280
|
+
* (`.db-checkbox.db-checkbox`) to push specificity to (0,3,0). That
|
|
16281
16281
|
* overrides `FormMessage`'s own `&&`-doubled `margin-top: 8px` declared with
|
|
16282
16282
|
* Emotion at runtime — without doubling we'd lose on the specificity tie and
|
|
16283
16283
|
* the validation message would keep an 8px gap below the checkbox. */
|
|
@@ -16285,12 +16285,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16285
16285
|
/* Single checkbox followed by Hint and/or FormMessage. Indents the helper text
|
|
16286
16286
|
* by 24px so it aligns with the start of the label, and removes the default
|
|
16287
16287
|
* vertical margin Hint/FormMessage carry. */
|
|
16288
|
-
.
|
|
16289
|
-
.
|
|
16290
|
-
.
|
|
16291
|
-
.
|
|
16292
|
-
.
|
|
16293
|
-
.
|
|
16288
|
+
.db-checkbox.db-checkbox + .du-bois-light-hint,
|
|
16289
|
+
.db-checkbox.db-checkbox + .du-bois-dark-hint,
|
|
16290
|
+
.db-checkbox.db-checkbox + .du-bois-light-form-message,
|
|
16291
|
+
.db-checkbox.db-checkbox + .du-bois-dark-form-message,
|
|
16292
|
+
.db-checkbox.db-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16293
|
+
.db-checkbox.db-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16294
16294
|
padding-left: var(--db-spacing-sm);
|
|
16295
16295
|
margin-top: 0;
|
|
16296
16296
|
}
|
|
@@ -16298,33 +16298,33 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16298
16298
|
/* Group spacing against sibling form text — 8px gap above the group when it
|
|
16299
16299
|
* follows a Hint, 8px gap above a FormMessage when it follows the group.
|
|
16300
16300
|
* Doubled class on the group side beats FormMessage's `&&` for the same reason. */
|
|
16301
|
-
.du-bois-light-hint + .
|
|
16302
|
-
.du-bois-dark-hint + .
|
|
16303
|
-
.
|
|
16304
|
-
.
|
|
16301
|
+
.du-bois-light-hint + .db-checkbox-group.db-checkbox-group,
|
|
16302
|
+
.du-bois-dark-hint + .db-checkbox-group.db-checkbox-group,
|
|
16303
|
+
.db-checkbox-group.db-checkbox-group + .du-bois-light-form-message,
|
|
16304
|
+
.db-checkbox-group.db-checkbox-group + .du-bois-dark-form-message {
|
|
16305
16305
|
margin-top: var(--db-spacing-2xs);
|
|
16306
16306
|
}
|
|
16307
16307
|
|
|
16308
|
-
/* CheckboxGroup layout. Vertical delegates to the `.
|
|
16308
|
+
/* CheckboxGroup layout. Vertical delegates to the `.db-stack` primitive; the
|
|
16309
16309
|
* horizontal default stays bespoke because it must NOT wrap (a long row of
|
|
16310
16310
|
* checkboxes overflows horizontally rather than reflowing onto multiple lines),
|
|
16311
|
-
* which is the one thing `.
|
|
16311
|
+
* which is the one thing `.db-cluster` won't do. Both wire their gap to the
|
|
16312
16312
|
* checkbox spacing token so a retheme moves with the rest of the component. */
|
|
16313
|
-
.
|
|
16313
|
+
.db-checkbox-group {
|
|
16314
16314
|
display: flex;
|
|
16315
16315
|
}
|
|
16316
16316
|
|
|
16317
|
-
/* Horizontal (default): single non-wrapping row. `:not(.
|
|
16317
|
+
/* Horizontal (default): single non-wrapping row. `:not(.db-stack)` keeps this
|
|
16318
16318
|
* off the vertical element so it never fights the stack primitive's gap. */
|
|
16319
|
-
.
|
|
16319
|
+
.db-checkbox-group:not(.db-stack) {
|
|
16320
16320
|
flex-wrap: nowrap;
|
|
16321
16321
|
column-gap: var(--db-checkbox-label-spacing);
|
|
16322
16322
|
row-gap: 0;
|
|
16323
16323
|
}
|
|
16324
16324
|
|
|
16325
|
-
/* Vertical: .
|
|
16326
|
-
.
|
|
16327
|
-
--
|
|
16325
|
+
/* Vertical: .db-stack supplies flex-direction + gap; we only retarget the knob. */
|
|
16326
|
+
.db-checkbox-group.db-stack {
|
|
16327
|
+
--db-stack-gap: var(--db-checkbox-label-spacing);
|
|
16328
16328
|
}
|
|
16329
16329
|
|
|
16330
16330
|
:where(:root), :where(.du-bois-light) {
|
|
@@ -16373,12 +16373,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16373
16373
|
*
|
|
16374
16374
|
* Structure (assumed by the React component):
|
|
16375
16375
|
*
|
|
16376
|
-
* <label class="
|
|
16376
|
+
* <label class="db-radio">
|
|
16377
16377
|
* <input type="radio" />
|
|
16378
|
-
* <span class="
|
|
16379
|
-
* <span class="
|
|
16378
|
+
* <span class="db-radio-indicator"> ← circle border + fill react to state
|
|
16379
|
+
* <span class="db-radio-dot" /> ← visible when :checked
|
|
16380
16380
|
* </span>
|
|
16381
|
-
* <span class="
|
|
16381
|
+
* <span class="db-radio-label">{children}</span>
|
|
16382
16382
|
* </label>
|
|
16383
16383
|
*
|
|
16384
16384
|
* The root only ever has one <input> descendant, so a bare `input` selector is
|
|
@@ -16387,9 +16387,9 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16387
16387
|
* checkmark/dash, and there is no indeterminate state.
|
|
16388
16388
|
*
|
|
16389
16389
|
* TODO(DUBOIS-452): the indicator/dot state styles below are identical to
|
|
16390
|
-
* NativeCheckbox.css — consolidate them into a shared `.
|
|
16390
|
+
* NativeCheckbox.css — consolidate them into a shared `.db-selection-toggle` class. */
|
|
16391
16391
|
|
|
16392
|
-
.
|
|
16392
|
+
.db-radio {
|
|
16393
16393
|
/* `display: flex` (block-level), NOT `inline-flex`: see NativeCheckbox.css for
|
|
16394
16394
|
* the line-box / sibling-spacing rationale. */
|
|
16395
16395
|
display: flex;
|
|
@@ -16404,38 +16404,38 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16404
16404
|
/* Hover/press live on the root (label), not on the input: the input is
|
|
16405
16405
|
* visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
|
|
16406
16406
|
* anyway, and the whole label area should drive the feedback. */
|
|
16407
|
-
.
|
|
16407
|
+
.db-radio:hover:has(input:not(:disabled, :checked)) .db-radio-indicator {
|
|
16408
16408
|
background-color: var(--db-radio-surface-hover);
|
|
16409
16409
|
border-color: var(--db-radio-border-hover);
|
|
16410
16410
|
}
|
|
16411
16411
|
|
|
16412
|
-
.
|
|
16412
|
+
.db-radio:active:has(input:not(:disabled, :checked)) .db-radio-indicator {
|
|
16413
16413
|
background-color: var(--db-radio-surface-press);
|
|
16414
16414
|
border-color: var(--db-radio-border-press);
|
|
16415
16415
|
}
|
|
16416
16416
|
|
|
16417
16417
|
/* Selected fill. */
|
|
16418
|
-
.
|
|
16418
|
+
.db-radio:has(input:checked) .db-radio-indicator {
|
|
16419
16419
|
background-color: var(--db-radio-surface-checked);
|
|
16420
16420
|
border-color: var(--db-radio-surface-checked);
|
|
16421
16421
|
}
|
|
16422
16422
|
|
|
16423
16423
|
/* AntD getRadioInputStyles checked hover: background = actionPrimaryBackgroundHover,
|
|
16424
16424
|
* borderColor = actionPrimaryBackgroundPress (a darker ring than the fill). */
|
|
16425
|
-
.
|
|
16425
|
+
.db-radio:hover:has(input:checked:not(:disabled)) .db-radio-indicator {
|
|
16426
16426
|
background-color: var(--db-radio-surface-checked-hover);
|
|
16427
16427
|
border-color: var(--db-radio-border-checked-hover);
|
|
16428
16428
|
}
|
|
16429
16429
|
|
|
16430
16430
|
/* AntD getRadioInputStyles checked active: background = actionDefaultBackgroundPress,
|
|
16431
16431
|
* borderColor = actionDefaultBorderPress (two-tone, not flat). */
|
|
16432
|
-
.
|
|
16432
|
+
.db-radio:active:has(input:checked:not(:disabled)) .db-radio-indicator {
|
|
16433
16433
|
background-color: var(--db-radio-surface-checked-press);
|
|
16434
16434
|
border-color: var(--db-radio-border-checked-press);
|
|
16435
16435
|
}
|
|
16436
16436
|
|
|
16437
16437
|
/* Dot visibility. */
|
|
16438
|
-
.
|
|
16438
|
+
.db-radio:has(input:checked) .db-radio-dot {
|
|
16439
16439
|
opacity: 1;
|
|
16440
16440
|
}
|
|
16441
16441
|
|
|
@@ -16444,14 +16444,14 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16444
16444
|
*
|
|
16445
16445
|
* UNCHECKED focus (AntD `&:not(disabled) > input:focus + inner`): only the border
|
|
16446
16446
|
* color changes to actionPrimaryBackgroundDefault — NO outline ring. */
|
|
16447
|
-
.
|
|
16447
|
+
.db-radio:has(input:focus-visible:not(:checked)) .db-radio-indicator {
|
|
16448
16448
|
border-color: var(--db-radio-border-unchecked-focus);
|
|
16449
16449
|
}
|
|
16450
16450
|
|
|
16451
16451
|
/* CHECKED focus-visible (AntD `&.checked &:not(disabled) > input:focus-visible + inner`):
|
|
16452
16452
|
* background = actionPrimaryBackgroundDefault, borderColor = actionDefaultBorderFocus,
|
|
16453
16453
|
* outline = 1px solid actionPrimaryBackgroundDefault, outlineOffset = 1. */
|
|
16454
|
-
.
|
|
16454
|
+
.db-radio:has(input:focus-visible:checked) .db-radio-indicator {
|
|
16455
16455
|
background-color: var(--db-radio-surface-checked);
|
|
16456
16456
|
border-color: var(--db-radio-border-focus);
|
|
16457
16457
|
outline: 1px solid var(--db-radio-outline-checked-focus);
|
|
@@ -16460,21 +16460,21 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16460
16460
|
|
|
16461
16461
|
/* Disabled (covers checked and unchecked). Sourced from `input:disabled` so the
|
|
16462
16462
|
* standalone-disabled and group-disabled paths both land here. */
|
|
16463
|
-
.
|
|
16463
|
+
.db-radio:has(input:disabled) {
|
|
16464
16464
|
cursor: not-allowed;
|
|
16465
16465
|
}
|
|
16466
16466
|
|
|
16467
|
-
.
|
|
16467
|
+
.db-radio:has(input:disabled) .db-radio-label {
|
|
16468
16468
|
color: var(--db-radio-text-disabled);
|
|
16469
16469
|
}
|
|
16470
16470
|
|
|
16471
|
-
.
|
|
16471
|
+
.db-radio:has(input:disabled) .db-radio-indicator {
|
|
16472
16472
|
background-color: var(--db-radio-surface-disabled);
|
|
16473
16473
|
border-color: var(--db-radio-border-disabled);
|
|
16474
16474
|
box-shadow: none;
|
|
16475
16475
|
}
|
|
16476
16476
|
|
|
16477
|
-
.
|
|
16477
|
+
.db-radio:has(input:disabled) .db-radio-dot {
|
|
16478
16478
|
background-color: var(--db-radio-mark-disabled);
|
|
16479
16479
|
}
|
|
16480
16480
|
|
|
@@ -16487,7 +16487,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16487
16487
|
* `pointer-events: none` (the prior native-only behavior) is what regressed
|
|
16488
16488
|
* interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
|
|
16489
16489
|
* pointer / disabled `not-allowed` cursor so the circle keeps AntD's cursor too. */
|
|
16490
|
-
.
|
|
16490
|
+
.db-radio input {
|
|
16491
16491
|
position: absolute;
|
|
16492
16492
|
inset: 0;
|
|
16493
16493
|
inline-size: var(--db-radio-size);
|
|
@@ -16500,7 +16500,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16500
16500
|
/* Indicator — circle with the border/fill that responds to state above.
|
|
16501
16501
|
* Vertical math aligns the indicator to the cap-height of the first text line
|
|
16502
16502
|
* so radio + label sit on the same visual baseline even when the label wraps. */
|
|
16503
|
-
.
|
|
16503
|
+
.db-radio .db-radio-indicator {
|
|
16504
16504
|
display: grid;
|
|
16505
16505
|
place-items: center;
|
|
16506
16506
|
flex-shrink: 0;
|
|
@@ -16522,7 +16522,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16522
16522
|
box-shadow var(--db-radio-transition-duration) ease;
|
|
16523
16523
|
}
|
|
16524
16524
|
|
|
16525
|
-
.
|
|
16525
|
+
.db-radio .db-radio-indicator > .db-radio-dot {
|
|
16526
16526
|
grid-area: 1 / 1;
|
|
16527
16527
|
inline-size: var(--db-radio-mark-size);
|
|
16528
16528
|
block-size: var(--db-radio-mark-size);
|
|
@@ -16535,15 +16535,15 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16535
16535
|
/* Honour the user's reduced-motion preference: drop the state-change
|
|
16536
16536
|
* transitions on the indicator and dot so checking/hovering is instant. */
|
|
16537
16537
|
@media (prefers-reduced-motion: reduce) {
|
|
16538
|
-
.
|
|
16539
|
-
.
|
|
16538
|
+
.db-radio .db-radio-indicator,
|
|
16539
|
+
.db-radio .db-radio-indicator > .db-radio-dot {
|
|
16540
16540
|
transition: none;
|
|
16541
16541
|
}
|
|
16542
16542
|
}
|
|
16543
16543
|
|
|
16544
16544
|
/* Padding-inline replicates the AntD `.{prefix} + span` label gap and the
|
|
16545
16545
|
* trailing whitespace that separates adjacent radios in a row. */
|
|
16546
|
-
.
|
|
16546
|
+
.db-radio .db-radio-label {
|
|
16547
16547
|
color: var(--db-radio-text);
|
|
16548
16548
|
padding-inline: var(--db-radio-label-spacing);
|
|
16549
16549
|
word-break: break-word;
|
|
@@ -16553,12 +16553,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16553
16553
|
* indent comes from AntD's getCommonRadioGroupStyles (`& > label + hint`) and applies
|
|
16554
16554
|
* to BOTH layouts. The doubled root class pushes specificity to (0,3,0) to beat
|
|
16555
16555
|
* FormMessage's runtime `&&` margin. */
|
|
16556
|
-
.
|
|
16557
|
-
.
|
|
16558
|
-
.
|
|
16559
|
-
.
|
|
16560
|
-
.
|
|
16561
|
-
.
|
|
16556
|
+
.db-radio.db-radio + .du-bois-light-hint,
|
|
16557
|
+
.db-radio.db-radio + .du-bois-dark-hint,
|
|
16558
|
+
.db-radio.db-radio + .du-bois-light-form-message,
|
|
16559
|
+
.db-radio.db-radio + .du-bois-dark-form-message,
|
|
16560
|
+
.db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16561
|
+
.db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16562
16562
|
padding-inline-start: var(--db-spacing-sm);
|
|
16563
16563
|
margin-top: 0;
|
|
16564
16564
|
}
|
|
@@ -16567,70 +16567,70 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16567
16567
|
* after a radio gets `marginTop: -sm` (cancels the preceding radio's
|
|
16568
16568
|
* `paddingBottom: sm` so the hint tucks directly under its label) and
|
|
16569
16569
|
* `marginBottom: sm` (gap before the next radio). The negative top margin relies on
|
|
16570
|
-
* the .
|
|
16570
|
+
* the .db-stack gap being 0 (set below). Scoped to .db-stack so it never perturbs
|
|
16571
16571
|
* the horizontal grid, where hints are positioned by grid-row instead. */
|
|
16572
|
-
.
|
|
16573
|
-
.
|
|
16574
|
-
.
|
|
16575
|
-
.
|
|
16576
|
-
.
|
|
16577
|
-
.
|
|
16572
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint,
|
|
16573
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint,
|
|
16574
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-form-message,
|
|
16575
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-form-message,
|
|
16576
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16577
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16578
16578
|
margin-top: calc(-1 * var(--db-spacing-2xs));
|
|
16579
16579
|
margin-bottom: var(--db-spacing-2xs);
|
|
16580
16580
|
}
|
|
16581
16581
|
|
|
16582
16582
|
/* AntD `& > label:last-of-type + hint { marginTop: 0 }`: the last radio has no
|
|
16583
16583
|
* `paddingBottom` to cancel, so its trailing hint keeps its natural top position. */
|
|
16584
|
-
.
|
|
16585
|
-
.
|
|
16586
|
-
.
|
|
16587
|
-
.
|
|
16588
|
-
.
|
|
16589
|
-
.
|
|
16584
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint,
|
|
16585
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint,
|
|
16586
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-form-message,
|
|
16587
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-form-message,
|
|
16588
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16589
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16590
16590
|
margin-top: 0;
|
|
16591
16591
|
}
|
|
16592
16592
|
|
|
16593
|
-
.du-bois-light-hint + .
|
|
16594
|
-
.du-bois-dark-hint + .
|
|
16595
|
-
.
|
|
16596
|
-
.
|
|
16593
|
+
.du-bois-light-hint + .db-radio-group.db-radio-group,
|
|
16594
|
+
.du-bois-dark-hint + .db-radio-group.db-radio-group,
|
|
16595
|
+
.db-radio-group.db-radio-group + .du-bois-light-form-message,
|
|
16596
|
+
.db-radio-group.db-radio-group + .du-bois-dark-form-message {
|
|
16597
16597
|
margin-top: var(--db-spacing-2xs);
|
|
16598
16598
|
}
|
|
16599
16599
|
|
|
16600
16600
|
/* RadioGroup layout. Vertical (the default) delegates flex-direction to the
|
|
16601
|
-
* .
|
|
16602
|
-
.
|
|
16601
|
+
* .db-stack primitive; horizontal is a two-row grid (mirroring AntD). */
|
|
16602
|
+
.db-radio-group {
|
|
16603
16603
|
display: flex;
|
|
16604
16604
|
}
|
|
16605
16605
|
|
|
16606
|
-
/* Vertical: .
|
|
16606
|
+
/* Vertical: .db-stack supplies flex-direction: column. AntD's vertical helper
|
|
16607
16607
|
* (getVerticalRadioGroupStyles) produces its item rhythm purely from
|
|
16608
16608
|
* `& > label { paddingBottom: sm }` plus the negative-margin hint trick above — it
|
|
16609
16609
|
* uses NO flex gap. The negative `marginTop` on hints only works if the stack adds
|
|
16610
16610
|
* no gap of its own, so we zero out the gap and reproduce the rhythm via
|
|
16611
16611
|
* padding-bottom on each radio. */
|
|
16612
|
-
.
|
|
16613
|
-
--
|
|
16612
|
+
.db-radio-group.db-stack {
|
|
16613
|
+
--db-stack-gap: 0;
|
|
16614
16614
|
}
|
|
16615
16615
|
|
|
16616
16616
|
/* AntD `& > label { paddingBottom: sm }`. */
|
|
16617
|
-
.
|
|
16617
|
+
.db-radio-group.db-stack > .db-radio {
|
|
16618
16618
|
padding-bottom: var(--db-spacing-2xs);
|
|
16619
16619
|
}
|
|
16620
16620
|
|
|
16621
16621
|
/* AntD `& > label:last-of-type { paddingBottom: 0 }`. */
|
|
16622
|
-
.
|
|
16622
|
+
.db-radio-group.db-stack > .db-radio:last-of-type {
|
|
16623
16623
|
padding-bottom: 0;
|
|
16624
16624
|
}
|
|
16625
16625
|
|
|
16626
16626
|
/* AntD getVerticalRadioGroupStyles `.${prefix}-radio-tile + .${prefix}-radio-tile {
|
|
16627
|
-
* marginTop: md }`: RadioTiles are not matched by the `.
|
|
16627
|
+
* marginTop: md }`: RadioTiles are not matched by the `.db-radio` padding-bottom
|
|
16628
16628
|
* rhythm above (the tile's own class is du-bois-{light,dark}-radio-tile), so space
|
|
16629
|
-
* consecutive tiles explicitly. The .
|
|
16630
|
-
.
|
|
16631
|
-
.
|
|
16632
|
-
.
|
|
16633
|
-
.
|
|
16629
|
+
* consecutive tiles explicitly. The .db-stack gap is 0, so this margin is the spacing. */
|
|
16630
|
+
.db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-light-radio-tile,
|
|
16631
|
+
.db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
|
|
16632
|
+
.db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
|
|
16633
|
+
.db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
|
|
16634
16634
|
margin-top: var(--db-spacing-xs);
|
|
16635
16635
|
}
|
|
16636
16636
|
|
|
@@ -16640,7 +16640,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16640
16640
|
* group class here matches that.
|
|
16641
16641
|
* AntD: `display: grid; gridTemplateRows: [label] auto [hint] auto;
|
|
16642
16642
|
* gridAutoColumns: max-content; gridColumnGap: md`. */
|
|
16643
|
-
.
|
|
16643
|
+
.db-radio-group--horizontal.db-radio-group--horizontal {
|
|
16644
16644
|
display: grid;
|
|
16645
16645
|
grid-template-rows: [label] auto [hint] auto;
|
|
16646
16646
|
grid-auto-columns: max-content;
|
|
@@ -16648,42 +16648,42 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16648
16648
|
}
|
|
16649
16649
|
|
|
16650
16650
|
/* Equal column widths: AntD `gridAutoColumns: minmax(0, 1fr)`. */
|
|
16651
|
-
.
|
|
16651
|
+
.db-radio-group--horizontal.db-radio-group--equal-width {
|
|
16652
16652
|
grid-auto-columns: minmax(0, 1fr);
|
|
16653
16653
|
}
|
|
16654
16654
|
|
|
16655
16655
|
/* AntD `& > label, & > .${prefix}-radio-tile { gridRow: label / label; marginRight: 0 }`:
|
|
16656
16656
|
* every radio (and every RadioTile button, whose own class is
|
|
16657
|
-
* du-bois-{light,dark}-radio-tile and is NOT matched by `> .
|
|
16657
|
+
* du-bois-{light,dark}-radio-tile and is NOT matched by `> .db-radio`) lives in the
|
|
16658
16658
|
* label row. grid-auto-flow defaults to row, so successive items advance the implicit
|
|
16659
16659
|
* column. */
|
|
16660
|
-
.
|
|
16661
|
-
.
|
|
16662
|
-
.
|
|
16660
|
+
.db-radio-group--horizontal > .db-radio,
|
|
16661
|
+
.db-radio-group--horizontal > .du-bois-light-radio-tile,
|
|
16662
|
+
.db-radio-group--horizontal > .du-bois-dark-radio-tile {
|
|
16663
16663
|
grid-row: label / label;
|
|
16664
16664
|
margin-inline-end: 0;
|
|
16665
16665
|
}
|
|
16666
16666
|
|
|
16667
16667
|
/* AntD `& > label + hint { display: inline-block; gridRow: hint / hint }`: a hint
|
|
16668
16668
|
* following a radio drops into the hint row of the column its radio occupies. The
|
|
16669
|
-
* vertical negative-margin rules are scoped to .
|
|
16670
|
-
.
|
|
16671
|
-
.
|
|
16669
|
+
* vertical negative-margin rules are scoped to .db-stack, so nothing to reset here. */
|
|
16670
|
+
.db-radio-group--horizontal > .du-bois-light-hint,
|
|
16671
|
+
.db-radio-group--horizontal > .du-bois-dark-hint {
|
|
16672
16672
|
display: inline-block;
|
|
16673
16673
|
grid-row: hint / hint;
|
|
16674
16674
|
}
|
|
16675
16675
|
|
|
16676
16676
|
/* AntD `:has(> hint) { marginTop: sm }`: when the horizontal group contains a hint,
|
|
16677
16677
|
* the group itself gets a top margin (room above the two-row grid). */
|
|
16678
|
-
.
|
|
16679
|
-
.
|
|
16678
|
+
.db-radio-group--horizontal:has(> .du-bois-light-hint),
|
|
16679
|
+
.db-radio-group--horizontal:has(> .du-bois-dark-hint) {
|
|
16680
16680
|
margin-top: var(--db-spacing-2xs);
|
|
16681
16681
|
}
|
|
16682
16682
|
|
|
16683
16683
|
/* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
|
|
16684
16684
|
* the whole group is separated by sm. */
|
|
16685
|
-
.
|
|
16686
|
-
.
|
|
16685
|
+
.db-radio-group--horizontal + .du-bois-light-form-message,
|
|
16686
|
+
.db-radio-group--horizontal + .du-bois-dark-form-message {
|
|
16687
16687
|
margin-top: var(--db-spacing-2xs);
|
|
16688
16688
|
}
|
|
16689
16689
|
|
|
@@ -16726,7 +16726,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16726
16726
|
--db-switch-transition-duration: var(--db-selection-toggle-transition-duration);
|
|
16727
16727
|
}
|
|
16728
16728
|
|
|
16729
|
-
.
|
|
16729
|
+
.db-switch {
|
|
16730
16730
|
/* flex, not inline-flex: an inline-flex root's line-box leading pushes block siblings
|
|
16731
16731
|
* (e.g. a following FormMessage) down a few px, breaking the form-flow spacing. */
|
|
16732
16732
|
display: flex;
|
|
@@ -16737,12 +16737,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16737
16737
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
16738
16738
|
}
|
|
16739
16739
|
|
|
16740
|
-
.
|
|
16740
|
+
.db-switch:has(input:disabled) {
|
|
16741
16741
|
cursor: not-allowed;
|
|
16742
16742
|
}
|
|
16743
16743
|
|
|
16744
16744
|
/* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled. */
|
|
16745
|
-
.
|
|
16745
|
+
.db-switch input {
|
|
16746
16746
|
appearance: none;
|
|
16747
16747
|
position: relative;
|
|
16748
16748
|
flex-shrink: 0;
|
|
@@ -16761,7 +16761,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16761
16761
|
|
|
16762
16762
|
/* The thumb. A pseudo-element keeps the input the switch's only element, so nothing can overlay it
|
|
16763
16763
|
* and intercept clicks. Offset left by the border width to sit flush with the track's outer edge. */
|
|
16764
|
-
.
|
|
16764
|
+
.db-switch input::before {
|
|
16765
16765
|
content: '';
|
|
16766
16766
|
position: absolute;
|
|
16767
16767
|
top: 50%;
|
|
@@ -16778,32 +16778,32 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16778
16778
|
}
|
|
16779
16779
|
|
|
16780
16780
|
/* `<label for>` propagates `:hover` to the input, so scope hover/press to the control, not `input:hover`. */
|
|
16781
|
-
.
|
|
16781
|
+
.db-switch:hover input:not(:disabled):not(:checked) {
|
|
16782
16782
|
background-color: var(--db-switch-surface-hover);
|
|
16783
16783
|
border-color: var(--db-switch-border-hover);
|
|
16784
16784
|
}
|
|
16785
16785
|
|
|
16786
|
-
.
|
|
16786
|
+
.db-switch:active input:not(:disabled):not(:checked) {
|
|
16787
16787
|
background-color: var(--db-switch-surface-press);
|
|
16788
16788
|
border-color: var(--db-switch-border-press);
|
|
16789
16789
|
}
|
|
16790
16790
|
|
|
16791
|
-
.
|
|
16791
|
+
.db-switch input:checked {
|
|
16792
16792
|
background-color: var(--db-switch-surface-checked);
|
|
16793
16793
|
border-color: var(--db-switch-border-checked);
|
|
16794
16794
|
}
|
|
16795
16795
|
|
|
16796
|
-
.
|
|
16796
|
+
.db-switch:hover input:checked:not(:disabled) {
|
|
16797
16797
|
background-color: var(--db-switch-surface-checked-hover);
|
|
16798
16798
|
border-color: var(--db-switch-border-checked-hover);
|
|
16799
16799
|
}
|
|
16800
16800
|
|
|
16801
|
-
.
|
|
16801
|
+
.db-switch:active input:checked:not(:disabled) {
|
|
16802
16802
|
background-color: var(--db-switch-surface-checked-press);
|
|
16803
16803
|
border-color: var(--db-switch-border-checked-press);
|
|
16804
16804
|
}
|
|
16805
16805
|
|
|
16806
|
-
.
|
|
16806
|
+
.db-switch input:checked::before {
|
|
16807
16807
|
transform: translateY(-50%) translateX(calc(var(--db-switch-track-width) - var(--db-switch-thumb-size)));
|
|
16808
16808
|
}
|
|
16809
16809
|
|
|
@@ -16811,72 +16811,72 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16811
16811
|
* the ring sits flush when off and gains a 1px offset when checked.
|
|
16812
16812
|
* TODO: width/offset are hardcoded 1px to preserve the AntD look; adopt the system 2px focus ring
|
|
16813
16813
|
* (var(--db-focus-ring-width)) in a separate change. */
|
|
16814
|
-
.
|
|
16814
|
+
.db-switch input:focus-visible {
|
|
16815
16815
|
border-color: var(--db-switch-border-focus);
|
|
16816
16816
|
outline: 1px solid var(--db-focus-ring-color);
|
|
16817
16817
|
outline-offset: 0;
|
|
16818
16818
|
}
|
|
16819
16819
|
|
|
16820
|
-
.
|
|
16820
|
+
.db-switch input:checked:focus-visible {
|
|
16821
16821
|
outline-offset: 1px;
|
|
16822
16822
|
}
|
|
16823
16823
|
|
|
16824
|
-
.
|
|
16824
|
+
.db-switch input:disabled {
|
|
16825
16825
|
cursor: not-allowed;
|
|
16826
16826
|
background-color: var(--db-switch-surface-disabled);
|
|
16827
16827
|
border-color: var(--db-switch-border-disabled);
|
|
16828
16828
|
}
|
|
16829
16829
|
|
|
16830
16830
|
/* Disabled + on: more specific than the plain disabled rule, so it wins regardless of source order. */
|
|
16831
|
-
.
|
|
16831
|
+
.db-switch input:checked:disabled {
|
|
16832
16832
|
background-color: var(--db-switch-surface-checked-disabled);
|
|
16833
16833
|
border-color: var(--db-switch-surface-checked-disabled);
|
|
16834
16834
|
}
|
|
16835
16835
|
|
|
16836
16836
|
@media (prefers-reduced-motion: reduce) {
|
|
16837
|
-
.
|
|
16838
|
-
.
|
|
16837
|
+
.db-switch input,
|
|
16838
|
+
.db-switch input::before {
|
|
16839
16839
|
transition: none;
|
|
16840
16840
|
}
|
|
16841
16841
|
}
|
|
16842
16842
|
|
|
16843
|
-
.
|
|
16843
|
+
.db-switch-wrapper {
|
|
16844
16844
|
display: flex;
|
|
16845
16845
|
align-items: center;
|
|
16846
16846
|
}
|
|
16847
16847
|
|
|
16848
|
-
.
|
|
16848
|
+
.db-switch-wrapper .db-switch-state-message {
|
|
16849
16849
|
margin-inline-start: auto;
|
|
16850
16850
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
16851
16851
|
}
|
|
16852
16852
|
|
|
16853
16853
|
/* `:first-child` scopes this to the label-first layout; the plain layout renders the label last. */
|
|
16854
|
-
.
|
|
16855
|
-
.
|
|
16854
|
+
.db-switch-wrapper > .du-bois-light-label:first-child,
|
|
16855
|
+
.db-switch-wrapper > .du-bois-dark-label:first-child {
|
|
16856
16856
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
16857
16857
|
}
|
|
16858
16858
|
|
|
16859
|
-
.
|
|
16859
|
+
.db-switch-state-message {
|
|
16860
16860
|
color: var(--db-switch-text);
|
|
16861
16861
|
}
|
|
16862
16862
|
|
|
16863
|
-
/* Target the <Label>'s class, not a bare `label` — that would also match the .
|
|
16864
|
-
.
|
|
16865
|
-
.
|
|
16863
|
+
/* Target the <Label>'s class, not a bare `label` — that would also match the .db-switch root <label>. */
|
|
16864
|
+
.db-switch-wrapper:has(input:disabled) .du-bois-light-label,
|
|
16865
|
+
.db-switch-wrapper:has(input:disabled) .du-bois-dark-label {
|
|
16866
16866
|
color: var(--db-switch-text-disabled);
|
|
16867
16867
|
}
|
|
16868
16868
|
|
|
16869
16869
|
/* Indent a following hint/message past the track. The class is doubled to out-specify FormMessage's
|
|
16870
16870
|
* own margin rule. */
|
|
16871
|
-
:is(.
|
|
16872
|
-
+ :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.
|
|
16871
|
+
:is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
16872
|
+
+ :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
16873
16873
|
+ :is(.du-bois-light-hint, .du-bois-dark-hint)
|
|
16874
16874
|
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
|
|
16875
16875
|
padding-inline-start: calc(var(--db-spacing-2xs) + var(--db-switch-track-width));
|
|
16876
16876
|
}
|
|
16877
16877
|
|
|
16878
|
-
:is(.
|
|
16879
|
-
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.
|
|
16878
|
+
:is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
16879
|
+
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
16880
16880
|
+ :is(.du-bois-light-hint, .du-bois-dark-hint)
|
|
16881
16881
|
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
|
|
16882
16882
|
margin-top: 0;
|