@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.
@@ -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="ds-stack">
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="ds-stack" style="--ds-stack-gap: var(--db-spacing-lg)">…</div>
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="ds-stack" style="--ds-stack-align: flex-start">…</div>
15819
+ <div class="db-stack" style="--db-stack-align: flex-start">…</div>
15820
15820
  */
15821
- .ds-stack {
15821
+ .db-stack {
15822
15822
  /* These variables act as the *parameters* for the stack instance. */
15823
- --ds-stack-gap: var(--db-spacing-xs);
15824
- --ds-stack-align: stretch;
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(--ds-stack-align);
15829
- gap: var(--ds-stack-gap);
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="ds-cluster">
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="ds-cluster" style="--ds-cluster-justify: space-between">…</div>
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="ds-cluster" style="--ds-cluster-gap: var(--db-spacing-sm)">…</div>
15847
+ <div class="db-cluster" style="--db-cluster-gap: var(--db-spacing-sm)">…</div>
15848
15848
  */
15849
- .ds-cluster {
15849
+ .db-cluster {
15850
15850
  /* These variables act as the *parameters* for the cluster instance. */
15851
- --ds-cluster-gap: var(--db-spacing-2xs);
15852
- --ds-cluster-align: center;
15853
- --ds-cluster-justify: flex-start;
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(--ds-cluster-align);
15858
- justify-content: var(--ds-cluster-justify);
15859
- gap: var(--ds-cluster-gap);
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="ds-checkbox">
16082
- * <input type="checkbox" class="ds-checkbox-input" />
16083
- * <span class="ds-checkbox-indicator"> ← border + fill react to state
16084
- * <svg class="ds-checkbox-checkmark" .../> ← visible when :checked
16085
- * <span class="ds-checkbox-dash" /> ← visible when :indeterminate
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="ds-checkbox-label">{children}</span>
16087
+ * <span class="db-checkbox-label">{children}</span>
16088
16088
  * </label>
16089
16089
  *
16090
- * State and hiding rules target `.ds-checkbox-input` — the checkbox's OWN input —
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
- .ds-checkbox {
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 `.ds-checkbox-label` as padding-inline. Matches AntD's `.{prefix}-checkbox + span`
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
- .ds-checkbox:hover:has(.ds-checkbox-input:not(:disabled, :checked, :indeterminate)) .ds-checkbox-indicator {
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
- .ds-checkbox:active:has(.ds-checkbox-input:not(:disabled, :checked, :indeterminate)) .ds-checkbox-indicator {
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
- .ds-checkbox:has(.ds-checkbox-input:is(:checked, :indeterminate)) .ds-checkbox-indicator {
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
- .ds-checkbox:hover:has(.ds-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .ds-checkbox-indicator {
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
- .ds-checkbox:active:has(.ds-checkbox-input:is(:checked, :indeterminate):not(:disabled)) .ds-checkbox-indicator {
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
- .ds-checkbox:has(.ds-checkbox-input:checked) .ds-checkbox-checkmark {
16148
+ .db-checkbox:has(.db-checkbox-input:checked) .db-checkbox-checkmark {
16149
16149
  opacity: 1;
16150
16150
  }
16151
16151
 
16152
- .ds-checkbox:has(.ds-checkbox-input:indeterminate) .ds-checkbox-dash {
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
- .ds-checkbox:has(.ds-checkbox-input:focus-visible) .ds-checkbox-indicator {
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
- .ds-checkbox:has(.ds-checkbox-input:disabled) {
16165
+ .db-checkbox:has(.db-checkbox-input:disabled) {
16166
16166
  cursor: not-allowed;
16167
16167
  }
16168
16168
 
16169
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-label {
16169
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-label {
16170
16170
  color: var(--db-checkbox-text-disabled);
16171
16171
  }
16172
16172
 
16173
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-indicator {
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
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-checkmark {
16179
+ .db-checkbox:has(.db-checkbox-input:disabled) .db-checkbox-checkmark {
16180
16180
  color: var(--db-checkbox-mark-disabled);
16181
16181
  }
16182
16182
 
16183
- .ds-checkbox:has(.ds-checkbox-input:disabled) .ds-checkbox-dash {
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
- .ds-checkbox .ds-checkbox-input {
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
- .ds-checkbox .ds-checkbox-indicator {
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
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-checkmark {
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
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-checkmark path {
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
- .ds-checkbox .ds-checkbox-indicator > .ds-checkbox-dash {
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
- .ds-checkbox .ds-checkbox-label {
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
- * (`.ds-checkbox.ds-checkbox`) to push specificity to (0,3,0). That
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
- .ds-checkbox.ds-checkbox + .du-bois-light-hint,
16289
- .ds-checkbox.ds-checkbox + .du-bois-dark-hint,
16290
- .ds-checkbox.ds-checkbox + .du-bois-light-form-message,
16291
- .ds-checkbox.ds-checkbox + .du-bois-dark-form-message,
16292
- .ds-checkbox.ds-checkbox + .du-bois-light-hint + .du-bois-light-form-message,
16293
- .ds-checkbox.ds-checkbox + .du-bois-dark-hint + .du-bois-dark-form-message {
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 + .ds-checkbox-group.ds-checkbox-group,
16302
- .du-bois-dark-hint + .ds-checkbox-group.ds-checkbox-group,
16303
- .ds-checkbox-group.ds-checkbox-group + .du-bois-light-form-message,
16304
- .ds-checkbox-group.ds-checkbox-group + .du-bois-dark-form-message {
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 `.ds-stack` primitive; 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 `.ds-cluster` won't do. Both wire their gap to the
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
- .ds-checkbox-group {
16313
+ .db-checkbox-group {
16314
16314
  display: flex;
16315
16315
  }
16316
16316
 
16317
- /* Horizontal (default): single non-wrapping row. `:not(.ds-stack)` keeps this
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
- .ds-checkbox-group:not(.ds-stack) {
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: .ds-stack supplies flex-direction + gap; we only retarget the knob. */
16326
- .ds-checkbox-group.ds-stack {
16327
- --ds-stack-gap: var(--db-checkbox-label-spacing);
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="ds-radio">
16376
+ * <label class="db-radio">
16377
16377
  * <input type="radio" />
16378
- * <span class="ds-radio-indicator"> ← circle border + fill react to state
16379
- * <span class="ds-radio-dot" /> ← visible when :checked
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="ds-radio-label">{children}</span>
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 `.ds-selection-toggle` class. */
16390
+ * NativeCheckbox.css — consolidate them into a shared `.db-selection-toggle` class. */
16391
16391
 
16392
- .ds-radio {
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
- .ds-radio:hover:has(input:not(:disabled, :checked)) .ds-radio-indicator {
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
- .ds-radio:active:has(input:not(:disabled, :checked)) .ds-radio-indicator {
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
- .ds-radio:has(input:checked) .ds-radio-indicator {
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
- .ds-radio:hover:has(input:checked:not(:disabled)) .ds-radio-indicator {
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
- .ds-radio:active:has(input:checked:not(:disabled)) .ds-radio-indicator {
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
- .ds-radio:has(input:checked) .ds-radio-dot {
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
- .ds-radio:has(input:focus-visible:not(:checked)) .ds-radio-indicator {
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
- .ds-radio:has(input:focus-visible:checked) .ds-radio-indicator {
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
- .ds-radio:has(input:disabled) {
16463
+ .db-radio:has(input:disabled) {
16464
16464
  cursor: not-allowed;
16465
16465
  }
16466
16466
 
16467
- .ds-radio:has(input:disabled) .ds-radio-label {
16467
+ .db-radio:has(input:disabled) .db-radio-label {
16468
16468
  color: var(--db-radio-text-disabled);
16469
16469
  }
16470
16470
 
16471
- .ds-radio:has(input:disabled) .ds-radio-indicator {
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
- .ds-radio:has(input:disabled) .ds-radio-dot {
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
- .ds-radio input {
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
- .ds-radio .ds-radio-indicator {
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
- .ds-radio .ds-radio-indicator > .ds-radio-dot {
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
- .ds-radio .ds-radio-indicator,
16539
- .ds-radio .ds-radio-indicator > .ds-radio-dot {
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
- .ds-radio .ds-radio-label {
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
- .ds-radio.ds-radio + .du-bois-light-hint,
16557
- .ds-radio.ds-radio + .du-bois-dark-hint,
16558
- .ds-radio.ds-radio + .du-bois-light-form-message,
16559
- .ds-radio.ds-radio + .du-bois-dark-form-message,
16560
- .ds-radio.ds-radio + .du-bois-light-hint + .du-bois-light-form-message,
16561
- .ds-radio.ds-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
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 .ds-stack gap being 0 (set below). Scoped to .ds-stack so it never perturbs
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
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-hint,
16573
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-hint,
16574
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-form-message,
16575
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-form-message,
16576
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-light-hint + .du-bois-light-form-message,
16577
- .ds-radio-group.ds-stack > .ds-radio.ds-radio + .du-bois-dark-hint + .du-bois-dark-form-message {
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
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-hint,
16585
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-hint,
16586
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-form-message,
16587
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-form-message,
16588
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-light-hint + .du-bois-light-form-message,
16589
- .ds-radio-group.ds-stack > .ds-radio.ds-radio:last-of-type + .du-bois-dark-hint + .du-bois-dark-form-message {
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 + .ds-radio-group.ds-radio-group,
16594
- .du-bois-dark-hint + .ds-radio-group.ds-radio-group,
16595
- .ds-radio-group.ds-radio-group + .du-bois-light-form-message,
16596
- .ds-radio-group.ds-radio-group + .du-bois-dark-form-message {
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
- * .ds-stack primitive; horizontal is a two-row grid (mirroring AntD). */
16602
- .ds-radio-group {
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: .ds-stack supplies flex-direction: column. AntD's vertical helper
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
- .ds-radio-group.ds-stack {
16613
- --ds-stack-gap: 0;
16612
+ .db-radio-group.db-stack {
16613
+ --db-stack-gap: 0;
16614
16614
  }
16615
16615
 
16616
16616
  /* AntD `& > label { paddingBottom: sm }`. */
16617
- .ds-radio-group.ds-stack > .ds-radio {
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
- .ds-radio-group.ds-stack > .ds-radio:last-of-type {
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 `.ds-radio` padding-bottom
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 .ds-stack gap is 0, so this margin is the spacing. */
16630
- .ds-radio-group.ds-stack > .du-bois-light-radio-tile + .du-bois-light-radio-tile,
16631
- .ds-radio-group.ds-stack > .du-bois-light-radio-tile + .du-bois-dark-radio-tile,
16632
- .ds-radio-group.ds-stack > .du-bois-dark-radio-tile + .du-bois-light-radio-tile,
16633
- .ds-radio-group.ds-stack > .du-bois-dark-radio-tile + .du-bois-dark-radio-tile {
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
- .ds-radio-group--horizontal.ds-radio-group--horizontal {
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
- .ds-radio-group--horizontal.ds-radio-group--equal-width {
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 `> .ds-radio`) lives in the
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
- .ds-radio-group--horizontal > .ds-radio,
16661
- .ds-radio-group--horizontal > .du-bois-light-radio-tile,
16662
- .ds-radio-group--horizontal > .du-bois-dark-radio-tile {
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 .ds-stack, so nothing to reset here. */
16670
- .ds-radio-group--horizontal > .du-bois-light-hint,
16671
- .ds-radio-group--horizontal > .du-bois-dark-hint {
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
- .ds-radio-group--horizontal:has(> .du-bois-light-hint),
16679
- .ds-radio-group--horizontal:has(> .du-bois-dark-hint) {
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
- .ds-radio-group--horizontal + .du-bois-light-form-message,
16686
- .ds-radio-group--horizontal + .du-bois-dark-form-message {
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
- .ds-switch {
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
- .ds-switch:has(input:disabled) {
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
- .ds-switch input {
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
- .ds-switch input::before {
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
- .ds-switch:hover input:not(:disabled):not(:checked) {
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
- .ds-switch:active input:not(:disabled):not(:checked) {
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
- .ds-switch input:checked {
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
- .ds-switch:hover input:checked:not(:disabled) {
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
- .ds-switch:active input:checked:not(:disabled) {
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
- .ds-switch input:checked::before {
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
- .ds-switch input:focus-visible {
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
- .ds-switch input:checked:focus-visible {
16820
+ .db-switch input:checked:focus-visible {
16821
16821
  outline-offset: 1px;
16822
16822
  }
16823
16823
 
16824
- .ds-switch input:disabled {
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
- .ds-switch input:checked:disabled {
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
- .ds-switch input,
16838
- .ds-switch input::before {
16837
+ .db-switch input,
16838
+ .db-switch input::before {
16839
16839
  transition: none;
16840
16840
  }
16841
16841
  }
16842
16842
 
16843
- .ds-switch-wrapper {
16843
+ .db-switch-wrapper {
16844
16844
  display: flex;
16845
16845
  align-items: center;
16846
16846
  }
16847
16847
 
16848
- .ds-switch-wrapper .ds-switch-state-message {
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
- .ds-switch-wrapper > .du-bois-light-label:first-child,
16855
- .ds-switch-wrapper > .du-bois-dark-label:first-child {
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
- .ds-switch-state-message {
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 .ds-switch root <label>. */
16864
- .ds-switch-wrapper:has(input:disabled) .du-bois-light-label,
16865
- .ds-switch-wrapper:has(input:disabled) .du-bois-dark-label {
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(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
16872
- + :is(.du-bois-light-hint, .du-bois-dark-hint, .du-bois-light-form-message, .du-bois-dark-form-message), :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
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(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
16879
- + :is(.du-bois-light-form-message, .du-bois-dark-form-message), :is(.ds-switch.ds-switch, .ds-switch-wrapper.ds-switch-wrapper)
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;