@databricks/design-system 2.0.5 → 2.0.7

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.
Files changed (52) hide show
  1. package/AGENTS.md +239 -166
  2. package/CHANGELOG.md +47 -0
  3. package/design-guidance/docs/README.md +40 -0
  4. package/design-guidance/docs/review-contract.md +22 -0
  5. package/design-guidance/docs/tokens.md +35 -0
  6. package/design-guidance/docs/voice.md +40 -0
  7. package/design-guidance/skills/dbui-build-screen.md +24 -0
  8. package/design-guidance/skills/dbui-check-ecosystem.md +21 -0
  9. package/design-guidance/skills/dbui-check-guidelines.md +29 -0
  10. package/design-guidance/skills/dbui-check-principles.md +26 -0
  11. package/design-guidance/skills/dbui-check-voice.md +17 -0
  12. package/design-guidance/skills/dbui-pick-component.md +23 -0
  13. package/design-guidance/skills/dbui-pick-icon.md +23 -0
  14. package/design-guidance/skills/dbui-review.md +30 -0
  15. package/design-guidance/skills/dbui-validate.md +23 -0
  16. package/dist/{RHFControlledTypeaheadComboboxV2-DsH-nIEk.js → RHFControlledTypeaheadComboboxV2-nSSYj16I.js} +5 -5
  17. package/dist/{RHFControlledTypeaheadComboboxV2-DsH-nIEk.js.map → RHFControlledTypeaheadComboboxV2-nSSYj16I.js.map} +1 -1
  18. package/dist/{WizardStepContentWrapper-Bq1wm0V7.js → WizardStepContentWrapper-bbh_CoIf.js} +644 -679
  19. package/dist/WizardStepContentWrapper-bbh_CoIf.js.map +1 -0
  20. package/dist/dubois-colors.less +1 -1
  21. package/dist/icon-metadata.json +2069 -0
  22. package/dist/{index-BRAVZg-S.js → index-CUCuUviS.js} +350 -139
  23. package/dist/index-CUCuUviS.js.map +1 -0
  24. package/dist/index-dark.css +593 -191
  25. package/dist/index-dark.mitigated.css +623 -208
  26. package/dist/index.css +1536 -1049
  27. package/dist/index.js +4 -4
  28. package/dist/index.mitigated.css +1566 -1066
  29. package/dist/patterns.js +3 -3
  30. package/dist-types/design-system/Alert/Alert.d.ts +21 -4
  31. package/dist-types/design-system/Button/Button.d.ts +2 -1
  32. package/dist-types/design-system/Drawer/Drawer.d.ts +3 -1
  33. package/dist-types/design-system/Icon/AntdIcon.d.ts +3 -0
  34. package/dist-types/design-system/Icon/Icon.d.ts +20 -6
  35. package/dist-types/design-system/Icon/NativeIcon.d.ts +3 -0
  36. package/dist-types/design-system/Icon/__generated/icons/LakewatchIcon.d.ts +4 -0
  37. package/dist-types/design-system/Icon/__generated/icons/SlidesIcon.d.ts +4 -0
  38. package/dist-types/design-system/Icon/__generated/icons/index.d.ts +2 -0
  39. package/dist-types/design-system/Icon/index.d.ts +1 -0
  40. package/dist-types/design-system/Icon/utils.d.ts +1 -0
  41. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxControls.d.ts +0 -2
  42. package/dist-types/design-system/_shared_/Tabs/styles.d.ts +2 -3
  43. package/dist-types/design-system/index.d.ts +0 -1
  44. package/dist-types/design-system/utils/safex.d.ts +4 -2
  45. package/dist-types/theme/generalVariables.d.ts +0 -1
  46. package/dist-types/~patterns/Wizard/WizardModal.d.ts +1 -1
  47. package/package.json +8 -5
  48. package/setup.mjs +586 -0
  49. package/dist/WizardStepContentWrapper-Bq1wm0V7.js.map +0 -1
  50. package/dist/index-BRAVZg-S.js.map +0 -1
  51. package/dist-types/design-system/LegacyTooltip/LegacyTooltip.d.ts +0 -47
  52. package/dist-types/design-system/LegacyTooltip/index.d.ts +0 -1
@@ -16126,7 +16126,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
16126
16126
 
16127
16127
  --db-surface-selected: var(--db-color-table-background-selected-hover);
16128
16128
  --db-surface-selected-hover: initial; /* TODO */;
16129
- --db-surface-selected-active: initial; /* TODO */;
16129
+ --db-surface-selected-active: var(--db-color-table-background-selected-hover); /* no distinct active value */
16130
16130
 
16131
16131
  /* Surface alpha-blending modifiers */
16132
16132
  --db-surface-backdrop: initial; /* TODO */;
@@ -16152,7 +16152,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
16152
16152
  --db-accent-surface-strong: var(--db-color-action-primary-background-hover);
16153
16153
 
16154
16154
  --db-accent-surface-hover: var(--db-color-action-primary-background-hover);
16155
- --db-accent-surface-active: initial; /* TODO */
16155
+ --db-accent-surface-active: var(--db-color-action-primary-background-press); /* no distinct active value */
16156
16156
  --db-accent-surface-selected: var(--db-color-action-primary-background-press);
16157
16157
 
16158
16158
  /* In the current design, the text color for an accent surface does not change with hover, active, etc. */
@@ -16169,7 +16169,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
16169
16169
  --db-negative-surface-strong: var(--db-color-action-danger-primary-background-hover);
16170
16170
 
16171
16171
  --db-negative-surface-hover: var(--db-color-action-danger-primary-background-hover);
16172
- --db-negative-surface-active: initial; /* TODO */
16172
+ --db-negative-surface-active: var(--db-color-action-danger-primary-background-press); /* no distinct active value */
16173
16173
  --db-negative-surface-selected: var(--db-color-action-danger-primary-background-press);
16174
16174
 
16175
16175
  --db-negative-text: var(--db-color-text-validation-danger);
@@ -16210,6 +16210,11 @@ span.du-bois-dark-typography-ellipsis-single-line {
16210
16210
  --db-positive-border: initial; /* TODO */
16211
16211
  --db-positive-border-hover: initial; /* TODO */
16212
16212
  --db-positive-border-active: initial; /* TODO */
16213
+
16214
+ /* Branded (theme-invariant — same values as light) */
16215
+ --db-ai-gradient-start: #4299e0;
16216
+ --db-ai-gradient-mid: #ca42e0;
16217
+ --db-ai-gradient-end: #ff5f46;
16213
16218
  }
16214
16219
 
16215
16220
  :where(.du-bois-dark) {
@@ -16288,6 +16293,59 @@ span.du-bois-dark-typography-ellipsis-single-line {
16288
16293
  --db-shape-pill: 999px;
16289
16294
  }
16290
16295
 
16296
+ :where(.du-bois-dark) {
16297
+ /* Shape */
16298
+ /* Mirrors the ShapeTokens host-override var used by Card; falls back to the theme radius. */
16299
+ --db-card-border-radius: var(--info-container-border-radius, 8px);
16300
+
16301
+ /* Color */
16302
+ --db-card-surface: var(--db-surface-base);
16303
+ --db-card-text: var(--db-text-base);
16304
+ --db-card-border: var(--db-border-base);
16305
+ --db-card-border-hover: var(--db-border-strong);
16306
+ }
16307
+
16308
+ :where(.du-bois-dark) {
16309
+ /* Shape */
16310
+ /* Mirrors the ShapeTokens host-override var used by list items; falls back to the theme radius. */
16311
+ --db-list-item-border-radius: var(--list-item-border-radius, 4px);
16312
+
16313
+ /* Color */
16314
+ --db-list-surface: var(--db-surface-base);
16315
+ --db-list-text: var(--db-text-base);
16316
+ --db-list-header-text: var(--db-text-subtle);
16317
+ --db-list-separator: var(--db-border-subtle);
16318
+
16319
+ --db-list-item-surface-hover: var(--db-surface-hover);
16320
+ --db-list-item-surface-active: var(--db-surface-active);
16321
+ --db-list-item-surface-selected: var(--db-accent-surface-subtle);
16322
+ --db-list-item-surface-disabled: var(--db-surface-disabled);
16323
+
16324
+ --db-list-item-text-selected: var(--db-accent-text);
16325
+ --db-list-item-text-disabled: var(--db-text-disabled);
16326
+
16327
+ --db-list-item-danger-text: var(--db-negative-text);
16328
+ --db-list-item-danger-surface-hover: var(--db-negative-surface-subtle);
16329
+
16330
+ /* Density */
16331
+ --db-list-item-padding: var(--db-space-2);
16332
+ --db-list-item-height: var(--db-size-8);
16333
+ }
16334
+
16335
+ :where(.du-bois-dark) {
16336
+ /* Shape */
16337
+ /* Mirrors the ShapeTokens host-override var; falls back to the v1 value (borderRadiusSm). */
16338
+ --db-popup-border-radius: var(--popup-border-radius, 4px);
16339
+
16340
+ /* Color */
16341
+ --db-popup-surface: var(--db-surface-base);
16342
+ --db-popup-text: var(--db-text-base);
16343
+ --db-popup-border: var(--db-border-base);
16344
+
16345
+ /* Elevation */
16346
+ --db-popup-elevation: var(--db-elevation-med);
16347
+ }
16348
+
16291
16349
  :where(.du-bois-dark) {
16292
16350
  /* Shape */
16293
16351
  --db-selection-toggle-border-radius: 4px;
@@ -16299,15 +16357,15 @@ span.du-bois-dark-typography-ellipsis-single-line {
16299
16357
  --db-selection-toggle-border: var(--db-border-strong);
16300
16358
 
16301
16359
  --db-selection-toggle-surface-hover: var(--db-surface-hover);
16302
- --db-selection-toggle-surface-press: var(--db-surface-selected);
16360
+ --db-selection-toggle-surface-active: var(--db-surface-selected-active);
16303
16361
  --db-selection-toggle-surface-checked: var(--db-accent-surface);
16304
16362
  --db-selection-toggle-surface-checked-hover: var(--db-accent-surface-hover);
16305
- --db-selection-toggle-surface-checked-press: var(--db-accent-surface-selected);
16363
+ --db-selection-toggle-surface-checked-active: var(--db-accent-surface-active);
16306
16364
  --db-selection-toggle-surface-disabled: var(--db-surface-disabled);
16307
16365
  --db-selection-toggle-surface-checked-disabled: var(--db-surface-disabled);
16308
16366
 
16309
16367
  --db-selection-toggle-border-hover: var(--db-accent-surface-hover);
16310
- --db-selection-toggle-border-press: var(--db-accent-surface-selected);
16368
+ --db-selection-toggle-border-active: var(--db-accent-surface-active);
16311
16369
  --db-selection-toggle-border-disabled: var(--db-border-base);
16312
16370
 
16313
16371
  --db-selection-toggle-mark-disabled: var(--db-text-disabled);
@@ -16323,6 +16381,142 @@ span.du-bois-dark-typography-ellipsis-single-line {
16323
16381
  --db-selection-toggle-transition-duration: 120ms;
16324
16382
  }
16325
16383
 
16384
+ :where(.du-bois-dark) {
16385
+ /* Shape */
16386
+ --db-avatar-border-radius: var(--db-radius-sm);
16387
+
16388
+ /* Density */
16389
+ --db-avatar-group-gap: var(--db-space-1);
16390
+ --db-avatar-group-border-width: 1px;
16391
+
16392
+ /* Color */
16393
+ /* No v2 token holds the secondary icon glyph yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16394
+ --db-avatar-icon: var(--db-color-text-secondary);
16395
+ /* No v2 token holds the default avatar surface yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16396
+ --db-avatar-surface: var(--db-color-tag-background-default);
16397
+ /* No v2 token holds the group divider border yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16398
+ --db-avatar-group-border-color: var(--db-color-background-primary);
16399
+ }
16400
+
16401
+ :where(.du-bois-dark) {
16402
+ /* Color */
16403
+ /* No v2 token holds the initials/icon glyph on a colored avatar yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16404
+ --db-avatar-text: #e8ecf0;
16405
+ }
16406
+
16407
+
16408
+ /* Component-tier tokens for the native <Button>, grouped by area (density, shape, typography, color).
16409
+ * Colors alias the action-* system tokens; sizes alias the system density scale.
16410
+ *
16411
+ * Follows the mortar/action.css pattern: one semantic set (surface / border / text, each with
16412
+ * -hover / -active / -disabled) whose defaults are the secondary variant. The variant classes that
16413
+ * re-set these tokens per variant live in NativeButton.css; this file declares only tokens. */
16414
+
16415
+ /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
16416
+ * `.du-bois-dark` subtree (or a portal that re-applies the theme class) instead of freezing at the root values. */
16417
+ :where(.du-bois-dark) {
16418
+ /* ── Density ──────────────────────────────────────────────────────────── */
16419
+ --db-btn-height: var(--db-size-8);
16420
+ --db-btn-height-small: var(--db-size-6);
16421
+ --db-btn-icon-size: var(--db-size-4);
16422
+ --db-btn-border-width: 1px;
16423
+ --db-btn-padding-vertical: var(--db-space-1);
16424
+ --db-btn-padding-horizontal: var(--db-space-3);
16425
+ --db-btn-padding-horizontal-small: var(--db-space-2);
16426
+ /* Icon/force-icon horizontal padding: half the standard horizontal padding. */
16427
+ --db-btn-padding-horizontal-icon: calc(var(--db-space-3) / 2); /* 6px */
16428
+ --db-btn-gap: var(--db-space-1);
16429
+ --db-btn-end-icon-gap: var(--db-space-2);
16430
+ --db-btn-end-icon-gap-small: var(--db-space-1);
16431
+ /* Width of a content-less button while loading, so the standalone spinner has room. */
16432
+ --db-btn-loading-empty-width: var(--db-size-10);
16433
+
16434
+ /* ── Shape ────────────────────────────────────────────────────────────── */
16435
+ --db-btn-border-radius: var(--db-shape-control);
16436
+
16437
+ /* ── Typography ───────────────────────────────────────────────────────── */
16438
+ --db-btn-font-size: var(--db-font-size-base);
16439
+ --db-btn-icon-only-font-size: var(--db-font-size-lg); /* 15px */
16440
+ --db-btn-font-weight: var(--db-font-weight-normal);
16441
+ /* Line heights are hard-coded until the typography scale ships computed per-level line-height tokens. */
16442
+ --db-btn-line-height: 1.25rem; /* 20px */
16443
+ --db-btn-line-height-small: 1rem; /* 16px */
16444
+
16445
+ /* ── Color: semantic set (defaults = secondary variant) ───────────────── */
16446
+ --db-btn-surface: var(--db-color-action-default-background-default);
16447
+ --db-btn-surface-hover: var(--db-color-action-default-background-hover);
16448
+ --db-btn-surface-active: var(--db-color-action-default-background-press);
16449
+ --db-btn-surface-disabled: transparent;
16450
+ --db-btn-border: var(--db-color-action-default-border-default);
16451
+ --db-btn-border-hover: var(--db-color-action-default-border-hover);
16452
+ --db-btn-border-active: var(--db-color-action-default-border-press);
16453
+ --db-btn-border-disabled: var(--db-color-action-disabled-border);
16454
+ --db-btn-text: var(--db-color-action-default-text-default);
16455
+ --db-btn-text-hover: var(--db-color-action-default-text-hover);
16456
+ --db-btn-text-active: var(--db-color-action-default-text-press);
16457
+ --db-btn-text-disabled: var(--db-color-action-disabled-text);
16458
+
16459
+ /* ── Focus & icon ─────────────────────────────────────────────────────── */
16460
+ --db-btn-focus-ring: var(--db-color-action-default-border-focus);
16461
+ --db-btn-danger-focus-ring: var(--db-color-action-danger-primary-background-default);
16462
+ --db-btn-icon-glyph: var(--db-color-text-secondary);
16463
+ }
16464
+
16465
+ /* Native <Button> visual styles. Consumes the component-tier `--db-btn-*` tokens (see tokens.css);
16466
+ * the variant classes below re-set those tokens per variant and the rules that follow paint them.
16467
+ * Shipped via mortar.css. */
16468
+
16469
+ /* ── 0. Variant token re-sets ──────────────────────────────────────────────
16470
+ * Each variant class re-sets the semantic tokens declared in tokens.css; combined classes win by
16471
+ * specificity, which beats the `:where(:root)` (specificity 0) defaults regardless of file order. */
16472
+ /* Link is borderless and text-only, so its hover/press surface stays transparent. */
16473
+ /* Every danger button (icon included) disables to the filled treatment. */
16474
+ /* Danger, filled (primary): re-set only the surface; text/transparent border come from primary. */
16475
+ /* Danger, secondary/outlined. */
16476
+ /* Danger, tertiary/link: danger text everywhere, danger surface on hover/press; resting/disabled
16477
+ * surface stay the tertiary ghost (override the filled danger-disabled set above). */
16478
+ /* Icon-only renders as the ghost (tertiary) treatment regardless of variant; re-set the semantic set
16479
+ * so the icon-only rules paint from these component tokens. */
16480
+ /* Danger icon-only keeps the ghost resting surface (inherited above) but uses danger text and a
16481
+ * danger hover/press surface. */
16482
+
16483
+ /* ── 1. Base — paints the default (secondary) variant ────────────────────── */
16484
+
16485
+ /* ── 2. Padding ──────────────────────────────────────────────────────────── */
16486
+
16487
+ /* ── 3. Interactive states ───────────────────────────────────────────────── */
16488
+
16489
+ /* ── 4. Focus ────────────────────────────────────────────────────────────── */
16490
+
16491
+ /* ── 5. Small / block (full-width) / empty ────────────────────────────────── */
16492
+
16493
+ /* ── 6. Tertiary & link ──────────────────────────────────────────────────── */
16494
+ /* Re-declare the text color for a non-icon-only tertiary/link at two-class weight so a plain
16495
+ * call-site `color` override loses; an icon-only glyph stays at base weight so its override wins. */
16496
+ /* Keep the resting border at two-class weight (parity with the shielded border-color). */
16497
+
16498
+ /* ── 7. Danger ───────────────────────────────────────────────────────────── */
16499
+
16500
+ /* ── 8. Icon-only ────────────────────────────────────────────────────────── */
16501
+ /* `:where()` keeps this at (0,1,0) so a call-site `css` width override wins, as it does for `height`. */
16502
+ /* `:where()` on the exclusion holds this at (0,2,0): enough to tint an un-overridden icon-only link
16503
+ * over the base color, while still letting a consumer's own icon-color override win on source order. */
16504
+
16505
+ /* ── 9. Disabled — base rules paint the per-variant `*-disabled` tokens (see tokens.css) ──────── */
16506
+ /* Empty disabled buttons keep a transparent border (set elsewhere), so exclude them.
16507
+ * `:where()` on the exclusion holds this at (0,2,0): enough to beat the base border, while still
16508
+ * letting a consumer's own `[disabled]` border override win on source order. */
16509
+
16510
+ /* ── 10. Icon & content layout ───────────────────────────────────────────── */
16511
+ /* The leading icon renders unwrapped as the button's direct `.anticon` child (see NativeButton.tsx),
16512
+ * so `> .anticon` targets only a real icon glyph — a non-glyph `icon` (e.g. a Spinner) keeps its own
16513
+ * sizing — and out-specifies AntD's runtime-injected global `.anticon` rule. */
16514
+
16515
+ /* ── 11. Loading ─────────────────────────────────────────────────────────── */
16516
+
16517
+ /* ── 12. dangerouslySetForceIconStyles ───────────────────────────────────── */
16518
+
16519
+
16326
16520
  :where(.du-bois-dark) {
16327
16521
  /* Shape */
16328
16522
  --db-checkbox-border-radius: var(--db-selection-toggle-border-radius);
@@ -16331,15 +16525,15 @@ span.du-bois-dark-typography-ellipsis-single-line {
16331
16525
  /* Color */
16332
16526
  --db-checkbox-surface: var(--db-selection-toggle-surface);
16333
16527
  --db-checkbox-surface-hover: var(--db-color-action-default-background-hover);
16334
- --db-checkbox-surface-press: var(--db-color-action-default-background-press);
16528
+ --db-checkbox-surface-active: var(--db-color-action-default-background-press);
16335
16529
  --db-checkbox-surface-checked: var(--db-selection-toggle-surface-checked);
16336
16530
  --db-checkbox-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16337
- --db-checkbox-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
16531
+ --db-checkbox-surface-checked-active: var(--db-selection-toggle-surface-checked-active);
16338
16532
  --db-checkbox-surface-disabled: var(--db-selection-toggle-surface-disabled);
16339
16533
 
16340
16534
  --db-checkbox-border: var(--db-color-action-default-border-default);
16341
16535
  --db-checkbox-border-hover: var(--db-selection-toggle-border-hover);
16342
- --db-checkbox-border-press: var(--db-selection-toggle-border-press);
16536
+ --db-checkbox-border-active: var(--db-selection-toggle-border-active);
16343
16537
  --db-checkbox-focus-ring: var(--db-focus-ring-color);
16344
16538
  --db-checkbox-border-disabled: var(--db-color-action-disabled-border);
16345
16539
 
@@ -16436,7 +16630,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
16436
16630
  * vertical margin Hint/FormMessage carry. */
16437
16631
 
16438
16632
  /* Group spacing against sibling form text — 8px gap above the group when it
16439
- * follows a Hint, 8px gap above a FormMessage when it follows the group.
16633
+ * follows a Label or Hint, 8px gap above a FormMessage when it follows the group.
16440
16634
  * Doubled class on the group side beats FormMessage's `&&` for the same reason. */
16441
16635
 
16442
16636
  /* CheckboxGroup layout. Vertical delegates to the `.db-stack` primitive; the
@@ -16450,6 +16644,257 @@ span.du-bois-dark-typography-ellipsis-single-line {
16450
16644
 
16451
16645
  /* Vertical: .db-stack supplies flex-direction + gap; we only retarget the knob. */
16452
16646
 
16647
+
16648
+
16649
+ :where(.du-bois-dark) {
16650
+ /* Density */
16651
+ --db-drawer-padding-horizontal: var(--db-space-6);
16652
+ --db-drawer-padding-horizontal-small: var(--db-space-4);
16653
+ --db-drawer-content-padding-top: var(--db-space-4);
16654
+ --db-drawer-content-padding-top-small: var(--db-space-2);
16655
+ --db-drawer-footer-padding-top: var(--db-space-4);
16656
+ --db-drawer-footer-padding-bottom: var(--db-space-6);
16657
+ --db-drawer-footer-padding-bottom-small: var(--db-space-4);
16658
+ --db-drawer-title-margin-bottom: var(--db-space-2);
16659
+ --db-drawer-close-button-margin: var(--db-space-1);
16660
+
16661
+ /* Color */
16662
+ --db-drawer-surface: var(--db-surface-base);
16663
+ --db-drawer-text: var(--db-text-base);
16664
+ --db-drawer-border: var(--db-border-base);
16665
+ /* No v2 token holds the drawer scrim yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16666
+ --db-drawer-overlay: var(--db-color-overlay-overlay);
16667
+ }
16668
+
16669
+ :where(.du-bois-dark) {
16670
+ /* Elevation */
16671
+ /* No v2 token holds the dark drawer elevation yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16672
+ --db-drawer-shadow: 0px 8px 40px 0px rgba(0, 0, 0, 0.87);
16673
+ }
16674
+
16675
+
16676
+ :where(.du-bois-dark) {
16677
+ /* Color */
16678
+ --db-empty-text: var(--db-text-subtle);
16679
+ --db-empty-image-color: var(--db-text-disabled);
16680
+
16681
+ /* Density */
16682
+ --db-empty-image-size: calc(var(--db-size-8) * 2);
16683
+ --db-empty-image-spacing: var(--db-space-4);
16684
+ --db-empty-description-spacing: var(--db-space-4);
16685
+ --db-empty-max-width: 600px;
16686
+ }
16687
+
16688
+
16689
+
16690
+
16691
+
16692
+
16693
+
16694
+
16695
+ /* Component tokens for the native Icon. */
16696
+ :where(.du-bois-dark) {
16697
+ --db-icon-size: var(--db-font-size-xl);
16698
+ --db-icon-color-danger: var(--db-color-text-validation-danger);
16699
+ --db-icon-color-warning: var(--db-color-text-validation-warning);
16700
+ --db-icon-color-success: var(--db-color-text-validation-success);
16701
+ --db-icon-ai-gradient-start: var(--db-ai-gradient-start);
16702
+ --db-icon-ai-gradient-mid: var(--db-ai-gradient-mid);
16703
+ --db-icon-ai-gradient-end: var(--db-ai-gradient-end);
16704
+ }
16705
+
16706
+ /* Native Icon styles. Ships through mortar.css and reads only component-tier --db-icon-* tokens.
16707
+ * Icon size is driven solely by the `--db-icon-size` design token: to resize an icon, set that
16708
+ * token in scope (default 16px in tokens.css) rather than overriding `font-size`. */
16709
+
16710
+ /* TODO: remove once clickable-icon callsites are gone. Kept for backwards compatibility with the
16711
+ * AntD icon, which made icons clickable via onClick; some callsites still rely on it. Actual icons
16712
+ * should never carry a tabindex — a clickable icon belongs inside a button. */
16713
+
16714
+ /* Semantic colors set `color` only; the SVG glyph paints its `fill`/`stroke` from `currentColor`,
16715
+ * so setting the text color recolors the icon. */
16716
+
16717
+ @keyframes db-icon-loading-circle {
16718
+ 100% {
16719
+ transform: rotate(360deg);
16720
+ }
16721
+ }
16722
+
16723
+
16724
+ :where(.du-bois-dark) {
16725
+ /* Shape */
16726
+ --db-listbox-border-radius: var(--db-list-item-border-radius);
16727
+ --db-listbox-focus-ring-width: var(--db-focus-ring-width);
16728
+
16729
+ /* Color */
16730
+ --db-listbox-surface: var(--db-list-surface);
16731
+ --db-listbox-empty-text: var(--db-text-subtle);
16732
+ --db-listbox-focus-ring-color: var(--db-focus-ring-color);
16733
+
16734
+ /* Density */
16735
+ --db-listbox-spacing: var(--db-space-2);
16736
+ --db-listbox-empty-spacing-horizontal: var(--db-space-3);
16737
+ --db-listbox-empty-spacing-vertical: calc(var(--db-space-2) * 0.75);
16738
+ }
16739
+
16740
+
16741
+ :where(.du-bois-dark) {
16742
+ /* Shape */
16743
+ /* Must not scale with density; no non-scaling system token holds it. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16744
+ --db-navigation-menu-indicator-thickness: 4px;
16745
+ /* No system token holds this control-specific inset. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16746
+ --db-navigation-menu-focus-ring-offset: -1px;
16747
+
16748
+ /* Color */
16749
+ --db-navigation-menu-indicator: var(--db-accent-surface);
16750
+ --db-navigation-menu-focus-ring: var(--db-focus-ring-color);
16751
+ --db-navigation-menu-text: var(--db-text-subtle);
16752
+ --db-navigation-menu-text-selected: var(--db-text-base);
16753
+ /* No v2 semantic for default-action link text yet; bridges on the v1 --db-color-* token. */
16754
+ --db-navigation-menu-text-hover: var(--db-color-action-default-text-hover);
16755
+ --db-navigation-menu-text-active: var(--db-color-action-default-text-press);
16756
+
16757
+ /* Density */
16758
+ --db-navigation-menu-item-height: var(--db-size-8);
16759
+ --db-navigation-menu-item-min-width: var(--db-size-6);
16760
+ --db-navigation-menu-link-padding-top: var(--db-space-1);
16761
+ --db-navigation-menu-link-padding-bottom: var(--db-space-2);
16762
+ --db-navigation-menu-focus-ring-width: var(--db-focus-ring-width);
16763
+ }
16764
+
16765
+ :where(.du-bois-dark) {
16766
+ /* Shape */
16767
+ --db-notification-border-radius: var(--db-popup-border-radius);
16768
+
16769
+ /* Density */
16770
+ --db-notification-padding: var(--db-space-3);
16771
+ --db-notification-column-gap: var(--db-space-1);
16772
+ --db-notification-description-gap: var(--db-space-1);
16773
+ --db-notification-close-offset: calc(var(--db-space-1) * 1.5);
16774
+ --db-notification-close-size: var(--db-size-5);
16775
+ --db-notification-viewport-padding: var(--db-space-3);
16776
+ --db-notification-viewport-gap: var(--db-space-3);
16777
+ --db-notification-viewport-margin: var(--db-space-6);
16778
+ --db-notification-viewport-width: 440px;
16779
+
16780
+ /* Color */
16781
+ --db-notification-surface: var(--db-popup-surface);
16782
+ --db-notification-border: var(--db-popup-border);
16783
+ --db-notification-text: var(--db-popup-text);
16784
+ --db-notification-icon: var(--db-text-subtle);
16785
+ --db-notification-icon-success: var(--db-positive-text);
16786
+ --db-notification-icon-warning: var(--db-caution-text);
16787
+ --db-notification-icon-error: var(--db-negative-text);
16788
+ }
16789
+
16790
+ :where(.du-bois-dark) {
16791
+ /* Elevation */
16792
+ /* No v1/v2 system token holds this dark shadow; --db-elevation-med is theme-invariant (light). TODO(FEINF-6505): adopt a v2 system token when one is added. */
16793
+ --db-notification-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
16794
+ }
16795
+
16796
+ :where(.du-bois-dark) {
16797
+ /* Color */
16798
+ /* No v2 token holds tertiary action-text states yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16799
+ --db-overflow-trigger-text: var(--db-color-action-tertiary-text-default);
16800
+ --db-overflow-trigger-text-hover: var(--db-color-action-tertiary-text-hover);
16801
+ --db-overflow-trigger-text-press: var(--db-color-action-tertiary-text-press);
16802
+
16803
+ /* Density */
16804
+ --db-overflow-spacing: var(--db-space-2);
16805
+ --db-overflow-menu-spacing: var(--db-space-1);
16806
+ }
16807
+
16808
+
16809
+
16810
+ /* Popover is a neutral-card member of the popup family: surface, text, border, and radius come
16811
+ * from --db-popup-*. Link, focus, and spacing are popover-specific and reference system tokens
16812
+ * directly. The popup elevation scale is light-only, so the dark shadow is re-declared below. */
16813
+
16814
+ :where(.du-bois-dark) {
16815
+ /* Shape */
16816
+ --db-popover-border-radius: var(--db-popup-border-radius);
16817
+
16818
+ /* Color */
16819
+ --db-popover-surface: var(--db-popup-surface);
16820
+ --db-popover-text: var(--db-popup-text);
16821
+ --db-popover-border: var(--db-popup-border);
16822
+ /* No v2 token holds the tertiary link text yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16823
+ --db-popover-link-text: var(--db-color-action-tertiary-text-default);
16824
+ --db-popover-link-text-hover: var(--db-color-action-tertiary-text-hover);
16825
+ --db-popover-focus-ring: var(--db-focus-ring-color);
16826
+
16827
+ /* Density */
16828
+ --db-popover-spacing: var(--db-space-2);
16829
+ --db-popover-focus-ring-width: var(--db-focus-ring-width);
16830
+
16831
+ /* Elevation */
16832
+ --db-popover-shadow: var(--db-popup-elevation);
16833
+ }
16834
+
16835
+ :where(.du-bois-dark) {
16836
+ /* No v2 token holds the dark-scope popover elevation shadow yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16837
+ --db-popover-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
16838
+ }
16839
+
16840
+ :where(.du-bois-dark) {
16841
+ /* Shape */
16842
+ --db-preview-card-border-radius: var(--db-card-border-radius);
16843
+ --db-preview-card-image-border-radius: var(--info-container-border-radius, 4px);
16844
+ --db-preview-card-border-width: 1px;
16845
+
16846
+ /* Density */
16847
+ --db-preview-card-padding: var(--db-space-4);
16848
+ --db-preview-card-padding-large: var(--db-space-6);
16849
+ --db-preview-card-gap: var(--db-space-2);
16850
+ --db-preview-card-gap-large: var(--db-space-4);
16851
+ --db-preview-card-action-spacing: var(--db-space-4);
16852
+
16853
+ /* Color */
16854
+ --db-preview-card-text: var(--db-text-subtle);
16855
+ --db-preview-card-title-text: var(--db-card-text);
16856
+ --db-preview-card-border: var(--db-card-border);
16857
+ /* No v2 token holds the active/focus border yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16858
+ --db-preview-card-border-hover: var(--db-color-action-default-border-hover);
16859
+ /* No v2 token holds the focus outline ring yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16860
+ --db-preview-card-border-focus: var(--db-color-action-default-border-focus);
16861
+ /* No v2 token holds the active surface tint yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16862
+ --db-preview-card-surface-active: var(--db-color-action-tertiary-background-press);
16863
+ --db-preview-card-surface-disabled: var(--db-surface-disabled);
16864
+ /* No v2 token holds the disabled border yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16865
+ --db-preview-card-border-disabled: var(--db-color-action-disabled-border);
16866
+ --db-preview-card-text-disabled: var(--db-text-disabled);
16867
+
16868
+ /* Typography */
16869
+ --db-preview-card-title-font-weight: var(--db-font-weight-semibold);
16870
+ }
16871
+
16872
+ :where(.du-bois-dark) {
16873
+ /* Elevation */
16874
+
16875
+ /* No v2 elevation token holds the dark shadows yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16876
+ --db-preview-card-shadow: 0px 2px 3px -1px rgba(0, 0, 0, 0.45), 0px 1px 0px 0px rgba(0, 0, 0, 0.26);
16877
+ --db-preview-card-shadow-hover: 0px 3px 6px 0px rgba(0, 0, 0, 0.45);
16878
+ }
16879
+
16880
+ /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
16881
+ * `.du-bois-dark` subtree instead of freezing at the light values. */
16882
+ :where(.du-bois-dark) {
16883
+ /* Shape */
16884
+ --db-progress-border-radius: var(--db-shape-pill);
16885
+
16886
+ /* Color */
16887
+ --db-progress-track: var(--db-color-progress-track);
16888
+ --db-progress-fill: var(--db-color-progress-fill);
16889
+
16890
+ /* Density */
16891
+ --db-progress-size: var(--db-size-2);
16892
+
16893
+ /* Motion */
16894
+ /* No v2 motion token holds this duration. TODO(FEINF-6505): adopt a v2 motion token when one is added. */
16895
+ --db-progress-transition-duration: 300ms;
16896
+ }
16897
+
16453
16898
  :where(.du-bois-dark) {
16454
16899
  /* Shape */
16455
16900
  --db-radio-border-radius: var(--db-radius-full);
@@ -16458,19 +16903,19 @@ span.du-bois-dark-typography-ellipsis-single-line {
16458
16903
  /* Color */
16459
16904
  --db-radio-surface: var(--db-selection-toggle-surface);
16460
16905
  --db-radio-surface-hover: var(--db-color-action-default-background-hover);
16461
- --db-radio-surface-press: var(--db-color-action-default-background-press);
16906
+ --db-radio-surface-active: var(--db-color-action-default-background-press);
16462
16907
  --db-radio-surface-checked: var(--db-selection-toggle-surface-checked);
16463
16908
  --db-radio-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16464
- --db-radio-surface-checked-press: var(--db-color-action-default-background-press);
16909
+ --db-radio-surface-checked-active: var(--db-color-action-default-background-press);
16465
16910
  --db-radio-surface-disabled: var(--db-selection-toggle-surface-disabled);
16466
16911
 
16467
16912
  --db-radio-border: var(--db-color-action-default-border-default);
16468
16913
  --db-radio-border-hover: var(--db-selection-toggle-border-hover);
16469
- --db-radio-border-press: var(--db-selection-toggle-border-press);
16914
+ --db-radio-border-active: var(--db-selection-toggle-border-active);
16470
16915
  --db-radio-border-focus: var(--db-focus-ring-color);
16471
16916
  --db-radio-border-disabled: var(--db-color-action-disabled-border);
16472
- --db-radio-border-checked-hover: var(--db-selection-toggle-border-press);
16473
- --db-radio-border-checked-press: var(--db-color-action-default-border-press);
16917
+ --db-radio-border-checked-hover: var(--db-selection-toggle-border-active);
16918
+ --db-radio-border-checked-active: var(--db-color-action-default-border-press);
16474
16919
  --db-radio-border-unchecked-focus: var(--db-color-action-primary-background-default);
16475
16920
  --db-radio-outline-checked-focus: var(--db-color-action-primary-background-default);
16476
16921
 
@@ -16618,6 +17063,76 @@ span.du-bois-dark-typography-ellipsis-single-line {
16618
17063
  /* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
16619
17064
  * the whole group is separated by sm. */
16620
17065
 
17066
+
17067
+
17068
+
17069
+
17070
+ :where(.du-bois-dark) {
17071
+ /* Shape */
17072
+ --db-slider-border-radius: var(--db-shape-pill);
17073
+
17074
+ /* Color */
17075
+ /* No v2 token holds the track + disabled-range surface yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17076
+ --db-slider-track-surface: #e8ecf0;
17077
+ --db-slider-range-surface-disabled: #e8ecf0;
17078
+ /* No v2 token holds the range fill yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17079
+ --db-slider-range-surface: #2272b4;
17080
+
17081
+ --db-slider-thumb-surface: var(--db-accent-surface);
17082
+ --db-slider-thumb-surface-hover: var(--db-accent-surface-hover);
17083
+ --db-slider-thumb-surface-press: var(--db-accent-surface-active);
17084
+ /* No v2 token holds the disabled thumb yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17085
+ --db-slider-thumb-surface-disabled: #d1d9e1;
17086
+
17087
+ /* Density */
17088
+ --db-slider-size: var(--db-size-5); /* 20px */
17089
+ --db-slider-thumb-size: var(--db-size-5); /* 20px */
17090
+ --db-slider-track-thickness: calc(var(--db-size-1) * 0.75); /* 3px */
17091
+ }
17092
+
17093
+ :where(.du-bois-dark) {
17094
+ /* Shape */
17095
+ /* TODO(FEINF-6505): adopt --db-shape-container-* once a 4px container radius exists; kept on --db-radius-sm to preserve 4px. */
17096
+ --db-snackbar-border-radius: var(--db-radius-sm);
17097
+
17098
+ /* Density */
17099
+ --db-snackbar-spacing-vertical: var(--db-space-3);
17100
+ --db-snackbar-spacing-horizontal: var(--db-space-4);
17101
+ --db-snackbar-close-button-spacing: var(--db-space-2);
17102
+
17103
+ /* Color */
17104
+ /* No v1/v2 system token holds this theme-invariant white. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17105
+ --db-snackbar-text: #ffffff;
17106
+ /* No v1/v2 system token holds these theme-invariant close-icon colors. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17107
+ --db-snackbar-close-icon: #e8ecf0;
17108
+ --db-snackbar-close-icon-hover: #8acaff;
17109
+ --db-snackbar-close-icon-active: #bae1fc;
17110
+ }
17111
+
17112
+ :where(.du-bois-dark) {
17113
+ /* Color */
17114
+ /* No v1/v2 system token holds this light/dark surface pair. TODO(FEINF-6505): adopt a v2 system token when one is added. */
17115
+ --db-snackbar-surface: #445461;
17116
+
17117
+ /* Elevation */
17118
+ /* No v1/v2 system token holds this dark shadow; --db-elevation-med is theme-invariant (light). TODO(FEINF-6505): adopt a v2 system token when one is added. */
17119
+ --db-snackbar-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
17120
+ }
17121
+
17122
+ /* Spacer's height is a spacing step. The size prop (xs/sm/mid/md/lg) selects one component token,
17123
+ * each aliasing the system space scale — theme-invariant, so a single block (no light/dark split). */
17124
+
17125
+ :where(.du-bois-dark) {
17126
+ /* Density */
17127
+ --db-spacer-size-xs: var(--db-space-1); /* 4px */
17128
+ --db-spacer-size-sm: var(--db-space-2); /* 8px */
17129
+ --db-spacer-size-mid: var(--db-space-3); /* 12px */
17130
+ --db-spacer-size-md: var(--db-space-4); /* 16px */
17131
+ --db-spacer-size-lg: var(--db-space-6); /* 24px */
17132
+ }
17133
+
17134
+
17135
+
16621
17136
  :where(.du-bois-dark) {
16622
17137
  /* Shape */
16623
17138
  --db-switch-border-radius: var(--db-radius-full);
@@ -16626,20 +17141,20 @@ span.du-bois-dark-typography-ellipsis-single-line {
16626
17141
  /* Color */
16627
17142
  --db-switch-surface: var(--db-selection-toggle-surface);
16628
17143
  --db-switch-surface-hover: var(--db-color-action-default-background-hover);
16629
- --db-switch-surface-press: var(--db-color-action-default-background-press);
17144
+ --db-switch-surface-active: var(--db-color-action-default-background-press);
16630
17145
  --db-switch-surface-checked: var(--db-selection-toggle-surface-checked);
16631
17146
  --db-switch-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16632
- --db-switch-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
17147
+ --db-switch-surface-checked-active: var(--db-selection-toggle-surface-checked-active);
16633
17148
  --db-switch-surface-disabled: var(--db-selection-toggle-surface-disabled);
16634
17149
  --db-switch-surface-checked-disabled: var(--db-color-action-disabled-text);
16635
17150
 
16636
17151
  --db-switch-border: var(--db-color-action-default-border-default);
16637
17152
  --db-switch-border-hover: var(--db-selection-toggle-border-hover);
16638
- --db-switch-border-press: var(--db-selection-toggle-border-press);
17153
+ --db-switch-border-active: var(--db-selection-toggle-border-active);
16639
17154
  --db-switch-border-disabled: var(--db-color-action-disabled-border);
16640
17155
  --db-switch-border-checked: var(--db-selection-toggle-surface-checked);
16641
17156
  --db-switch-border-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16642
- --db-switch-border-checked-press: var(--db-selection-toggle-surface-checked-press);
17157
+ --db-switch-border-checked-active: var(--db-selection-toggle-surface-checked-active);
16643
17158
  --db-switch-border-focus: var(--db-selection-toggle-surface-checked);
16644
17159
 
16645
17160
  --db-switch-thumb: var(--db-selection-toggle-surface);
@@ -16657,7 +17172,12 @@ span.du-bois-dark-typography-ellipsis-single-line {
16657
17172
  --db-switch-transition-duration: var(--db-selection-toggle-transition-duration);
16658
17173
  }
16659
17174
 
16660
- /* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled. */
17175
+ /* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled.
17176
+ * Scoped via the `.db-switch-input` class, never a bare `input`: `.db-switch .db-switch-input` is
17177
+ * specificity (0,2,0), which out-ranks a host app's `input[type='checkbox'] { width: auto }` reset
17178
+ * (e.g. Bootstrap, loaded in webapp). A bare `.db-switch input` (0,1,1) merely ties that reset and, losing
17179
+ * on load order, has its `inline-size` overridden to `auto` — collapsing the track to zero width and
17180
+ * leaving only the floating thumb. Mirrors NativeCheckbox's `.db-checkbox-input`. */
16661
17181
 
16662
17182
  /* The thumb. A pseudo-element keeps the input the switch's only element, so nothing can overlay it
16663
17183
  * and intercept clicks. Offset left by the border width to sit flush with the track's outer edge. */
@@ -16680,168 +17200,79 @@ span.du-bois-dark-typography-ellipsis-single-line {
16680
17200
  * so Chromium can hash-reject it instead of attempting the match against every element on every
16681
17201
  * recalc (the leading/middle :is() groups aren't the key selector, so they're left as-is). */
16682
17202
 
16683
- /* Component-tier tokens for the native <Button>, grouped by area (density, shape, typography, color).
16684
- * Colors alias the action-* system tokens; sizes alias the system density scale.
16685
- *
16686
- * Follows the mortar/action.css pattern: one semantic set (surface / border / text, each with
16687
- * -hover / -press / -disabled) whose defaults are the secondary variant. The variant classes that
16688
- * re-set these tokens per variant live in NativeButton.css; this file declares only tokens. */
16689
-
16690
- /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
16691
- * `.du-bois-dark` subtree (or a portal that re-applies the theme class) instead of freezing at the root values. */
17203
+ /* Component tokens for Tabs (no family). Re-declared under the theme classes, not only :root, so the
17204
+ * var() chain re-resolves inside a .du-bois-dark subtree instead of freezing at the light value. */
16692
17205
  :where(.du-bois-dark) {
16693
17206
  /* ── Density ──────────────────────────────────────────────────────────── */
16694
- --db-btn-height: var(--db-size-8);
16695
- --db-btn-height-small: var(--db-size-6);
16696
- --db-btn-icon-size: var(--db-size-4);
16697
- --db-btn-border-width: 1px;
16698
- --db-btn-padding-vertical: var(--db-space-1);
16699
- --db-btn-padding-horizontal: var(--db-space-3);
16700
- --db-btn-padding-horizontal-small: var(--db-space-2);
16701
- /* Icon/force-icon horizontal padding: half the standard horizontal padding. */
16702
- --db-btn-padding-horizontal-icon: calc(var(--db-space-3) / 2); /* 6px */
16703
- --db-btn-gap: var(--db-space-1);
16704
- --db-btn-end-icon-gap: var(--db-space-2);
16705
- --db-btn-end-icon-gap-small: var(--db-space-1);
16706
- /* Width of a content-less button while loading, so the standalone spinner has room. */
16707
- --db-btn-loading-empty-width: var(--db-size-10);
17207
+ --db-tabs-height: var(--db-size-8);
17208
+ --db-tabs-trigger-min-width: var(--db-size-6);
17209
+ --db-tabs-trigger-min-width-closable: var(--db-size-10);
17210
+ --db-tabs-list-margin-bottom: var(--db-space-4);
17211
+ --db-tabs-trigger-gap: var(--db-space-4);
17212
+ --db-tabs-trigger-padding-top: var(--db-space-1);
17213
+ --db-tabs-trigger-padding-bottom: var(--db-space-2);
17214
+ --db-tabs-close-icon-gap: var(--db-space-1);
17215
+ --db-tabs-add-button-margin-top: var(--db-space-0-5);
17216
+ /* No 1.5-unit space step exists; synthesize 6px from the nearest. TODO: use a direct step if one lands. */
17217
+ --db-tabs-add-button-margin-bottom: calc(var(--db-space-1) * 1.5);
16708
17218
 
16709
17219
  /* ── Shape ────────────────────────────────────────────────────────────── */
16710
- --db-btn-border-radius: var(--db-shape-control);
17220
+ --db-tabs-scrollbar-radius: var(--db-shape-control);
17221
+ --db-tabs-focus-ring-width: var(--db-focus-ring-width);
16711
17222
 
16712
17223
  /* ── Typography ───────────────────────────────────────────────────────── */
16713
- --db-btn-font-size: var(--db-font-size-base);
16714
- --db-btn-icon-only-font-size: var(--db-font-size-lg); /* 15px */
16715
- --db-btn-font-weight: var(--db-font-weight-normal);
16716
- /* Line heights are hard-coded until the typography scale ships computed per-level line-height tokens. */
16717
- --db-btn-line-height: 1.25rem; /* 20px */
16718
- --db-btn-line-height-small: 1rem; /* 16px */
16719
-
16720
- /* ── Color: semantic set (defaults = secondary variant) ───────────────── */
16721
- --db-btn-surface: var(--db-color-action-default-background-default);
16722
- --db-btn-surface-hover: var(--db-color-action-default-background-hover);
16723
- --db-btn-surface-press: var(--db-color-action-default-background-press);
16724
- --db-btn-surface-disabled: transparent;
16725
- --db-btn-border: var(--db-color-action-default-border-default);
16726
- --db-btn-border-hover: var(--db-color-action-default-border-hover);
16727
- --db-btn-border-press: var(--db-color-action-default-border-press);
16728
- --db-btn-border-disabled: var(--db-color-action-disabled-border);
16729
- --db-btn-text: var(--db-color-action-default-text-default);
16730
- --db-btn-text-hover: var(--db-color-action-default-text-hover);
16731
- --db-btn-text-press: var(--db-color-action-default-text-press);
16732
- --db-btn-text-disabled: var(--db-color-action-disabled-text);
16733
-
16734
- /* ── Focus & icon ─────────────────────────────────────────────────────── */
16735
- --db-btn-focus-ring: var(--db-color-action-default-border-focus);
16736
- --db-btn-danger-focus-ring: var(--db-color-action-danger-primary-background-default);
16737
- --db-btn-icon-glyph: var(--db-color-text-secondary);
17224
+ --db-tabs-font-size: var(--db-font-size-base);
17225
+ --db-tabs-font-weight: var(--db-font-weight-semibold);
17226
+ /* No v2 token holds the tab line-height yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17227
+ --db-tabs-line-height: 1.25rem;
17228
+
17229
+ /* ── Color ────────────────────────────────────────────────────────────── */
17230
+ /* No v2 token holds the tab text / hover / press / active / disabled colors yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17231
+ --db-tabs-text: var(--db-color-text-secondary);
17232
+ --db-tabs-text-hover: var(--db-color-action-default-text-hover);
17233
+ --db-tabs-text-press: var(--db-color-action-default-text-press);
17234
+ --db-tabs-text-active: var(--db-color-text-primary);
17235
+ --db-tabs-text-disabled: var(--db-color-action-disabled-text);
17236
+ /* No v2 token holds the tab panel content text color yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17237
+ --db-tabs-content-text: var(--db-color-text-primary);
17238
+ /* No v2 token holds the active-tab underline yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17239
+ --db-tabs-indicator: var(--db-color-action-primary-background-default);
17240
+ /* No v2 token holds the list divider yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17241
+ --db-tabs-border: var(--db-color-action-default-border-default);
17242
+ /* No v2 token holds the focus ring color yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17243
+ --db-tabs-focus-ring: var(--db-color-action-default-border-focus);
17244
+ }
17245
+
17246
+ /* No v2 token holds the scrollbar thumb yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17247
+ :where(.du-bois-dark) {
17248
+ --db-tabs-scrollbar-thumb: rgba(255, 255, 255, 0.2);
17249
+ --db-tabs-scrollbar-thumb-hover: rgba(255, 255, 255, 0.3);
16738
17250
  }
16739
17251
 
16740
- /* Native <Button> visual styles. Consumes the component-tier `--db-btn-*` tokens (see tokens.css);
16741
- * the variant classes below re-set those tokens per variant and the rules that follow paint them.
16742
- * Shipped via mortar.css. */
16743
-
16744
- /* ── 0. Variant token re-sets ──────────────────────────────────────────────
16745
- * Each variant class re-sets the semantic tokens declared in tokens.css; combined classes win by
16746
- * specificity, which beats the `:where(:root)` (specificity 0) defaults regardless of file order. */
16747
- /* Link is borderless and text-only, so its hover/press surface stays transparent. */
16748
- /* Every danger button (icon included) disables to the filled treatment. */
16749
- /* Danger, filled (primary): re-set only the surface; text/transparent border come from primary. */
16750
- /* Danger, secondary/outlined. */
16751
- /* Danger, tertiary/link: danger text everywhere, danger surface on hover/press; resting/disabled
16752
- * surface stay the tertiary ghost (override the filled danger-disabled set above). */
16753
- /* Icon-only renders as the ghost (tertiary) treatment regardless of variant; re-set the semantic set
16754
- * so the icon-only rules paint from these component tokens. */
16755
- /* Danger icon-only keeps the ghost resting surface (inherited above) but uses danger text and a
16756
- * danger hover/press surface. */
16757
-
16758
- /* ── 1. Base — paints the default (secondary) variant ────────────────────── */
16759
-
16760
- /* ── 2. Padding ──────────────────────────────────────────────────────────── */
16761
-
16762
- /* ── 3. Interactive states ───────────────────────────────────────────────── */
16763
-
16764
- /* ── 4. Focus ────────────────────────────────────────────────────────────── */
16765
-
16766
- /* ── 5. Small / full-width / empty ────────────────────────────────────────── */
16767
-
16768
- /* ── 6. Tertiary & link ──────────────────────────────────────────────────── */
16769
- /* Re-declare the text color for a non-icon-only tertiary/link at two-class weight so a plain
16770
- * call-site `color` override loses; an icon-only glyph stays at base weight so its override wins. */
16771
- /* Keep the resting border at two-class weight (parity with the shielded border-color). */
16772
-
16773
- /* ── 7. Danger ───────────────────────────────────────────────────────────── */
16774
-
16775
- /* ── 8. Icon-only ────────────────────────────────────────────────────────── */
16776
- /* `:where()` keeps this at (0,1,0) so a call-site `css` width override wins, as it does for `height`. */
16777
- /* `:where()` on the exclusion holds this at (0,2,0): enough to tint an un-overridden icon-only link
16778
- * over the base color, while still letting a consumer's own icon-color override win on source order. */
16779
17252
 
16780
- /* ── 9. Disabled — base rules paint the per-variant `*-disabled` tokens (see tokens.css) ──────── */
16781
- /* Empty and loading disabled buttons keep a transparent border (set elsewhere), so exclude them.
16782
- * `:where()` on the exclusion holds this at (0,2,0): enough to beat the base border, while still
16783
- * letting a consumer's own `[disabled]` border override win on source order. */
16784
-
16785
- /* ── 10. Icon & content layout ───────────────────────────────────────────── */
16786
- /* The leading icon renders unwrapped as the button's direct `.anticon` child (see NativeButton.tsx),
16787
- * so `> .anticon` targets only a real icon glyph — a non-glyph `icon` (e.g. a Spinner) keeps its own
16788
- * sizing — and out-specifies AntD's runtime-injected global `.anticon` rule. */
16789
-
16790
- /* ── 11. Loading ─────────────────────────────────────────────────────────── */
16791
-
16792
- /* ── 12. dangerouslySetForceIconStyles ───────────────────────────────────── */
16793
17253
 
16794
17254
  :where(.du-bois-dark) {
16795
17255
  /* Shape */
16796
- /* Must not scale with density; no non-scaling system token holds it. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16797
- --db-navigation-menu-indicator-thickness: 4px;
16798
- /* No system token holds this control-specific inset. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16799
- --db-navigation-menu-focus-ring-offset: -1px;
17256
+ --db-toolbar-border-radius: var(--db-shape-control);
16800
17257
 
16801
17258
  /* Color */
16802
- --db-navigation-menu-indicator: var(--db-accent-surface);
16803
- --db-navigation-menu-focus-ring: var(--db-focus-ring-color);
16804
- --db-navigation-menu-text: var(--db-text-subtle);
16805
- --db-navigation-menu-text-active: var(--db-text-base);
16806
- /* No v2 semantic for default-action link text yet; bridges on the v1 --db-color-* token. */
16807
- --db-navigation-menu-text-hover: var(--db-color-action-default-text-hover);
16808
- --db-navigation-menu-text-press: var(--db-color-action-default-text-press);
17259
+ --db-toolbar-surface: var(--db-surface-subtle);
17260
+ --db-toolbar-border: var(--db-border-base);
17261
+ --db-toolbar-separator-surface: var(--db-border-base);
17262
+ --db-toolbar-toggle-item-text: var(--db-text-base);
17263
+ /* No v2 token holds the toggle hover / press text yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17264
+ --db-toolbar-toggle-item-text-hover: var(--db-color-action-default-text-hover);
17265
+ --db-toolbar-toggle-item-text-press: var(--db-color-action-default-text-press);
17266
+ --db-toolbar-shadow: var(--db-elevation-med);
16809
17267
 
16810
17268
  /* Density */
16811
- --db-navigation-menu-item-height: var(--db-size-8);
16812
- --db-navigation-menu-item-min-width: var(--db-size-6);
16813
- --db-navigation-menu-link-padding-top: var(--db-space-1);
16814
- --db-navigation-menu-link-padding-bottom: var(--db-space-2);
16815
- --db-navigation-menu-focus-ring-width: var(--db-focus-ring-width);
17269
+ --db-toolbar-gap: var(--db-space-4);
17270
+ --db-toolbar-spacing: var(--db-space-2);
16816
17271
  }
16817
17272
 
16818
17273
  :where(.du-bois-dark) {
16819
- /* Shape */
16820
- /* TODO(FEINF-6505): adopt --db-shape-container-* once a 4px container radius exists; kept on --db-radius-sm to preserve 4px. */
16821
- --db-snackbar-border-radius: var(--db-radius-sm);
16822
-
16823
- /* Density */
16824
- --db-snackbar-spacing-vertical: var(--db-space-3);
16825
- --db-snackbar-spacing-horizontal: var(--db-space-4);
16826
- --db-snackbar-close-button-spacing: var(--db-space-2);
16827
-
16828
- /* Color */
16829
- /* No v1/v2 system token holds this theme-invariant white. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16830
- --db-snackbar-text: #ffffff;
16831
- /* No v1/v2 system token holds these theme-invariant close-icon colors. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16832
- --db-snackbar-close-icon: #e8ecf0;
16833
- --db-snackbar-close-icon-hover: #8acaff;
16834
- --db-snackbar-close-icon-press: #bae1fc;
16835
- }
16836
-
16837
- :where(.du-bois-dark) {
16838
- /* Color */
16839
- /* No v1/v2 system token holds this light/dark surface pair. TODO(FEINF-6505): adopt a v2 system token when one is added. */
16840
- --db-snackbar-surface: #445461;
16841
-
16842
- /* Elevation */
16843
- /* No v1/v2 system token holds this dark shadow; --db-elevation-med is theme-invariant (light). TODO(FEINF-6505): adopt a v2 system token when one is added. */
16844
- --db-snackbar-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
17274
+ /* No v2 token holds the dark-mode elevation shadow yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
17275
+ --db-toolbar-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
16845
17276
  }
16846
17277
 
16847
17278
  /* Tooltip renders an inverted surface (dark chip in light mode, light chip in dark mode), so it does
@@ -16868,7 +17299,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
16868
17299
  /* Darker v1 blue primitives than light mode — the chip is light here, so links need contrast. */
16869
17300
  --db-tooltip-link-text: #2272b4; /* blue600 */
16870
17301
  --db-tooltip-link-text-hover: #0e538b; /* blue700 */
16871
- --db-tooltip-link-text-press: #04355d; /* blue800 */
17302
+ --db-tooltip-link-text-active: #04355d; /* blue800 */
16872
17303
 
16873
17304
  /* Elevation */
16874
17305
  /* v2 elevation tokens are theme-invariant, so --db-elevation-med would keep the light shadow here.
@@ -16876,49 +17307,23 @@ span.du-bois-dark-typography-ellipsis-single-line {
16876
17307
  --db-tooltip-shadow: 0px 2px 16px 0px rgba(0, 0, 0, 0.61);
16877
17308
  }
16878
17309
 
16879
- /* Declared under the theme classes too (not just :root) so the var() chain re-resolves inside a
16880
- * `.du-bois-dark` subtree instead of freezing at the light values. */
16881
- :where(.du-bois-dark) {
16882
- /* Shape */
16883
- --db-progress-border-radius: var(--db-shape-pill);
16884
-
16885
- /* Color */
16886
- --db-progress-track: var(--db-color-progress-track);
16887
- --db-progress-fill: var(--db-color-progress-fill);
16888
-
16889
- /* Density */
16890
- --db-progress-size: var(--db-size-2);
16891
-
16892
- /* Motion */
16893
- /* No v2 motion token holds this duration. TODO(FEINF-6505): adopt a v2 motion token when one is added. */
16894
- --db-progress-transition-duration: 300ms;
16895
- }
16896
-
16897
- :where(.du-bois-dark) {
16898
- /* Color */
16899
- /* No v2 token holds tertiary action-text states yet. TODO(FEINF-6505): adopt a v2 token when one lands. */
16900
- --db-overflow-trigger-text: var(--db-color-action-tertiary-text-default);
16901
- --db-overflow-trigger-text-hover: var(--db-color-action-tertiary-text-hover);
16902
- --db-overflow-trigger-text-press: var(--db-color-action-tertiary-text-press);
16903
-
16904
- /* Density */
16905
- --db-overflow-spacing: var(--db-space-2);
16906
- --db-overflow-menu-spacing: var(--db-space-1);
16907
- }
16908
17310
 
16909
17311
 
16910
17312
  :where(.du-bois-dark-btn-icon-only) > :where(.anticon),
16911
- :where(.du-bois-dark-btn-icon-only) > :where(.du-bois-dark-btn-loading-icon) {
17313
+ :where(.du-bois-dark-btn-icon-only) > :where(.du-bois-dark-btn-loading-icon),
17314
+ :where(.du-bois-dark-btn-icon-only) > :where(.db-icon) {
16912
17315
  font-size: 15px;
16913
17316
  }
16914
17317
 
16915
17318
  .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-lg) > .anticon,
16916
- .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-lg) > .du-bois-dark-btn-loading-icon {
17319
+ .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-lg) > .du-bois-dark-btn-loading-icon,
17320
+ .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-lg) > .db-icon {
16917
17321
  font-size: 20px;
16918
17322
  }
16919
17323
 
16920
17324
  .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-sm) > .anticon,
16921
- .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-sm) > .du-bois-dark-btn-loading-icon {
17325
+ .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-sm) > .du-bois-dark-btn-loading-icon,
17326
+ .du-bois-dark-btn-icon-only:where(.du-bois-dark-btn-sm) > .db-icon {
16922
17327
  font-size: 13px;
16923
17328
  }
16924
17329
 
@@ -16943,7 +17348,8 @@ span.du-bois-dark-typography-ellipsis-single-line {
16943
17348
 
16944
17349
 
16945
17350
  .du-bois-dark-btn:where([disabled]) > .anticon,
16946
- .du-bois-dark-btn:where([disabled]) > .du-bois-dark-btn-loading-icon {
17351
+ .du-bois-dark-btn:where([disabled]) > .du-bois-dark-btn-loading-icon,
17352
+ .du-bois-dark-btn:where([disabled]) > .db-icon {
16947
17353
  pointer-events: none;
16948
17354
  }
16949
17355
 
@@ -16980,13 +17386,15 @@ span.du-bois-dark-typography-ellipsis-single-line {
16980
17386
 
16981
17387
 
16982
17388
  :where(.du-bois-dark-select-multiple) .du-bois-dark-select-selection-item-remove > .anticon,
16983
- :where(.du-bois-dark-select-multiple) .du-bois-dark-select-selection-item-remove > .du-bois-dark-select-selection-item-remove-icon {
17389
+ :where(.du-bois-dark-select-multiple) .du-bois-dark-select-selection-item-remove > .du-bois-dark-select-selection-item-remove-icon,
17390
+ :where(.du-bois-dark-select-multiple) .du-bois-dark-select-selection-item-remove > .db-icon {
16984
17391
  line-height: 1;
16985
17392
  }
16986
17393
 
16987
17394
 
16988
17395
  :where(.du-bois-dark-select-arrow) > .anticon,
16989
- :where(.du-bois-dark-select-arrow) > .du-bois-dark-select-arrow-icon {
17396
+ :where(.du-bois-dark-select-arrow) > .du-bois-dark-select-arrow-icon,
17397
+ :where(.du-bois-dark-select-arrow) > .db-icon {
16990
17398
  line-height: 1;
16991
17399
  }
16992
17400
 
@@ -17017,12 +17425,14 @@ span.du-bois-dark-typography-ellipsis-single-line {
17017
17425
  }
17018
17426
 
17019
17427
 
17020
- :where(.du-bois-dark-picker-suffix) > .anticon {
17428
+ :where(.du-bois-dark-picker-suffix) > .anticon,
17429
+ :where(.du-bois-dark-picker-suffix) > .db-icon {
17021
17430
  vertical-align: top;
17022
17431
  }
17023
17432
 
17024
17433
 
17025
- :where(.du-bois-dark-picker-clear) > .anticon {
17434
+ :where(.du-bois-dark-picker-clear) > .anticon,
17435
+ :where(.du-bois-dark-picker-clear) > .db-icon {
17026
17436
  vertical-align: top;
17027
17437
  }
17028
17438
 
@@ -17103,7 +17513,7 @@ span.du-bois-dark-typography-ellipsis-single-line {
17103
17513
  }
17104
17514
 
17105
17515
 
17106
- .du-bois-dark-menu-item:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content, .du-bois-dark-menu-submenu-title:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content {
17516
+ .du-bois-dark-menu-item:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content, .du-bois-dark-menu-submenu-title:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content, .du-bois-dark-menu-item:has(> .du-bois-dark-menu-item-icon, > .db-icon) > .du-bois-dark-menu-title-content, .du-bois-dark-menu-submenu-title:has(> .du-bois-dark-menu-item-icon, > .db-icon) > .du-bois-dark-menu-title-content {
17107
17517
  margin-left: 10px;
17108
17518
  opacity: 1;
17109
17519
  transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), margin 0.3s, color 0.3s;
@@ -17117,12 +17527,13 @@ span.du-bois-dark-typography-ellipsis-single-line {
17117
17527
  color: #fff;
17118
17528
  }
17119
17529
 
17120
- .du-bois-dark-menu-dark .du-bois-dark-menu-item-selected:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content {
17530
+ .du-bois-dark-menu-dark .du-bois-dark-menu-item-selected:has(> .du-bois-dark-menu-item-icon, > .anticon) > .du-bois-dark-menu-title-content, .du-bois-dark-menu-dark .du-bois-dark-menu-item-selected:has(> .du-bois-dark-menu-item-icon, > .db-icon) > .du-bois-dark-menu-title-content {
17121
17531
  color: #fff;
17122
17532
  }
17123
17533
 
17124
17534
 
17125
- .du-bois-dark-breadcrumb-link > .anticon:not(:last-child) {
17535
+ .du-bois-dark-breadcrumb-link > .anticon:not(:last-child),
17536
+ .du-bois-dark-breadcrumb-link > .db-icon:not(:last-child) {
17126
17537
  margin-inline-end: 4px;
17127
17538
  }
17128
17539
 
@@ -17152,7 +17563,8 @@ span.du-bois-dark-typography-ellipsis-single-line {
17152
17563
  }
17153
17564
 
17154
17565
 
17155
- .du-bois-dark-btn > .anticon {
17566
+ .du-bois-dark-btn > .anticon,
17567
+ .du-bois-dark-btn > .db-icon {
17156
17568
  display: inline-block;
17157
17569
  }
17158
17570
 
@@ -17167,14 +17579,17 @@ span.du-bois-dark-typography-ellipsis-single-line {
17167
17579
  }
17168
17580
 
17169
17581
 
17170
- :where(.du-bois-dark-tag) > .anticon:first-child {
17582
+ :where(.du-bois-dark-tag) > .anticon:first-child,
17583
+ :where(.du-bois-dark-tag) > .db-icon:first-child {
17171
17584
  margin-right: 7px;
17172
17585
  }
17173
- :where(.du-bois-dark-tag):has(> .anticon:first-child) > .anticon:not(:first-child) {
17586
+ :where(.du-bois-dark-tag):has(> .anticon:first-child) > .anticon:not(:first-child),
17587
+ :where(.du-bois-dark-tag):has(> .db-icon:first-child) > .db-icon:not(:first-child) {
17174
17588
  margin-left: 7px;
17175
17589
  }
17176
17590
 
17177
17591
 
17178
- .du-bois-dark-btn > .anticon:not(:first-child) {
17592
+ .du-bois-dark-btn > .anticon:not(:first-child),
17593
+ .du-bois-dark-btn > .db-icon:not(:first-child) {
17179
17594
  margin-left: 8px;
17180
17595
  }