@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.css
CHANGED
|
@@ -15980,27 +15980,27 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
15980
15980
|
Use this for any layout where items are laid out vertically.
|
|
15981
15981
|
|
|
15982
15982
|
\3c !-- Basic: default gap between each child -->
|
|
15983
|
-
<div class="
|
|
15983
|
+
<div class="db-stack">
|
|
15984
15984
|
<h2>Title</h2>
|
|
15985
15985
|
<p>Body</p>
|
|
15986
15986
|
<button>Action</button>
|
|
15987
15987
|
</div>
|
|
15988
15988
|
|
|
15989
15989
|
\3c !-- Wider gap for this instance -->
|
|
15990
|
-
<div class="
|
|
15990
|
+
<div class="db-stack" style="--db-stack-gap: var(--db-spacing-lg)">…</div>
|
|
15991
15991
|
|
|
15992
15992
|
\3c !-- Don't stretch children to full width (e.g. left-aligned buttons) -->
|
|
15993
|
-
<div class="
|
|
15993
|
+
<div class="db-stack" style="--db-stack-align: flex-start">…</div>
|
|
15994
15994
|
*/
|
|
15995
|
-
.
|
|
15995
|
+
.db-stack {
|
|
15996
15996
|
/* These variables act as the *parameters* for the stack instance. */
|
|
15997
|
-
--
|
|
15998
|
-
--
|
|
15997
|
+
--db-stack-gap: var(--db-spacing-xs);
|
|
15998
|
+
--db-stack-align: stretch;
|
|
15999
15999
|
|
|
16000
16000
|
display: flex;
|
|
16001
16001
|
flex-direction: column;
|
|
16002
|
-
align-items: var(--
|
|
16003
|
-
gap: var(--
|
|
16002
|
+
align-items: var(--db-stack-align);
|
|
16003
|
+
gap: var(--db-stack-gap);
|
|
16004
16004
|
}
|
|
16005
16005
|
|
|
16006
16006
|
/**
|
|
@@ -16008,29 +16008,29 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16008
16008
|
Use this for any layout where items are laid out horizontally and should wrap on smaller viewport sizes.
|
|
16009
16009
|
|
|
16010
16010
|
\3c !-- Basic: items wrap as needed -->
|
|
16011
|
-
<div class="
|
|
16011
|
+
<div class="db-cluster">
|
|
16012
16012
|
<span>one</span>
|
|
16013
16013
|
<span>two</span>
|
|
16014
16014
|
<span>three</span>
|
|
16015
16015
|
</div>
|
|
16016
16016
|
|
|
16017
16017
|
\3c !-- Push children apart (e.g. title left, actions right) -->
|
|
16018
|
-
<div class="
|
|
16018
|
+
<div class="db-cluster" style="--db-cluster-justify: space-between">…</div>
|
|
16019
16019
|
|
|
16020
16020
|
\3c !-- Looser gap for this instance -->
|
|
16021
|
-
<div class="
|
|
16021
|
+
<div class="db-cluster" style="--db-cluster-gap: var(--db-spacing-sm)">…</div>
|
|
16022
16022
|
*/
|
|
16023
|
-
.
|
|
16023
|
+
.db-cluster {
|
|
16024
16024
|
/* These variables act as the *parameters* for the cluster instance. */
|
|
16025
|
-
--
|
|
16026
|
-
--
|
|
16027
|
-
--
|
|
16025
|
+
--db-cluster-gap: var(--db-spacing-2xs);
|
|
16026
|
+
--db-cluster-align: center;
|
|
16027
|
+
--db-cluster-justify: flex-start;
|
|
16028
16028
|
|
|
16029
16029
|
display: flex;
|
|
16030
16030
|
flex-wrap: wrap;
|
|
16031
|
-
align-items: var(--
|
|
16032
|
-
justify-content: var(--
|
|
16033
|
-
gap: var(--
|
|
16031
|
+
align-items: var(--db-cluster-align);
|
|
16032
|
+
justify-content: var(--db-cluster-justify);
|
|
16033
|
+
gap: var(--db-cluster-gap);
|
|
16034
16034
|
}
|
|
16035
16035
|
|
|
16036
16036
|
:where(:root), :where(.du-bois-light) {
|
|
@@ -16252,21 +16252,21 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16252
16252
|
*
|
|
16253
16253
|
* Structure (assumed by the React component):
|
|
16254
16254
|
*
|
|
16255
|
-
* <label class="
|
|
16256
|
-
* <input type="checkbox" class="
|
|
16257
|
-
* <span class="
|
|
16258
|
-
* <svg class="
|
|
16259
|
-
* <span class="
|
|
16255
|
+
* <label class="db-checkbox">
|
|
16256
|
+
* <input type="checkbox" class="db-checkbox-input" />
|
|
16257
|
+
* <span class="db-checkbox-indicator"> ← border + fill react to state
|
|
16258
|
+
* <svg class="db-checkbox-checkmark" .../> ← visible when :checked
|
|
16259
|
+
* <span class="db-checkbox-dash" /> ← visible when :indeterminate
|
|
16260
16260
|
* </span>
|
|
16261
|
-
* <span class="
|
|
16261
|
+
* <span class="db-checkbox-label">{children}</span>
|
|
16262
16262
|
* </label>
|
|
16263
16263
|
*
|
|
16264
|
-
* State and hiding rules target `.
|
|
16264
|
+
* State and hiding rules target `.db-checkbox-input` — the checkbox's OWN input —
|
|
16265
16265
|
* never a bare `input`: consumers may render an inline <input> (e.g. a number
|
|
16266
16266
|
* field) inside the label children, and a descendant `input` selector would hide
|
|
16267
16267
|
* / absolutely-position that field and mis-drive the `:has(…)` state rules. */
|
|
16268
16268
|
|
|
16269
|
-
.
|
|
16269
|
+
.db-checkbox {
|
|
16270
16270
|
/* `display: flex` (block-level), NOT `inline-flex`: an inline-flex root puts
|
|
16271
16271
|
* the label inside an inline-line-box whose leading pushes block-level siblings
|
|
16272
16272
|
* (e.g. `<FormMessage>`) down by a few pixels — making validation messages sit
|
|
@@ -16282,7 +16282,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16282
16282
|
user-select: none;
|
|
16283
16283
|
/* No `gap` here — spacing between indicator and label, plus the trailing
|
|
16284
16284
|
* whitespace that gives sibling checkboxes their visual separation, lives
|
|
16285
|
-
* on `.
|
|
16285
|
+
* on `.db-checkbox-label` as padding-inline. Matches AntD's `.{prefix}-checkbox + span`
|
|
16286
16286
|
* rule and the prior Emotion-based NativeCheckbox implementation. */
|
|
16287
16287
|
min-height: var(--db-line-height-base, 20px);
|
|
16288
16288
|
width: fit-content;
|
|
@@ -16292,43 +16292,43 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16292
16292
|
* visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
|
|
16293
16293
|
* anyway. Putting `:hover` on the root also makes the entire label area
|
|
16294
16294
|
* — not just the indicator square — drive the visual feedback. */
|
|
16295
|
-
.
|
|
16295
|
+
.db-checkbox:hover:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
|
|
16296
16296
|
background-color: var(--db-checkbox-surface-hover);
|
|
16297
16297
|
border-color: var(--db-checkbox-border-hover);
|
|
16298
16298
|
}
|
|
16299
16299
|
|
|
16300
|
-
.
|
|
16300
|
+
.db-checkbox:active:has(.db-checkbox-input:not(:disabled, :checked, :indeterminate)) .db-checkbox-indicator {
|
|
16301
16301
|
background-color: var(--db-checkbox-surface-press);
|
|
16302
16302
|
border-color: var(--db-checkbox-border-press);
|
|
16303
16303
|
}
|
|
16304
16304
|
|
|
16305
16305
|
/* Selected fill — checked and indeterminate share the same surface. */
|
|
16306
|
-
.
|
|
16306
|
+
.db-checkbox:has(.db-checkbox-input:is(:checked, :indeterminate)) .db-checkbox-indicator {
|
|
16307
16307
|
background-color: var(--db-checkbox-surface-checked);
|
|
16308
16308
|
border-color: var(--db-checkbox-surface-checked);
|
|
16309
16309
|
}
|
|
16310
16310
|
|
|
16311
|
-
.
|
|
16311
|
+
.db-checkbox:hover:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
|
|
16312
16312
|
background-color: var(--db-checkbox-surface-checked-hover);
|
|
16313
16313
|
border-color: var(--db-checkbox-surface-checked-hover);
|
|
16314
16314
|
}
|
|
16315
16315
|
|
|
16316
|
-
.
|
|
16316
|
+
.db-checkbox:active:has(.db-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .db-checkbox-indicator {
|
|
16317
16317
|
background-color: var(--db-checkbox-surface-checked-press);
|
|
16318
16318
|
border-color: var(--db-checkbox-surface-checked-press);
|
|
16319
16319
|
}
|
|
16320
16320
|
|
|
16321
16321
|
/* Mark visibility. */
|
|
16322
|
-
.
|
|
16322
|
+
.db-checkbox:has(.db-checkbox-input:checked) .db-checkbox-checkmark {
|
|
16323
16323
|
opacity: 1;
|
|
16324
16324
|
}
|
|
16325
16325
|
|
|
16326
|
-
.
|
|
16326
|
+
.db-checkbox:has(.db-checkbox-input:indeterminate) .db-checkbox-dash {
|
|
16327
16327
|
opacity: 1;
|
|
16328
16328
|
}
|
|
16329
16329
|
|
|
16330
16330
|
/* Focus-visible (keyboard only). */
|
|
16331
|
-
.
|
|
16331
|
+
.db-checkbox:has(.db-checkbox-input:focus-visible) .db-checkbox-indicator {
|
|
16332
16332
|
outline: var(--db-checkbox-focus-ring-width) solid var(--db-checkbox-focus-ring);
|
|
16333
16333
|
outline-offset: 4px;
|
|
16334
16334
|
}
|
|
@@ -16336,25 +16336,25 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16336
16336
|
/* Disabled (covers unchecked, checked, indeterminate). Sourced from
|
|
16337
16337
|
* `input:disabled` so the standalone-disabled and group-disabled paths both
|
|
16338
16338
|
* land here without needing a separate root modifier class. */
|
|
16339
|
-
.
|
|
16339
|
+
.db-checkbox:has(.db-checkbox-input:disabled) {
|
|
16340
16340
|
cursor: not-allowed;
|
|
16341
16341
|
}
|
|
16342
16342
|
|
|
16343
|
-
.
|
|
16343
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-label {
|
|
16344
16344
|
color: var(--db-checkbox-text-disabled);
|
|
16345
16345
|
}
|
|
16346
16346
|
|
|
16347
|
-
.
|
|
16347
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-indicator {
|
|
16348
16348
|
background-color: var(--db-checkbox-surface-disabled);
|
|
16349
16349
|
border-color: var(--db-checkbox-border-disabled);
|
|
16350
16350
|
box-shadow: none;
|
|
16351
16351
|
}
|
|
16352
16352
|
|
|
16353
|
-
.
|
|
16353
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-checkmark {
|
|
16354
16354
|
color: var(--db-checkbox-mark-disabled);
|
|
16355
16355
|
}
|
|
16356
16356
|
|
|
16357
|
-
.
|
|
16357
|
+
.db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-dash {
|
|
16358
16358
|
background-color: var(--db-checkbox-mark-disabled);
|
|
16359
16359
|
}
|
|
16360
16360
|
|
|
@@ -16367,7 +16367,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16367
16367
|
* `pointer-events: none` (the prior native-only behavior) is what regressed
|
|
16368
16368
|
* interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
|
|
16369
16369
|
* pointer / disabled `not-allowed` cursor so the box keeps AntD's cursor too. */
|
|
16370
|
-
.
|
|
16370
|
+
.db-checkbox .db-checkbox-input {
|
|
16371
16371
|
position: absolute;
|
|
16372
16372
|
inset: 0;
|
|
16373
16373
|
inline-size: var(--db-checkbox-size);
|
|
@@ -16381,7 +16381,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16381
16381
|
* Vertical math: aligns the indicator to the cap-height of the first text
|
|
16382
16382
|
* line so checkbox + label sit on the same visual baseline even when the
|
|
16383
16383
|
* label wraps. */
|
|
16384
|
-
.
|
|
16384
|
+
.db-checkbox .db-checkbox-indicator {
|
|
16385
16385
|
display: grid;
|
|
16386
16386
|
place-items: center;
|
|
16387
16387
|
flex-shrink: 0;
|
|
@@ -16404,7 +16404,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16404
16404
|
box-shadow var(--db-checkbox-transition-duration) ease;
|
|
16405
16405
|
}
|
|
16406
16406
|
|
|
16407
|
-
.
|
|
16407
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark {
|
|
16408
16408
|
grid-area: 1 / 1;
|
|
16409
16409
|
inline-size: 100%;
|
|
16410
16410
|
block-size: 100%;
|
|
@@ -16413,7 +16413,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16413
16413
|
transition: opacity var(--db-checkbox-transition-duration) ease;
|
|
16414
16414
|
}
|
|
16415
16415
|
|
|
16416
|
-
.
|
|
16416
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-checkmark path {
|
|
16417
16417
|
fill: none;
|
|
16418
16418
|
stroke: currentColor;
|
|
16419
16419
|
stroke-width: 2;
|
|
@@ -16421,7 +16421,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16421
16421
|
stroke-linejoin: round;
|
|
16422
16422
|
}
|
|
16423
16423
|
|
|
16424
|
-
.
|
|
16424
|
+
.db-checkbox .db-checkbox-indicator > .db-checkbox-dash {
|
|
16425
16425
|
grid-area: 1 / 1;
|
|
16426
16426
|
inline-size: var(--db-checkbox-indeterminate-mark-width);
|
|
16427
16427
|
block-size: var(--db-checkbox-indeterminate-mark-height);
|
|
@@ -16438,7 +16438,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16438
16438
|
* `padding-right` extends the checkbox's bounding box so adjacent checkboxes in a
|
|
16439
16439
|
* flex row sit ~16px apart (8px trailing + 8px group `gap`) — same visual rhythm
|
|
16440
16440
|
* as the AntD variant. */
|
|
16441
|
-
.
|
|
16441
|
+
.db-checkbox .db-checkbox-label {
|
|
16442
16442
|
color: var(--db-checkbox-text);
|
|
16443
16443
|
padding-inline: var(--db-checkbox-label-spacing);
|
|
16444
16444
|
word-break: break-word;
|
|
@@ -16451,7 +16451,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16451
16451
|
*
|
|
16452
16452
|
* Each helper-text class is listed once per theme (`du-bois-light-*` /
|
|
16453
16453
|
* `du-bois-dark-*`). The selectors deliberately repeat the root/group class
|
|
16454
|
-
* (`.
|
|
16454
|
+
* (`.db-checkbox.db-checkbox`) to push specificity to (0,3,0). That
|
|
16455
16455
|
* overrides `FormMessage`'s own `&&`-doubled `margin-top: 8px` declared with
|
|
16456
16456
|
* Emotion at runtime — without doubling we'd lose on the specificity tie and
|
|
16457
16457
|
* the validation message would keep an 8px gap below the checkbox. */
|
|
@@ -16459,12 +16459,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16459
16459
|
/* Single checkbox followed by Hint and/or FormMessage. Indents the helper text
|
|
16460
16460
|
* by 24px so it aligns with the start of the label, and removes the default
|
|
16461
16461
|
* vertical margin Hint/FormMessage carry. */
|
|
16462
|
-
.
|
|
16463
|
-
.
|
|
16464
|
-
.
|
|
16465
|
-
.
|
|
16466
|
-
.
|
|
16467
|
-
.
|
|
16462
|
+
.db-checkbox.db-checkbox + .du-bois-light-hint,
|
|
16463
|
+
.db-checkbox.db-checkbox + .du-bois-dark-hint,
|
|
16464
|
+
.db-checkbox.db-checkbox + .du-bois-light-form-message,
|
|
16465
|
+
.db-checkbox.db-checkbox + .du-bois-dark-form-message,
|
|
16466
|
+
.db-checkbox.db-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16467
|
+
.db-checkbox.db-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16468
16468
|
padding-left: var(--db-spacing-sm);
|
|
16469
16469
|
margin-top: 0;
|
|
16470
16470
|
}
|
|
@@ -16472,33 +16472,33 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16472
16472
|
/* Group spacing against sibling form text — 8px gap above the group when it
|
|
16473
16473
|
* follows a Hint, 8px gap above a FormMessage when it follows the group.
|
|
16474
16474
|
* Doubled class on the group side beats FormMessage's `&&` for the same reason. */
|
|
16475
|
-
.du-bois-light-hint + .
|
|
16476
|
-
.du-bois-dark-hint + .
|
|
16477
|
-
.
|
|
16478
|
-
.
|
|
16475
|
+
.du-bois-light-hint + .db-checkbox-group.db-checkbox-group,
|
|
16476
|
+
.du-bois-dark-hint + .db-checkbox-group.db-checkbox-group,
|
|
16477
|
+
.db-checkbox-group.db-checkbox-group + .du-bois-light-form-message,
|
|
16478
|
+
.db-checkbox-group.db-checkbox-group + .du-bois-dark-form-message {
|
|
16479
16479
|
margin-top: var(--db-spacing-2xs);
|
|
16480
16480
|
}
|
|
16481
16481
|
|
|
16482
|
-
/* CheckboxGroup layout. Vertical delegates to the `.
|
|
16482
|
+
/* CheckboxGroup layout. Vertical delegates to the `.db-stack` primitive; the
|
|
16483
16483
|
* horizontal default stays bespoke because it must NOT wrap (a long row of
|
|
16484
16484
|
* checkboxes overflows horizontally rather than reflowing onto multiple lines),
|
|
16485
|
-
* which is the one thing `.
|
|
16485
|
+
* which is the one thing `.db-cluster` won't do. Both wire their gap to the
|
|
16486
16486
|
* checkbox spacing token so a retheme moves with the rest of the component. */
|
|
16487
|
-
.
|
|
16487
|
+
.db-checkbox-group {
|
|
16488
16488
|
display: flex;
|
|
16489
16489
|
}
|
|
16490
16490
|
|
|
16491
|
-
/* Horizontal (default): single non-wrapping row. `:not(.
|
|
16491
|
+
/* Horizontal (default): single non-wrapping row. `:not(.db-stack)` keeps this
|
|
16492
16492
|
* off the vertical element so it never fights the stack primitive's gap. */
|
|
16493
|
-
.
|
|
16493
|
+
.db-checkbox-group:not(.db-stack) {
|
|
16494
16494
|
flex-wrap: nowrap;
|
|
16495
16495
|
column-gap: var(--db-checkbox-label-spacing);
|
|
16496
16496
|
row-gap: 0;
|
|
16497
16497
|
}
|
|
16498
16498
|
|
|
16499
|
-
/* Vertical: .
|
|
16500
|
-
.
|
|
16501
|
-
--
|
|
16499
|
+
/* Vertical: .db-stack supplies flex-direction + gap; we only retarget the knob. */
|
|
16500
|
+
.db-checkbox-group.db-stack {
|
|
16501
|
+
--db-stack-gap: var(--db-checkbox-label-spacing);
|
|
16502
16502
|
}
|
|
16503
16503
|
|
|
16504
16504
|
:where(:root), :where(.du-bois-light) {
|
|
@@ -16547,12 +16547,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16547
16547
|
*
|
|
16548
16548
|
* Structure (assumed by the React component):
|
|
16549
16549
|
*
|
|
16550
|
-
* <label class="
|
|
16550
|
+
* <label class="db-radio">
|
|
16551
16551
|
* <input type="radio" />
|
|
16552
|
-
* <span class="
|
|
16553
|
-
* <span class="
|
|
16552
|
+
* <span class="db-radio-indicator"> ← circle border + fill react to state
|
|
16553
|
+
* <span class="db-radio-dot" /> ← visible when :checked
|
|
16554
16554
|
* </span>
|
|
16555
|
-
* <span class="
|
|
16555
|
+
* <span class="db-radio-label">{children}</span>
|
|
16556
16556
|
* </label>
|
|
16557
16557
|
*
|
|
16558
16558
|
* The root only ever has one <input> descendant, so a bare `input` selector is
|
|
@@ -16561,9 +16561,9 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16561
16561
|
* checkmark/dash, and there is no indeterminate state.
|
|
16562
16562
|
*
|
|
16563
16563
|
* TODO(DUBOIS-452): the indicator/dot state styles below are identical to
|
|
16564
|
-
* NativeCheckbox.css — consolidate them into a shared `.
|
|
16564
|
+
* NativeCheckbox.css — consolidate them into a shared `.db-selection-toggle` class. */
|
|
16565
16565
|
|
|
16566
|
-
.
|
|
16566
|
+
.db-radio {
|
|
16567
16567
|
/* `display: flex` (block-level), NOT `inline-flex`: see NativeCheckbox.css for
|
|
16568
16568
|
* the line-box / sibling-spacing rationale. */
|
|
16569
16569
|
display: flex;
|
|
@@ -16578,38 +16578,38 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16578
16578
|
/* Hover/press live on the root (label), not on the input: the input is
|
|
16579
16579
|
* visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
|
|
16580
16580
|
* anyway, and the whole label area should drive the feedback. */
|
|
16581
|
-
.
|
|
16581
|
+
.db-radio:hover:has(input:not(:disabled, :checked)) .db-radio-indicator {
|
|
16582
16582
|
background-color: var(--db-radio-surface-hover);
|
|
16583
16583
|
border-color: var(--db-radio-border-hover);
|
|
16584
16584
|
}
|
|
16585
16585
|
|
|
16586
|
-
.
|
|
16586
|
+
.db-radio:active:has(input:not(:disabled, :checked)) .db-radio-indicator {
|
|
16587
16587
|
background-color: var(--db-radio-surface-press);
|
|
16588
16588
|
border-color: var(--db-radio-border-press);
|
|
16589
16589
|
}
|
|
16590
16590
|
|
|
16591
16591
|
/* Selected fill. */
|
|
16592
|
-
.
|
|
16592
|
+
.db-radio:has(input:checked) .db-radio-indicator {
|
|
16593
16593
|
background-color: var(--db-radio-surface-checked);
|
|
16594
16594
|
border-color: var(--db-radio-surface-checked);
|
|
16595
16595
|
}
|
|
16596
16596
|
|
|
16597
16597
|
/* AntD getRadioInputStyles checked hover: background = actionPrimaryBackgroundHover,
|
|
16598
16598
|
* borderColor = actionPrimaryBackgroundPress (a darker ring than the fill). */
|
|
16599
|
-
.
|
|
16599
|
+
.db-radio:hover:has(input:checked:not(:disabled)) .db-radio-indicator {
|
|
16600
16600
|
background-color: var(--db-radio-surface-checked-hover);
|
|
16601
16601
|
border-color: var(--db-radio-border-checked-hover);
|
|
16602
16602
|
}
|
|
16603
16603
|
|
|
16604
16604
|
/* AntD getRadioInputStyles checked active: background = actionDefaultBackgroundPress,
|
|
16605
16605
|
* borderColor = actionDefaultBorderPress (two-tone, not flat). */
|
|
16606
|
-
.
|
|
16606
|
+
.db-radio:active:has(input:checked:not(:disabled)) .db-radio-indicator {
|
|
16607
16607
|
background-color: var(--db-radio-surface-checked-press);
|
|
16608
16608
|
border-color: var(--db-radio-border-checked-press);
|
|
16609
16609
|
}
|
|
16610
16610
|
|
|
16611
16611
|
/* Dot visibility. */
|
|
16612
|
-
.
|
|
16612
|
+
.db-radio:has(input:checked) .db-radio-dot {
|
|
16613
16613
|
opacity: 1;
|
|
16614
16614
|
}
|
|
16615
16615
|
|
|
@@ -16618,14 +16618,14 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16618
16618
|
*
|
|
16619
16619
|
* UNCHECKED focus (AntD `&:not(disabled) > input:focus + inner`): only the border
|
|
16620
16620
|
* color changes to actionPrimaryBackgroundDefault — NO outline ring. */
|
|
16621
|
-
.
|
|
16621
|
+
.db-radio:has(input:focus-visible:not(:checked)) .db-radio-indicator {
|
|
16622
16622
|
border-color: var(--db-radio-border-unchecked-focus);
|
|
16623
16623
|
}
|
|
16624
16624
|
|
|
16625
16625
|
/* CHECKED focus-visible (AntD `&.checked &:not(disabled) > input:focus-visible + inner`):
|
|
16626
16626
|
* background = actionPrimaryBackgroundDefault, borderColor = actionDefaultBorderFocus,
|
|
16627
16627
|
* outline = 1px solid actionPrimaryBackgroundDefault, outlineOffset = 1. */
|
|
16628
|
-
.
|
|
16628
|
+
.db-radio:has(input:focus-visible:checked) .db-radio-indicator {
|
|
16629
16629
|
background-color: var(--db-radio-surface-checked);
|
|
16630
16630
|
border-color: var(--db-radio-border-focus);
|
|
16631
16631
|
outline: 1px solid var(--db-radio-outline-checked-focus);
|
|
@@ -16634,21 +16634,21 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16634
16634
|
|
|
16635
16635
|
/* Disabled (covers checked and unchecked). Sourced from `input:disabled` so the
|
|
16636
16636
|
* standalone-disabled and group-disabled paths both land here. */
|
|
16637
|
-
.
|
|
16637
|
+
.db-radio:has(input:disabled) {
|
|
16638
16638
|
cursor: not-allowed;
|
|
16639
16639
|
}
|
|
16640
16640
|
|
|
16641
|
-
.
|
|
16641
|
+
.db-radio:has(input:disabled) .db-radio-label {
|
|
16642
16642
|
color: var(--db-radio-text-disabled);
|
|
16643
16643
|
}
|
|
16644
16644
|
|
|
16645
|
-
.
|
|
16645
|
+
.db-radio:has(input:disabled) .db-radio-indicator {
|
|
16646
16646
|
background-color: var(--db-radio-surface-disabled);
|
|
16647
16647
|
border-color: var(--db-radio-border-disabled);
|
|
16648
16648
|
box-shadow: none;
|
|
16649
16649
|
}
|
|
16650
16650
|
|
|
16651
|
-
.
|
|
16651
|
+
.db-radio:has(input:disabled) .db-radio-dot {
|
|
16652
16652
|
background-color: var(--db-radio-mark-disabled);
|
|
16653
16653
|
}
|
|
16654
16654
|
|
|
@@ -16661,7 +16661,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16661
16661
|
* `pointer-events: none` (the prior native-only behavior) is what regressed
|
|
16662
16662
|
* interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
|
|
16663
16663
|
* pointer / disabled `not-allowed` cursor so the circle keeps AntD's cursor too. */
|
|
16664
|
-
.
|
|
16664
|
+
.db-radio input {
|
|
16665
16665
|
position: absolute;
|
|
16666
16666
|
inset: 0;
|
|
16667
16667
|
inline-size: var(--db-radio-size);
|
|
@@ -16674,7 +16674,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16674
16674
|
/* Indicator — circle with the border/fill that responds to state above.
|
|
16675
16675
|
* Vertical math aligns the indicator to the cap-height of the first text line
|
|
16676
16676
|
* so radio + label sit on the same visual baseline even when the label wraps. */
|
|
16677
|
-
.
|
|
16677
|
+
.db-radio .db-radio-indicator {
|
|
16678
16678
|
display: grid;
|
|
16679
16679
|
place-items: center;
|
|
16680
16680
|
flex-shrink: 0;
|
|
@@ -16696,7 +16696,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16696
16696
|
box-shadow var(--db-radio-transition-duration) ease;
|
|
16697
16697
|
}
|
|
16698
16698
|
|
|
16699
|
-
.
|
|
16699
|
+
.db-radio .db-radio-indicator > .db-radio-dot {
|
|
16700
16700
|
grid-area: 1 / 1;
|
|
16701
16701
|
inline-size: var(--db-radio-mark-size);
|
|
16702
16702
|
block-size: var(--db-radio-mark-size);
|
|
@@ -16709,15 +16709,15 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16709
16709
|
/* Honour the user's reduced-motion preference: drop the state-change
|
|
16710
16710
|
* transitions on the indicator and dot so checking/hovering is instant. */
|
|
16711
16711
|
@media (prefers-reduced-motion: reduce) {
|
|
16712
|
-
.
|
|
16713
|
-
.
|
|
16712
|
+
.db-radio .db-radio-indicator,
|
|
16713
|
+
.db-radio .db-radio-indicator > .db-radio-dot {
|
|
16714
16714
|
transition: none;
|
|
16715
16715
|
}
|
|
16716
16716
|
}
|
|
16717
16717
|
|
|
16718
16718
|
/* Padding-inline replicates the AntD `.{prefix} + span` label gap and the
|
|
16719
16719
|
* trailing whitespace that separates adjacent radios in a row. */
|
|
16720
|
-
.
|
|
16720
|
+
.db-radio .db-radio-label {
|
|
16721
16721
|
color: var(--db-radio-text);
|
|
16722
16722
|
padding-inline: var(--db-radio-label-spacing);
|
|
16723
16723
|
word-break: break-word;
|
|
@@ -16727,12 +16727,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16727
16727
|
* indent comes from AntD's getCommonRadioGroupStyles (`& > label + hint`) and applies
|
|
16728
16728
|
* to BOTH layouts. The doubled root class pushes specificity to (0,3,0) to beat
|
|
16729
16729
|
* FormMessage's runtime `&&` margin. */
|
|
16730
|
-
.
|
|
16731
|
-
.
|
|
16732
|
-
.
|
|
16733
|
-
.
|
|
16734
|
-
.
|
|
16735
|
-
.
|
|
16730
|
+
.db-radio.db-radio + .du-bois-light-hint,
|
|
16731
|
+
.db-radio.db-radio + .du-bois-dark-hint,
|
|
16732
|
+
.db-radio.db-radio + .du-bois-light-form-message,
|
|
16733
|
+
.db-radio.db-radio + .du-bois-dark-form-message,
|
|
16734
|
+
.db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16735
|
+
.db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16736
16736
|
padding-inline-start: var(--db-spacing-sm);
|
|
16737
16737
|
margin-top: 0;
|
|
16738
16738
|
}
|
|
@@ -16741,70 +16741,70 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16741
16741
|
* after a radio gets `marginTop: -sm` (cancels the preceding radio's
|
|
16742
16742
|
* `paddingBottom: sm` so the hint tucks directly under its label) and
|
|
16743
16743
|
* `marginBottom: sm` (gap before the next radio). The negative top margin relies on
|
|
16744
|
-
* the .
|
|
16744
|
+
* the .db-stack gap being 0 (set below). Scoped to .db-stack so it never perturbs
|
|
16745
16745
|
* the horizontal grid, where hints are positioned by grid-row instead. */
|
|
16746
|
-
.
|
|
16747
|
-
.
|
|
16748
|
-
.
|
|
16749
|
-
.
|
|
16750
|
-
.
|
|
16751
|
-
.
|
|
16746
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint,
|
|
16747
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint,
|
|
16748
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-form-message,
|
|
16749
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-form-message,
|
|
16750
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16751
|
+
.db-radio-group.db-stack > .db-radio.db-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16752
16752
|
margin-top: calc(-1 * var(--db-spacing-2xs));
|
|
16753
16753
|
margin-bottom: var(--db-spacing-2xs);
|
|
16754
16754
|
}
|
|
16755
16755
|
|
|
16756
16756
|
/* AntD `& > label:last-of-type + hint { marginTop: 0 }`: the last radio has no
|
|
16757
16757
|
* `paddingBottom` to cancel, so its trailing hint keeps its natural top position. */
|
|
16758
|
-
.
|
|
16759
|
-
.
|
|
16760
|
-
.
|
|
16761
|
-
.
|
|
16762
|
-
.
|
|
16763
|
-
.
|
|
16758
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint,
|
|
16759
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint,
|
|
16760
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-form-message,
|
|
16761
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-form-message,
|
|
16762
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-light-hint + .du-bois-light-form-message,
|
|
16763
|
+
.db-radio-group.db-stack > .db-radio.db-radio:last-of-type + .du-bois-dark-hint + .du-bois-dark-form-message {
|
|
16764
16764
|
margin-top: 0;
|
|
16765
16765
|
}
|
|
16766
16766
|
|
|
16767
|
-
.du-bois-light-hint + .
|
|
16768
|
-
.du-bois-dark-hint + .
|
|
16769
|
-
.
|
|
16770
|
-
.
|
|
16767
|
+
.du-bois-light-hint + .db-radio-group.db-radio-group,
|
|
16768
|
+
.du-bois-dark-hint + .db-radio-group.db-radio-group,
|
|
16769
|
+
.db-radio-group.db-radio-group + .du-bois-light-form-message,
|
|
16770
|
+
.db-radio-group.db-radio-group + .du-bois-dark-form-message {
|
|
16771
16771
|
margin-top: var(--db-spacing-2xs);
|
|
16772
16772
|
}
|
|
16773
16773
|
|
|
16774
16774
|
/* RadioGroup layout. Vertical (the default) delegates flex-direction to the
|
|
16775
|
-
* .
|
|
16776
|
-
.
|
|
16775
|
+
* .db-stack primitive; horizontal is a two-row grid (mirroring AntD). */
|
|
16776
|
+
.db-radio-group {
|
|
16777
16777
|
display: flex;
|
|
16778
16778
|
}
|
|
16779
16779
|
|
|
16780
|
-
/* Vertical: .
|
|
16780
|
+
/* Vertical: .db-stack supplies flex-direction: column. AntD's vertical helper
|
|
16781
16781
|
* (getVerticalRadioGroupStyles) produces its item rhythm purely from
|
|
16782
16782
|
* `& > label { paddingBottom: sm }` plus the negative-margin hint trick above — it
|
|
16783
16783
|
* uses NO flex gap. The negative `marginTop` on hints only works if the stack adds
|
|
16784
16784
|
* no gap of its own, so we zero out the gap and reproduce the rhythm via
|
|
16785
16785
|
* padding-bottom on each radio. */
|
|
16786
|
-
.
|
|
16787
|
-
--
|
|
16786
|
+
.db-radio-group.db-stack {
|
|
16787
|
+
--db-stack-gap: 0;
|
|
16788
16788
|
}
|
|
16789
16789
|
|
|
16790
16790
|
/* AntD `& > label { paddingBottom: sm }`. */
|
|
16791
|
-
.
|
|
16791
|
+
.db-radio-group.db-stack > .db-radio {
|
|
16792
16792
|
padding-bottom: var(--db-spacing-2xs);
|
|
16793
16793
|
}
|
|
16794
16794
|
|
|
16795
16795
|
/* AntD `& > label:last-of-type { paddingBottom: 0 }`. */
|
|
16796
|
-
.
|
|
16796
|
+
.db-radio-group.db-stack > .db-radio:last-of-type {
|
|
16797
16797
|
padding-bottom: 0;
|
|
16798
16798
|
}
|
|
16799
16799
|
|
|
16800
16800
|
/* AntD getVerticalRadioGroupStyles `.${prefix}-radio-tile + .${prefix}-radio-tile {
|
|
16801
|
-
* marginTop: md }`: RadioTiles are not matched by the `.
|
|
16801
|
+
* marginTop: md }`: RadioTiles are not matched by the `.db-radio` padding-bottom
|
|
16802
16802
|
* rhythm above (the tile's own class is du-bois-{light,dark}-radio-tile), so space
|
|
16803
|
-
* consecutive tiles explicitly. The .
|
|
16804
|
-
.
|
|
16805
|
-
.
|
|
16806
|
-
.
|
|
16807
|
-
.
|
|
16803
|
+
* consecutive tiles explicitly. The .db-stack gap is 0, so this margin is the spacing. */
|
|
16804
|
+
.db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-light-radio-tile,
|
|
16805
|
+
.db-radio-group.db-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
|
|
16806
|
+
.db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
|
|
16807
|
+
.db-radio-group.db-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
|
|
16808
16808
|
margin-top: var(--db-spacing-xs);
|
|
16809
16809
|
}
|
|
16810
16810
|
|
|
@@ -16814,7 +16814,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16814
16814
|
* group class here matches that.
|
|
16815
16815
|
* AntD: `display: grid; gridTemplateRows: [label] auto [hint] auto;
|
|
16816
16816
|
* gridAutoColumns: max-content; gridColumnGap: md`. */
|
|
16817
|
-
.
|
|
16817
|
+
.db-radio-group--horizontal.db-radio-group--horizontal {
|
|
16818
16818
|
display: grid;
|
|
16819
16819
|
grid-template-rows: [label] auto [hint] auto;
|
|
16820
16820
|
grid-auto-columns: max-content;
|
|
@@ -16822,42 +16822,42 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16822
16822
|
}
|
|
16823
16823
|
|
|
16824
16824
|
/* Equal column widths: AntD `gridAutoColumns: minmax(0, 1fr)`. */
|
|
16825
|
-
.
|
|
16825
|
+
.db-radio-group--horizontal.db-radio-group--equal-width {
|
|
16826
16826
|
grid-auto-columns: minmax(0, 1fr);
|
|
16827
16827
|
}
|
|
16828
16828
|
|
|
16829
16829
|
/* AntD `& > label, & > .${prefix}-radio-tile { gridRow: label / label; marginRight: 0 }`:
|
|
16830
16830
|
* every radio (and every RadioTile button, whose own class is
|
|
16831
|
-
* du-bois-{light,dark}-radio-tile and is NOT matched by `> .
|
|
16831
|
+
* du-bois-{light,dark}-radio-tile and is NOT matched by `> .db-radio`) lives in the
|
|
16832
16832
|
* label row. grid-auto-flow defaults to row, so successive items advance the implicit
|
|
16833
16833
|
* column. */
|
|
16834
|
-
.
|
|
16835
|
-
.
|
|
16836
|
-
.
|
|
16834
|
+
.db-radio-group--horizontal > .db-radio,
|
|
16835
|
+
.db-radio-group--horizontal > .du-bois-light-radio-tile,
|
|
16836
|
+
.db-radio-group--horizontal > .du-bois-dark-radio-tile {
|
|
16837
16837
|
grid-row: label / label;
|
|
16838
16838
|
margin-inline-end: 0;
|
|
16839
16839
|
}
|
|
16840
16840
|
|
|
16841
16841
|
/* AntD `& > label + hint { display: inline-block; gridRow: hint / hint }`: a hint
|
|
16842
16842
|
* following a radio drops into the hint row of the column its radio occupies. The
|
|
16843
|
-
* vertical negative-margin rules are scoped to .
|
|
16844
|
-
.
|
|
16845
|
-
.
|
|
16843
|
+
* vertical negative-margin rules are scoped to .db-stack, so nothing to reset here. */
|
|
16844
|
+
.db-radio-group--horizontal > .du-bois-light-hint,
|
|
16845
|
+
.db-radio-group--horizontal > .du-bois-dark-hint {
|
|
16846
16846
|
display: inline-block;
|
|
16847
16847
|
grid-row: hint / hint;
|
|
16848
16848
|
}
|
|
16849
16849
|
|
|
16850
16850
|
/* AntD `:has(> hint) { marginTop: sm }`: when the horizontal group contains a hint,
|
|
16851
16851
|
* the group itself gets a top margin (room above the two-row grid). */
|
|
16852
|
-
.
|
|
16853
|
-
.
|
|
16852
|
+
.db-radio-group--horizontal:has(> .du-bois-light-hint),
|
|
16853
|
+
.db-radio-group--horizontal:has(> .du-bois-dark-hint) {
|
|
16854
16854
|
margin-top: var(--db-spacing-2xs);
|
|
16855
16855
|
}
|
|
16856
16856
|
|
|
16857
16857
|
/* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
|
|
16858
16858
|
* the whole group is separated by sm. */
|
|
16859
|
-
.
|
|
16860
|
-
.
|
|
16859
|
+
.db-radio-group--horizontal + .du-bois-light-form-message,
|
|
16860
|
+
.db-radio-group--horizontal + .du-bois-dark-form-message {
|
|
16861
16861
|
margin-top: var(--db-spacing-2xs);
|
|
16862
16862
|
}
|
|
16863
16863
|
|
|
@@ -16900,7 +16900,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16900
16900
|
--db-switch-transition-duration: var(--db-selection-toggle-transition-duration);
|
|
16901
16901
|
}
|
|
16902
16902
|
|
|
16903
|
-
.
|
|
16903
|
+
.db-switch {
|
|
16904
16904
|
/* flex, not inline-flex: an inline-flex root's line-box leading pushes block siblings
|
|
16905
16905
|
* (e.g. a following FormMessage) down a few px, breaking the form-flow spacing. */
|
|
16906
16906
|
display: flex;
|
|
@@ -16911,12 +16911,12 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16911
16911
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
16912
16912
|
}
|
|
16913
16913
|
|
|
16914
|
-
.
|
|
16914
|
+
.db-switch:has(input:disabled) {
|
|
16915
16915
|
cursor: not-allowed;
|
|
16916
16916
|
}
|
|
16917
16917
|
|
|
16918
16918
|
/* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled. */
|
|
16919
|
-
.
|
|
16919
|
+
.db-switch input {
|
|
16920
16920
|
appearance: none;
|
|
16921
16921
|
position: relative;
|
|
16922
16922
|
flex-shrink: 0;
|
|
@@ -16935,7 +16935,7 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16935
16935
|
|
|
16936
16936
|
/* The thumb. A pseudo-element keeps the input the switch's only element, so nothing can overlay it
|
|
16937
16937
|
* and intercept clicks. Offset left by the border width to sit flush with the track's outer edge. */
|
|
16938
|
-
.
|
|
16938
|
+
.db-switch input::before {
|
|
16939
16939
|
content: '';
|
|
16940
16940
|
position: absolute;
|
|
16941
16941
|
top: 50%;
|
|
@@ -16952,32 +16952,32 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16952
16952
|
}
|
|
16953
16953
|
|
|
16954
16954
|
/* `<label for>` propagates `:hover` to the input, so scope hover/press to the control, not `input:hover`. */
|
|
16955
|
-
.
|
|
16955
|
+
.db-switch:hover input:not(:disabled):not(:checked) {
|
|
16956
16956
|
background-color: var(--db-switch-surface-hover);
|
|
16957
16957
|
border-color: var(--db-switch-border-hover);
|
|
16958
16958
|
}
|
|
16959
16959
|
|
|
16960
|
-
.
|
|
16960
|
+
.db-switch:active input:not(:disabled):not(:checked) {
|
|
16961
16961
|
background-color: var(--db-switch-surface-press);
|
|
16962
16962
|
border-color: var(--db-switch-border-press);
|
|
16963
16963
|
}
|
|
16964
16964
|
|
|
16965
|
-
.
|
|
16965
|
+
.db-switch input:checked {
|
|
16966
16966
|
background-color: var(--db-switch-surface-checked);
|
|
16967
16967
|
border-color: var(--db-switch-border-checked);
|
|
16968
16968
|
}
|
|
16969
16969
|
|
|
16970
|
-
.
|
|
16970
|
+
.db-switch:hover input:checked:not(:disabled) {
|
|
16971
16971
|
background-color: var(--db-switch-surface-checked-hover);
|
|
16972
16972
|
border-color: var(--db-switch-border-checked-hover);
|
|
16973
16973
|
}
|
|
16974
16974
|
|
|
16975
|
-
.
|
|
16975
|
+
.db-switch:active input:checked:not(:disabled) {
|
|
16976
16976
|
background-color: var(--db-switch-surface-checked-press);
|
|
16977
16977
|
border-color: var(--db-switch-border-checked-press);
|
|
16978
16978
|
}
|
|
16979
16979
|
|
|
16980
|
-
.
|
|
16980
|
+
.db-switch input:checked::before {
|
|
16981
16981
|
transform: translateY(-50%) translateX(calc(var(--db-switch-track-width) - var(--db-switch-thumb-size)));
|
|
16982
16982
|
}
|
|
16983
16983
|
|
|
@@ -16985,72 +16985,72 @@ span.du-bois-light-typography-ellipsis-single-line {
|
|
|
16985
16985
|
* the ring sits flush when off and gains a 1px offset when checked.
|
|
16986
16986
|
* TODO: width/offset are hardcoded 1px to preserve the AntD look; adopt the system 2px focus ring
|
|
16987
16987
|
* (var(--db-focus-ring-width)) in a separate change. */
|
|
16988
|
-
.
|
|
16988
|
+
.db-switch input:focus-visible {
|
|
16989
16989
|
border-color: var(--db-switch-border-focus);
|
|
16990
16990
|
outline: 1px solid var(--db-focus-ring-color);
|
|
16991
16991
|
outline-offset: 0;
|
|
16992
16992
|
}
|
|
16993
16993
|
|
|
16994
|
-
.
|
|
16994
|
+
.db-switch input:checked:focus-visible {
|
|
16995
16995
|
outline-offset: 1px;
|
|
16996
16996
|
}
|
|
16997
16997
|
|
|
16998
|
-
.
|
|
16998
|
+
.db-switch input:disabled {
|
|
16999
16999
|
cursor: not-allowed;
|
|
17000
17000
|
background-color: var(--db-switch-surface-disabled);
|
|
17001
17001
|
border-color: var(--db-switch-border-disabled);
|
|
17002
17002
|
}
|
|
17003
17003
|
|
|
17004
17004
|
/* Disabled + on: more specific than the plain disabled rule, so it wins regardless of source order. */
|
|
17005
|
-
.
|
|
17005
|
+
.db-switch input:checked:disabled {
|
|
17006
17006
|
background-color: var(--db-switch-surface-checked-disabled);
|
|
17007
17007
|
border-color: var(--db-switch-surface-checked-disabled);
|
|
17008
17008
|
}
|
|
17009
17009
|
|
|
17010
17010
|
@media (prefers-reduced-motion: reduce) {
|
|
17011
|
-
.
|
|
17012
|
-
.
|
|
17011
|
+
.db-switch input,
|
|
17012
|
+
.db-switch input::before {
|
|
17013
17013
|
transition: none;
|
|
17014
17014
|
}
|
|
17015
17015
|
}
|
|
17016
17016
|
|
|
17017
|
-
.
|
|
17017
|
+
.db-switch-wrapper {
|
|
17018
17018
|
display: flex;
|
|
17019
17019
|
align-items: center;
|
|
17020
17020
|
}
|
|
17021
17021
|
|
|
17022
|
-
.
|
|
17022
|
+
.db-switch-wrapper .db-switch-state-message {
|
|
17023
17023
|
margin-inline-start: auto;
|
|
17024
17024
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
17025
17025
|
}
|
|
17026
17026
|
|
|
17027
17027
|
/* `:first-child` scopes this to the label-first layout; the plain layout renders the label last. */
|
|
17028
|
-
.
|
|
17029
|
-
.
|
|
17028
|
+
.db-switch-wrapper > .du-bois-light-label:first-child,
|
|
17029
|
+
.db-switch-wrapper > .du-bois-dark-label:first-child {
|
|
17030
17030
|
margin-inline-end: var(--db-switch-label-spacing);
|
|
17031
17031
|
}
|
|
17032
17032
|
|
|
17033
|
-
.
|
|
17033
|
+
.db-switch-state-message {
|
|
17034
17034
|
color: var(--db-switch-text);
|
|
17035
17035
|
}
|
|
17036
17036
|
|
|
17037
|
-
/* Target the <Label>'s class, not a bare `label` — that would also match the .
|
|
17038
|
-
.
|
|
17039
|
-
.
|
|
17037
|
+
/* Target the <Label>'s class, not a bare `label` — that would also match the .db-switch root <label>. */
|
|
17038
|
+
.db-switch-wrapper:has(input:disabled) .du-bois-light-label,
|
|
17039
|
+
.db-switch-wrapper:has(input:disabled) .du-bois-dark-label {
|
|
17040
17040
|
color: var(--db-switch-text-disabled);
|
|
17041
17041
|
}
|
|
17042
17042
|
|
|
17043
17043
|
/* Indent a following hint/message past the track. The class is doubled to out-specify FormMessage's
|
|
17044
17044
|
* own margin rule. */
|
|
17045
|
-
:is(.
|
|
17046
|
-
+ :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.
|
|
17045
|
+
:is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
17046
|
+
+ :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)
|
|
17047
17047
|
+ :is(.du-bois-light-hint, .du-bois-dark-hint)
|
|
17048
17048
|
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
|
|
17049
17049
|
padding-inline-start: calc(var(--db-spacing-2xs) + var(--db-switch-track-width));
|
|
17050
17050
|
}
|
|
17051
17051
|
|
|
17052
|
-
:is(.
|
|
17053
|
-
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.
|
|
17052
|
+
:is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
17053
|
+
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.db-switch.db-switch, .db-switch-wrapper.db-switch-wrapper)
|
|
17054
17054
|
+ :is(.du-bois-light-hint, .du-bois-dark-hint)
|
|
17055
17055
|
+ :is(.du-bois-light-form-message, .du-bois-dark-form-message) {
|
|
17056
17056
|
margin-top: 0;
|