@databricks/design-system 2.0.1 → 2.0.3

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 (91) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{WizardStepContentWrapper-CFCTOSm8.js → WizardStepContentWrapper-DsAS2ZAT.js} +1356 -686
  3. package/dist/WizardStepContentWrapper-DsAS2ZAT.js.map +1 -0
  4. package/dist/dubois-colors.less +2 -0
  5. package/dist/fonts/dm-mono/DMMono-Regular.woff2 +0 -0
  6. package/dist/fonts/dm-mono/dm-mono.css +11 -0
  7. package/dist/index-dark.css +305 -516
  8. package/dist/index-dark.mitigated.css +305 -516
  9. package/dist/index.css +438 -544
  10. package/dist/index.js +1971 -244
  11. package/dist/index.js.map +1 -1
  12. package/dist/index.mitigated.css +447 -553
  13. package/dist/patterns.js +12 -2
  14. package/dist/patterns.js.map +1 -1
  15. package/dist-types/design-system/Button/Button.d.ts +2 -2
  16. package/dist-types/design-system/ContextMenu/ContextMenu.d.ts +2 -2
  17. package/dist-types/design-system/DesignSystemProvider/DesignSystemProvider.d.ts +44 -0
  18. package/dist-types/design-system/Drawer/DrawerContext.d.ts +9 -0
  19. package/dist-types/design-system/FormV2/RHFAdapters.d.ts +8 -8
  20. package/dist-types/design-system/Grid/Col.d.ts +1 -3
  21. package/dist-types/design-system/Grid/NativeCol.d.ts +10 -0
  22. package/dist-types/design-system/Grid/NativeGridContext.d.ts +11 -0
  23. package/dist-types/design-system/Grid/NativeRow.d.ts +13 -0
  24. package/dist-types/design-system/Grid/Row.d.ts +3 -4
  25. package/dist-types/design-system/Grid/grid-styling.d.ts +22 -0
  26. package/dist-types/design-system/Grid/gridConstants.d.ts +2 -0
  27. package/dist-types/design-system/Grid/index.d.ts +1 -0
  28. package/dist-types/design-system/Grid/rowConstants.d.ts +7 -0
  29. package/dist-types/design-system/Grid/types.d.ts +49 -0
  30. package/dist-types/design-system/Hooks/index.d.ts +1 -1
  31. package/dist-types/design-system/Hooks/useDesignSystemTheme.d.ts +7 -7
  32. package/dist-types/design-system/Icon/LegacyAntDIcon.d.ts +21 -0
  33. package/dist-types/design-system/Icon/__generated/icons/FlowsIcon.d.ts +4 -0
  34. package/dist-types/design-system/Icon/__generated/icons/LakewatchAlertIcon.d.ts +4 -0
  35. package/dist-types/design-system/Icon/__generated/icons/LakewatchDatasourceIcon.d.ts +4 -0
  36. package/dist-types/design-system/Icon/__generated/icons/LakewatchDetectionRuleIcon.d.ts +4 -0
  37. package/dist-types/design-system/Icon/__generated/icons/LakewatchParserIcon.d.ts +4 -0
  38. package/dist-types/design-system/Icon/__generated/icons/index.d.ts +5 -0
  39. package/dist-types/design-system/Icon/index.d.ts +0 -1
  40. package/dist-types/design-system/LegacyTooltip/index.d.ts +0 -1
  41. package/dist-types/design-system/Skeleton/TitleSkeleton.d.ts +9 -3
  42. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxAddButton.d.ts +4 -0
  43. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxCheckboxItem.d.ts +8 -0
  44. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxControls.d.ts +2 -0
  45. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxFooter.d.ts +12 -0
  46. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxInput.d.ts +8 -0
  47. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxMenu.d.ts +8 -0
  48. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxMenuItem.d.ts +8 -0
  49. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxMultiSelectInput.d.ts +17 -0
  50. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxRoot.d.ts +8 -0
  51. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxSectionHeader.d.ts +4 -0
  52. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxSelectedItem.d.ts +8 -0
  53. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxSeparator.d.ts +4 -0
  54. package/dist-types/design-system/TypeaheadCombobox/TypeaheadComboboxToggleButton.d.ts +8 -0
  55. package/dist-types/design-system/TypeaheadCombobox/hooks/downshiftHookWrappers.d.ts +8 -0
  56. package/dist-types/design-system/TypeaheadComboboxV2/CountBadge.d.ts +6 -0
  57. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxAddButton.d.ts +3 -0
  58. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxCheckboxItem.d.ts +10 -0
  59. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxControls.d.ts +11 -0
  60. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxFooter.d.ts +2 -0
  61. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxInput.d.ts +9 -0
  62. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxMenu.d.ts +17 -0
  63. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxMenuItem.d.ts +16 -0
  64. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxMultiSelectInput.d.ts +18 -0
  65. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxRoot.d.ts +17 -0
  66. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxSectionHeader.d.ts +1 -0
  67. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxSelectedItem.d.ts +11 -0
  68. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxSeparator.d.ts +1 -0
  69. package/dist-types/design-system/TypeaheadComboboxV2/TypeaheadComboboxToggleButton.d.ts +4 -0
  70. package/dist-types/design-system/TypeaheadComboboxV2/hooks/footerFocus.d.ts +13 -0
  71. package/dist-types/design-system/TypeaheadComboboxV2/hooks/index.d.ts +4 -0
  72. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useComboboxItems.d.ts +32 -0
  73. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useComboboxState.d.ts +81 -0
  74. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useComboboxStateProps.d.ts +36 -0
  75. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useMultipleSelectionState.d.ts +25 -0
  76. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useRestoreHighlightedOption.d.ts +18 -0
  77. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useScrollOptionIntoView.d.ts +11 -0
  78. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useTypeaheadComboboxContext.d.ts +2 -0
  79. package/dist-types/design-system/TypeaheadComboboxV2/hooks/useVirtualizedComboboxScroll.d.ts +36 -0
  80. package/dist-types/design-system/TypeaheadComboboxV2/index.d.ts +13 -0
  81. package/dist-types/design-system/TypeaheadComboboxV2/providers/TypeaheadComboboxContext.d.ts +47 -0
  82. package/dist-types/design-system/Typography/titleLevel.d.ts +11 -0
  83. package/dist-types/design-system/_shared_/Menu/index.d.ts +1 -1
  84. package/dist-types/design-system/fonts.d.ts +1 -0
  85. package/dist-types/design-system/index.d.ts +1 -0
  86. package/dist-types/design-system/utils/useMediaQuery.d.ts +4 -1
  87. package/dist-types/theme/_generated/ValidSemanticColors.d.ts +2 -1
  88. package/package.json +14 -3
  89. package/dist/WizardStepContentWrapper-CFCTOSm8.js.map +0 -1
  90. package/dist-types/design-system/Icon/AntdIcon.d.ts +0 -114
  91. package/dist-types/design-system/LegacyTooltip/LegacyInfoTooltip.d.ts +0 -16
@@ -10778,316 +10778,6 @@ textarea.du-bois-dark-input {
10778
10778
  /* stylelint-disable */
10779
10779
  /* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
10780
10780
 
10781
- /* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
10782
- /* stylelint-disable no-duplicate-selectors */
10783
- /* stylelint-disable */
10784
- /* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
10785
- .du-bois-dark-modal {
10786
- box-sizing: border-box;
10787
- margin: 0;
10788
- padding: 0;
10789
- color: #E8ECF0;
10790
- font-size: 13px;
10791
- font-variant: tabular-nums;
10792
- line-height: 20px;
10793
- list-style: none;
10794
- font-feature-settings: tnum;
10795
- pointer-events: none;
10796
- position: relative;
10797
- top: 100px;
10798
- width: auto;
10799
- max-width: calc(100vw - 32px);
10800
- margin: 0 auto;
10801
- padding-bottom: 24px;
10802
- }
10803
- .du-bois-dark-modal.du-bois-dark-zoom-enter,
10804
- .du-bois-dark-modal.du-bois-darkzoom-appear {
10805
- transform: none;
10806
- opacity: 0;
10807
- animation-duration: 0.3s;
10808
- user-select: none;
10809
- }
10810
- .du-bois-dark-modal-mask {
10811
- position: fixed;
10812
- top: 0;
10813
- right: 0;
10814
- bottom: 0;
10815
- left: 0;
10816
- z-index: 1000;
10817
- height: 100%;
10818
- background-color: rgba(0, 0, 0, 0.45);
10819
- }
10820
- .du-bois-dark-modal-mask-hidden {
10821
- display: none;
10822
- }
10823
- .du-bois-dark-modal-wrap {
10824
- position: fixed;
10825
- top: 0;
10826
- right: 0;
10827
- bottom: 0;
10828
- left: 0;
10829
- overflow: auto;
10830
- outline: 0;
10831
- -webkit-overflow-scrolling: touch;
10832
- }
10833
- .du-bois-dark-modal-wrap {
10834
- z-index: 1000;
10835
- }
10836
- .du-bois-dark-modal-title {
10837
- margin: 0;
10838
- color: rgba(255, 255, 255, 0.85);
10839
- font-weight: 500;
10840
- font-size: 18px;
10841
- line-height: 22px;
10842
- word-wrap: break-word;
10843
- }
10844
- .du-bois-dark-modal-content {
10845
- position: relative;
10846
- background-color: #1f1f1f;
10847
- background-clip: padding-box;
10848
- border: 0;
10849
- border-radius: 4px;
10850
- box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.48), 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 9px 28px 8px rgba(0, 0, 0, 0.2);
10851
- pointer-events: auto;
10852
- }
10853
- .du-bois-dark-modal-close {
10854
- position: absolute;
10855
- top: 0;
10856
- right: 0;
10857
- z-index: 10;
10858
- padding: 0;
10859
- color: #92A4B3;
10860
- font-weight: 700;
10861
- line-height: 1;
10862
- text-decoration: none;
10863
- background: transparent;
10864
- border: 0;
10865
- outline: 0;
10866
- cursor: pointer;
10867
- transition: color 0.3s;
10868
- }
10869
- .du-bois-dark-modal-close-x {
10870
- display: block;
10871
- width: 102px;
10872
- height: 102px;
10873
- font-size: 18px;
10874
- font-style: normal;
10875
- line-height: 102px;
10876
- text-align: center;
10877
- text-transform: none;
10878
- text-rendering: auto;
10879
- }
10880
- .du-bois-dark-modal-close:focus,
10881
- .du-bois-dark-modal-close:hover {
10882
- color: rgba(255, 255, 255, 0.75);
10883
- text-decoration: none;
10884
- }
10885
- .du-bois-dark-modal-header {
10886
- padding: 40px 40px 20px;
10887
- color: #E8ECF0;
10888
- background: #1f1f1f;
10889
- border-bottom: 0px solid #303030;
10890
- border-radius: 4px 4px 0 0;
10891
- }
10892
- .du-bois-dark-modal-body {
10893
- padding: 0 40px;
10894
- font-size: 13px;
10895
- line-height: 20px;
10896
- word-wrap: break-word;
10897
- }
10898
- .du-bois-dark-modal-footer {
10899
- padding: 0px 0px;
10900
- text-align: right;
10901
- background: transparent;
10902
- border-top: 0px solid #303030;
10903
- border-radius: 0 0 4px 4px;
10904
- }
10905
- .du-bois-dark-modal-footer .du-bois-dark-btn + .du-bois-dark-btn:not(.du-bois-dark-dropdown-trigger) {
10906
- margin-bottom: 0;
10907
- margin-left: 8px;
10908
- }
10909
- .du-bois-dark-modal-open {
10910
- overflow: hidden;
10911
- }
10912
- .du-bois-dark-modal-centered {
10913
- text-align: center;
10914
- }
10915
- .du-bois-dark-modal-centered::before {
10916
- display: inline-block;
10917
- width: 0;
10918
- height: 100%;
10919
- vertical-align: middle;
10920
- content: '';
10921
- }
10922
- .du-bois-dark-modal-centered .du-bois-dark-modal {
10923
- top: 0;
10924
- display: inline-block;
10925
- text-align: left;
10926
- vertical-align: middle;
10927
- }
10928
- @media (max-width: 767px) {
10929
- .du-bois-dark-modal {
10930
- max-width: calc(100vw - 16px);
10931
- margin: 8px auto;
10932
- }
10933
- .du-bois-dark-modal-centered .du-bois-dark-modal {
10934
- flex: 1;
10935
- }
10936
- }
10937
- .du-bois-dark-modal-confirm .du-bois-dark-modal-header {
10938
- display: none;
10939
- }
10940
- .du-bois-dark-modal-confirm .du-bois-dark-modal-body {
10941
- padding: 32px 32px 24px;
10942
- }
10943
- .du-bois-dark-modal-confirm-body-wrapper::before {
10944
- display: table;
10945
- content: '';
10946
- }
10947
- .du-bois-dark-modal-confirm-body-wrapper::after {
10948
- display: table;
10949
- clear: both;
10950
- content: '';
10951
- }
10952
- .du-bois-dark-modal-confirm-body .du-bois-dark-modal-confirm-title {
10953
- display: block;
10954
- overflow: hidden;
10955
- color: rgba(255, 255, 255, 0.85);
10956
- font-weight: 500;
10957
- font-size: 18px;
10958
- line-height: 1.4;
10959
- }
10960
- .du-bois-dark-modal-confirm-body .du-bois-dark-modal-confirm-content {
10961
- margin-top: 8px;
10962
- color: #E8ECF0;
10963
- font-size: 13px;
10964
- }
10965
- .du-bois-dark-modal-confirm-body > .anticon {
10966
- float: left;
10967
- margin-right: 16px;
10968
- font-size: 22px;
10969
- }
10970
- .du-bois-dark-modal-confirm-body > .anticon + .du-bois-dark-modal-confirm-title + .du-bois-dark-modal-confirm-content {
10971
- margin-left: 38px;
10972
- }
10973
- .du-bois-dark-modal-confirm .du-bois-dark-modal-confirm-btns {
10974
- float: right;
10975
- margin-top: 24px;
10976
- }
10977
- .du-bois-dark-modal-confirm .du-bois-dark-modal-confirm-btns .du-bois-dark-btn + .du-bois-dark-btn {
10978
- margin-bottom: 0;
10979
- margin-left: 8px;
10980
- }
10981
- .du-bois-dark-modal-confirm-error .du-bois-dark-modal-confirm-body > .anticon {
10982
- color: #E65B77;
10983
- }
10984
- .du-bois-dark-modal-confirm-warning .du-bois-dark-modal-confirm-body > .anticon,
10985
- .du-bois-dark-modal-confirm-confirm .du-bois-dark-modal-confirm-body > .anticon {
10986
- color: #AF5B23;
10987
- }
10988
- .du-bois-dark-modal-confirm-info .du-bois-dark-modal-confirm-body > .anticon {
10989
- color: #64727D;
10990
- }
10991
- .du-bois-dark-modal-confirm-success .du-bois-dark-modal-confirm-body > .anticon {
10992
- color: #34824F;
10993
- }
10994
- .du-bois-dark-modal .du-bois-dark-picker-clear,
10995
- .du-bois-dark-modal .du-bois-dark-slider-handle,
10996
- .du-bois-dark-modal .du-bois-dark-anchor-wrapper,
10997
- .du-bois-dark-modal .du-bois-dark-collapse-content,
10998
- .du-bois-dark-modal .du-bois-dark-timeline-item-head,
10999
- .du-bois-dark-modal .du-bois-dark-card {
11000
- background-color: #1f1f1f;
11001
- }
11002
- .du-bois-dark-modal .du-bois-dark-transfer-list-header {
11003
- background: #1f1f1f;
11004
- border-bottom: 1px solid #3a3a3a;
11005
- }
11006
- .du-bois-dark-modal .du-bois-dark-transfer-list-content-item:not(.du-bois-dark-transfer-list-content-item-disabled):hover {
11007
- background-color: rgba(255, 255, 255, 0.08);
11008
- }
11009
- .du-bois-dark-modal tr.du-bois-dark-table-expanded-row > td,
11010
- .du-bois-dark-modal tr.du-bois-dark-table-expanded-row:hover > td {
11011
- background: #272727;
11012
- }
11013
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-small thead > tr > th {
11014
- background-color: #1f1f1f;
11015
- border-bottom: 1px solid #3a3a3a;
11016
- }
11017
- .du-bois-dark-modal .du-bois-dark-table {
11018
- background-color: #1f1f1f;
11019
- }
11020
- .du-bois-dark-modal .du-bois-dark-table .du-bois-dark-table-row-expand-icon {
11021
- border: 1px solid #3a3a3a;
11022
- }
11023
- .du-bois-dark-modal .du-bois-dark-table tfoot > tr > th,
11024
- .du-bois-dark-modal .du-bois-dark-table tfoot > tr > td {
11025
- border-bottom: 1px solid #3a3a3a;
11026
- }
11027
- .du-bois-dark-modal .du-bois-dark-table thead > tr > th {
11028
- background-color: #272727;
11029
- border-bottom: 1px solid #3a3a3a;
11030
- }
11031
- .du-bois-dark-modal .du-bois-dark-table tbody > tr > td {
11032
- border-bottom: 1px solid #3a3a3a;
11033
- }
11034
- .du-bois-dark-modal .du-bois-dark-table tbody > tr > td.du-bois-dark-table-cell-fix-left,
11035
- .du-bois-dark-modal .du-bois-dark-table tbody > tr > td.du-bois-dark-table-cell-fix-right {
11036
- background-color: #1f1f1f;
11037
- }
11038
- .du-bois-dark-modal .du-bois-dark-table tbody > tr.du-bois-dark-table-row:hover > td {
11039
- background: #303030;
11040
- }
11041
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered .du-bois-dark-table-title {
11042
- border: 1px solid #3a3a3a;
11043
- }
11044
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered thead > tr > th,
11045
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered tbody > tr > td,
11046
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered tfoot > tr > th,
11047
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered tfoot > tr > td {
11048
- border-right: 1px solid #3a3a3a;
11049
- }
11050
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered .du-bois-dark-table-cell-fix-right-first::after {
11051
- border-right: 1px solid #3a3a3a;
11052
- }
11053
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered table thead > tr:not(:last-child) > th {
11054
- border-bottom: 1px solid #303030;
11055
- }
11056
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered .du-bois-dark-table-container {
11057
- border: 1px solid #3a3a3a;
11058
- }
11059
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered .du-bois-dark-table-expanded-row-fixed::after {
11060
- border-right: 1px solid #3a3a3a;
11061
- }
11062
- .du-bois-dark-modal .du-bois-dark-table.du-bois-dark-table-bordered .du-bois-dark-table-footer {
11063
- border: 1px solid #3a3a3a;
11064
- }
11065
- .du-bois-dark-modal .du-bois-dark-table .du-bois-dark-table-filter-trigger-container-open {
11066
- background-color: #525252;
11067
- }
11068
- .du-bois-dark-modal .du-bois-dark-picker-calendar-full {
11069
- background-color: #1f1f1f;
11070
- }
11071
- .du-bois-dark-modal .du-bois-dark-picker-calendar-full .du-bois-dark-picker-panel {
11072
- background-color: #1f1f1f;
11073
- }
11074
- .du-bois-dark-modal .du-bois-dark-picker-calendar-full .du-bois-dark-picker-panel .du-bois-dark-picker-calendar-date {
11075
- border-top: 2px solid #3a3a3a;
11076
- }
11077
- .du-bois-dark-modal .du-bois-dark-tabs.du-bois-dark-tabs-card .du-bois-dark-tabs-card-bar .du-bois-dark-tabs-tab-active {
11078
- background-color: #1f1f1f;
11079
- border-bottom: 1px solid #1f1f1f;
11080
- }
11081
- .du-bois-dark-modal .du-bois-dark-badge-count {
11082
- box-shadow: 0 0 0 1px #1f1f1f;
11083
- }
11084
- .du-bois-dark-modal .du-bois-dark-tree-show-line .du-bois-dark-tree-switcher {
11085
- background: #1f1f1f;
11086
- }
11087
- /* stylelint-disable no-duplicate-selectors */
11088
- /* stylelint-disable */
11089
- /* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */
11090
-
11091
10781
  /* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */
11092
10782
  /* stylelint-disable no-duplicate-selectors */
11093
10783
  /* stylelint-disable */
@@ -16382,125 +16072,254 @@ span.du-bois-dark-typography-ellipsis-single-line {
16382
16072
  --db-color-text-validation-success: #3ba65e;
16383
16073
  --db-color-text-validation-warning: #de7921;
16384
16074
  --db-color-tooltip-background-tooltip: #e8ecf0;
16075
+ --db-color-tooltip-text-tooltip: #11171c;
16385
16076
  }
16386
16077
 
16387
- /* Layout primitive classes — internal Du Bois use for now (not a published
16388
- * consumer API yet; see the Stefan/Sheng weekly decision to "give it a try
16389
- * just within the Du Bois components"). Two primitives, both plain CSS so they
16390
- * ride the mortar cascade like the other component styles:
16391
- *
16392
- * .ds-stack — vertical flow, even gap between direct children.
16393
- * .ds-cluster — horizontal group that wraps, even gap between children.
16394
- *
16395
- * Each primitive exposes a small set of `--ds-*` knobs, defaulted on the class
16396
- * itself (not via a `var()` fallback, which would freeze the default at every
16397
- * call site). Override any of them on the element — inline
16398
- * `style={{ '--ds-stack-gap': ... }}` or a more specific selector — without a
16399
- * new modifier class:
16400
- *
16401
- * stack: --ds-stack-gap (spacing), --ds-stack-align (align-items)
16402
- * cluster: --ds-cluster-gap (spacing), --ds-cluster-align (align-items),
16403
- * --ds-cluster-justify (justify-content)
16404
- *
16405
- * Gap defaults point at the system spacing scale (`--db-space-*`). Padding is
16406
- * intentionally NOT a knob — a layout primitive owns the space between children,
16407
- * not its own box padding. */
16078
+ /*
16079
+ Vertical "stack" of elements.
16080
+ Use this for any layout where items are laid out vertically.
16408
16081
 
16409
- /* Cluster wraps by design: a long row reflows onto multiple lines rather than
16410
- * overflowing. A row that must NOT wrap (e.g. a single-line control strip) is
16411
- * not a cluster — keep it bespoke. */
16082
+ \3c !-- Basic: default gap between each child -->
16083
+ <div class="ds-stack">
16084
+ <h2>Title</h2>
16085
+ <p>Body</p>
16086
+ <button>Action</button>
16087
+ </div>
16412
16088
 
16413
- /* Category-tier tokens shared by selection-control components:
16414
- * <Checkbox>, <Switch>, <Radio>. Each value here references a SYSTEM token
16415
- * from system-tokens.css — never a raw hex/px literal — so the only place a
16416
- * brand-level theme change has to land is the system tier.
16417
- *
16418
- * Component-tier files (e.g. design-system/Checkbox/tokens.css) inherit from
16419
- * these via `var()` so consumers can override a single selection control by
16420
- * targeting only its component tokens. */
16089
+ \3c !-- Wider gap for this instance -->
16090
+ <div class="ds-stack" style="--ds-stack-gap: var(--db-spacing-lg)">…</div>
16421
16091
 
16422
- /* Re-declared under both theme classes as well as :root: these values are
16423
- * `var()` indirections onto SYSTEM tokens, and a custom property resolves its
16424
- * var() at its DECLARATION site. Declared only at :root, they would freeze at
16425
- * the root (light) system values and never re-read the dark system tokens
16426
- * inside a `.du-bois-dark` subtree. Re-declaring at every theme boundary makes
16427
- * the indirection re-resolve per theme. See DUBOIS-448 dark-mode scoping. */
16428
- :where(:root, .du-bois-light, .du-bois-dark) {
16429
- --db-selection-toggle-bg-default: var(--db-color-background-primary);
16430
- --db-selection-toggle-bg-hover: var(--db-color-action-default-background-hover);
16431
- --db-selection-toggle-bg-press: var(--db-color-action-default-background-press);
16432
- --db-selection-toggle-bg-checked: var(--db-color-action-primary-background-default);
16433
- --db-selection-toggle-bg-checked-hover: var(--db-color-action-primary-background-hover);
16434
- --db-selection-toggle-bg-checked-press: var(--db-color-action-primary-background-press);
16435
- --db-selection-toggle-bg-disabled: var(--db-color-action-disabled-background);
16092
+ \3c !-- Don't stretch children to full width (e.g. left-aligned buttons) -->
16093
+ <div class="ds-stack" style="--ds-stack-align: flex-start">…</div>
16094
+ */
16436
16095
 
16437
- --db-selection-toggle-border-default: var(--db-color-action-default-border-default);
16438
- --db-selection-toggle-border-hover: var(--db-color-action-primary-background-hover);
16439
- --db-selection-toggle-border-press: var(--db-color-action-primary-background-press);
16440
- --db-selection-toggle-border-focus: var(--db-color-action-default-border-focus);
16441
- --db-selection-toggle-border-disabled: var(--db-color-action-disabled-border);
16096
+ /**
16097
+ Responsive, horizontal "cluster" of elements.
16098
+ Use this for any layout where items are laid out horizontally and should wrap on smaller viewport sizes.
16442
16099
 
16443
- /* Raw literal, not a system token (exception to the file rule above): the mark
16444
- * sits on the theme-invariant blue checked fill, so it must stay white in BOTH
16445
- * themes. No non-flipping white system token exists — action-primary-icon flips
16446
- * to near-black under .du-bois-dark, which made the mark nearly invisible. */
16447
- --db-selection-toggle-icon-color: #ffffff;
16448
- --db-selection-toggle-icon-color-disabled: var(--db-color-action-disabled-text);
16449
- --db-selection-toggle-text: var(--db-color-text-primary);
16450
- --db-selection-toggle-text-disabled: var(--db-color-action-disabled-text);
16100
+ \3c !-- Basic: items wrap as needed -->
16101
+ <div class="ds-cluster">
16102
+ <span>one</span>
16103
+ <span>two</span>
16104
+ <span>three</span>
16105
+ </div>
16451
16106
 
16452
- --db-selection-toggle-size: 16px;
16453
- --db-selection-toggle-border-radius: var(--db-radius-sm);
16454
- --db-selection-toggle-spacing: var(--db-space-sm);
16107
+ \3c !-- Push children apart (e.g. title left, actions right) -->
16108
+ <div class="ds-cluster" style="--ds-cluster-justify: space-between">…</div>
16109
+
16110
+ \3c !-- Looser gap for this instance -->
16111
+ <div class="ds-cluster" style="--ds-cluster-gap: var(--db-spacing-sm)">…</div>
16112
+ */
16113
+
16114
+
16115
+
16116
+ :where(.du-bois-dark) {
16117
+ /* Neutral */
16118
+ --db-neutral-surface: var(--db-color-background-primary);
16119
+ --db-subtle-neutral-surface: var(--db-color-background-secondary);
16120
+ --db-strong-neutral-surface: initial; /* TODO */
16121
+
16122
+ --db-text-on-neutral-surface: var(--db-color-text-primary);
16123
+ --db-subtle-text-on-neutral-surface: var(--db-color-text-secondary);
16124
+ --db-strong-text-on-neutral-surface: initial; /* TODO */
16125
+
16126
+ --db-neutral-border: var(--db-color-border);
16127
+ --db-subtle-neutral-border: initial; /* TODO */
16128
+ --db-strong-neutral-border: var(--db-color-border-accessible);
16129
+
16130
+ --db-neutral-surface-active: var(--db-color-table-background-selected-default);
16131
+ --db-neutral-surface-hover: var(--db-color-table-background-unselected-hover);
16132
+ --db-neutral-surface-pressed: var(--db-color-table-background-selected-hover);
16133
+ --db-neutral-surface-disabled: var(--db-color-action-disabled-background);
16134
+ --db-text-on-neutral-surface-disabled: var(--db-color-action-disabled-text);
16135
+
16136
+ /* Primary */
16137
+ --db-primary-surface: var(--db-color-action-primary-background-default);
16138
+ --db-subtle-primary-surface: var(--db-color-action-default-background-hover);
16139
+ --db-strong-primary-surface: var(--db-color-action-primary-background-hover);
16140
+
16141
+ --db-text-on-primary-surface: var(--db-color-action-primary-text-default);
16142
+ --db-primary-text-on-neutral-surface: var(--db-color-action-link-default);
16143
+ --db-subtle-text-on-primary-surface: initial; /* TODO */
16144
+ --db-strong-text-on-primary-surface: var(--db-color-action-primary-text-default);
16145
+
16146
+ --db-primary-border: var(--db-color-action-primary-background-default);
16147
+ --db-subtle-primary-border: initial; /* TODO */
16148
+ --db-strong-primary-border: var(--db-color-action-primary-background-press);
16149
+
16150
+ --db-primary-surface-active: initial; /* TODO */
16151
+ --db-primary-surface-hover: var(--db-color-action-primary-background-hover);
16152
+ --db-primary-surface-pressed: var(--db-color-action-primary-background-press);
16153
+ --db-primary-surface-disabled: var(--db-color-action-disabled-background);
16154
+ --db-text-on-primary-surface-disabled: var(--db-color-action-disabled-text);
16155
+
16156
+ /* Error */
16157
+ --db-error-surface: var(--db-color-action-danger-primary-background-default);
16158
+ --db-subtle-error-surface: var(--db-color-background-danger);
16159
+ --db-strong-error-surface: var(--db-color-action-danger-primary-background-hover);
16160
+
16161
+ --db-text-on-error-surface: var(--db-color-action-danger-primary-text);
16162
+ --db-error-text-on-neutral-surface: var(--db-color-text-validation-danger);
16163
+ --db-subtle-text-on-error-surface: initial; /* TODO */
16164
+ --db-strong-text-on-error-surface: var(--db-color-action-danger-primary-text);
16165
+
16166
+ --db-error-border: var(--db-color-action-danger-default-border-default);
16167
+ --db-subtle-error-border: var(--db-color-border-danger);
16168
+ --db-strong-error-border: var(--db-color-action-danger-primary-background-press);
16169
+
16170
+ --db-error-surface-active: initial; /* TODO */
16171
+ --db-error-surface-hover: var(--db-color-action-danger-primary-background-hover);
16172
+ --db-error-surface-pressed: var(--db-color-action-danger-primary-background-press);
16173
+ --db-error-surface-disabled: var(--db-color-action-disabled-background);
16174
+ --db-text-on-error-surface-disabled: var(--db-color-action-disabled-text);
16175
+
16176
+ /* Warning */
16177
+ --db-warning-surface: initial; /* TODO */
16178
+ --db-subtle-warning-surface: var(--db-color-background-warning);
16179
+
16180
+ --db-text-on-warning-surface: initial; /* TODO */
16181
+ --db-warning-text-on-neutral-surface: var(--db-color-text-validation-warning);
16182
+
16183
+ --db-warning-border: var(--db-color-border-warning);
16184
+
16185
+ /* Success */
16186
+ --db-success-surface: initial; /* TODO */
16187
+ --db-subtle-success-surface: var(--db-color-background-success);
16188
+
16189
+ --db-text-on-success-surface: initial; /* TODO */
16190
+ --db-success-text-on-neutral-surface: var(--db-color-text-validation-success);
16191
+
16192
+ --db-success-border: initial; /* TODO */
16193
+ }
16194
+
16195
+ :where(.du-bois-dark) {
16196
+ --db-layout-unit: 0.25rem; /* 4px */
16197
+ --db-density-scalar: 1;
16198
+ --db-size-scalar: 1;
16199
+ --db-spacing-scalar: 1;
16200
+
16201
+ /* Size and spacing are the same steps, but with their own scalars included in the calc. */
16202
+
16203
+ --db-size-3xs: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-size-scalar)); /* 4px */
16204
+ --db-size-2xs: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-size-scalar)); /* 8px */
16205
+ --db-size-xs: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-size-scalar)); /* 16px */
16206
+ --db-size-sm: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-size-scalar)); /* 24px */
16207
+ --db-size-md: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-size-scalar)); /* 32px */
16208
+ --db-size-lg: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-size-scalar)); /* 40px */
16209
+
16210
+ --db-spacing-3xs: calc(var(--db-layout-unit) * 1 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 4px */
16211
+ --db-spacing-2xs: calc(var(--db-layout-unit) * 2 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 8px */
16212
+ --db-spacing-xs: calc(var(--db-layout-unit) * 4 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 16px */
16213
+ --db-spacing-sm: calc(var(--db-layout-unit) * 6 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 24px */
16214
+ --db-spacing-md: calc(var(--db-layout-unit) * 8 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 32px */
16215
+ --db-spacing-lg: calc(var(--db-layout-unit) * 10 * var(--db-density-scalar) * var(--db-spacing-scalar)); /* 40px */
16216
+ }
16217
+
16218
+ :where(.du-bois-dark) {
16219
+ --db-font-family:
16220
+ "DM Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
16221
+ --db-mono-font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
16222
+
16223
+ --db-font-size-2xs: 0.6875rem; /* 11px */
16224
+ --db-font-size-xs: 0.75rem; /* 12px */
16225
+ --db-font-size-base: 0.8125rem; /* 13px */
16226
+ --db-font-size-md: 0.875rem; /* 14px */
16227
+ --db-font-size-lg: 0.9375rem; /* 15px */
16228
+ --db-font-size-xl: 1rem; /* 16px */
16229
+ --db-font-size-2xl: 1.25rem; /* 20px */
16230
+ --db-font-size-3xl: 1.5rem; /* 24px */
16231
+ --db-font-size-4xl: 2rem; /* 32px */
16232
+
16233
+ /* Du Bois v1 ships 400 and 600 only */
16234
+ --db-font-weight-normal: 400;
16235
+ --db-font-weight-medium: initial; /* TODO */
16236
+ --db-font-weight-semibold: 600;
16237
+ --db-font-weight-bold: initial; /* TODO */
16238
+ }
16239
+
16240
+ :where(.du-bois-dark) {
16241
+ --db-elevation-inset: initial; /* TODO */
16242
+ --db-elevation-low: 0px 2px 3px -1px rgba(0, 0, 0, 0.05), 0px 1px 0px 0px rgba(0, 0, 0, 0.02);
16243
+ --db-elevation-med: 0px 2px 16px 0px rgba(0, 0, 0, 0.08);
16244
+ --db-elevation-high: 0px 8px 40px 0px rgba(0, 0, 0, 0.13);
16245
+ }
16246
+
16247
+ :where(.du-bois-dark) {
16248
+ --db-focus-ring-color: var(--db-color-action-default-border-focus);
16249
+ --db-focus-ring-width: 2px;
16250
+ }
16251
+
16252
+ :where(.du-bois-dark) {
16253
+ /* Shape */
16254
+ --db-selection-toggle-border-radius: 4px;
16255
+
16256
+ /* Color */
16257
+ --db-selection-toggle-surface: var(--db-neutral-surface);
16258
+ --db-selection-toggle-mark: var(--db-text-on-primary-surface);
16259
+ --db-selection-toggle-text: var(--db-text-on-neutral-surface);
16260
+ --db-selection-toggle-border: var(--db-strong-neutral-border);
16261
+
16262
+ --db-selection-toggle-surface-hover: var(--db-neutral-surface-hover);
16263
+ --db-selection-toggle-surface-press: var(--db-neutral-surface-pressed);
16264
+ --db-selection-toggle-surface-checked: var(--db-primary-surface);
16265
+ --db-selection-toggle-surface-checked-hover: var(--db-primary-surface-hover);
16266
+ --db-selection-toggle-surface-checked-press: var(--db-primary-surface-pressed);
16267
+ --db-selection-toggle-surface-disabled: var(--db-neutral-surface-disabled);
16268
+ --db-selection-toggle-surface-checked-disabled: var(--db-neutral-surface-disabled);
16269
+
16270
+ --db-selection-toggle-border-hover: var(--db-primary-surface-hover);
16271
+ --db-selection-toggle-border-press: var(--db-primary-surface-pressed);
16272
+ --db-selection-toggle-border-disabled: var(--db-neutral-border);
16273
+
16274
+ --db-selection-toggle-mark-disabled: var(--db-text-on-neutral-surface-disabled);
16275
+ --db-selection-toggle-text-disabled: var(--db-text-on-neutral-surface-disabled);
16455
16276
 
16456
- /* Focus ring matches AntD legacy variant; offset keeps it outside the toggle.
16457
- * Hard-coded for now — Figma export doesn't include shadow tokens. */
16458
16277
  --db-selection-toggle-shadow-checked: 0 0 0 1px var(--db-color-action-primary-background-default);
16459
- --db-selection-toggle-focus-ring-width: 2px;
16460
- --db-selection-toggle-focus-ring-offset: 2px;
16278
+
16279
+ /* Density */
16280
+ --db-selection-toggle-size: var(--db-size-xs);
16281
+ --db-selection-toggle-label-spacing: var(--db-spacing-2xs);
16282
+
16283
+ /* Motion */
16461
16284
  --db-selection-toggle-transition-duration: 120ms;
16462
16285
  }
16463
16286
 
16464
- /* Component-tier tokens for <Checkbox>. Each value defaults to a CATEGORY
16465
- * (selection-toggle) token via var(); consumers can override here to retheme
16466
- * checkboxes without affecting switch / radio. */
16467
-
16468
- /* Re-declared under both theme classes (not just :root) so the var() chain onto
16469
- * category/system tokens re-resolves inside a `.du-bois-dark` subtree instead of
16470
- * freezing at the root (light) values. See DUBOIS-448 dark-mode scoping. */
16471
- :where(:root, .du-bois-light, .du-bois-dark) {
16472
- --db-checkbox-size: var(--db-selection-toggle-size);
16287
+ :where(.du-bois-dark) {
16288
+ /* Shape */
16473
16289
  --db-checkbox-border-radius: var(--db-selection-toggle-border-radius);
16474
16290
  --db-checkbox-border-width: 1px;
16475
- --db-checkbox-spacing: var(--db-selection-toggle-spacing);
16476
16291
 
16477
- --db-checkbox-bg-default: var(--db-selection-toggle-bg-default);
16478
- --db-checkbox-bg-hover: var(--db-selection-toggle-bg-hover);
16479
- --db-checkbox-bg-press: var(--db-selection-toggle-bg-press);
16480
- --db-checkbox-bg-checked: var(--db-selection-toggle-bg-checked);
16481
- --db-checkbox-bg-checked-hover: var(--db-selection-toggle-bg-checked-hover);
16482
- --db-checkbox-bg-checked-press: var(--db-selection-toggle-bg-checked-press);
16483
- --db-checkbox-bg-disabled: var(--db-selection-toggle-bg-disabled);
16292
+ /* Color */
16293
+ --db-checkbox-surface: var(--db-selection-toggle-surface);
16294
+ --db-checkbox-surface-hover: var(--db-color-action-default-background-hover);
16295
+ --db-checkbox-surface-press: var(--db-color-action-default-background-press);
16296
+ --db-checkbox-surface-checked: var(--db-selection-toggle-surface-checked);
16297
+ --db-checkbox-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16298
+ --db-checkbox-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
16299
+ --db-checkbox-surface-disabled: var(--db-selection-toggle-surface-disabled);
16484
16300
 
16485
- --db-checkbox-border-default: var(--db-selection-toggle-border-default);
16301
+ --db-checkbox-border: var(--db-color-action-default-border-default);
16486
16302
  --db-checkbox-border-hover: var(--db-selection-toggle-border-hover);
16487
16303
  --db-checkbox-border-press: var(--db-selection-toggle-border-press);
16488
- --db-checkbox-border-focus: var(--db-selection-toggle-border-focus);
16489
- --db-checkbox-border-disabled: var(--db-selection-toggle-border-disabled);
16304
+ --db-checkbox-focus-ring: var(--db-focus-ring-color);
16305
+ --db-checkbox-border-disabled: var(--db-color-action-disabled-border);
16490
16306
 
16491
- --db-checkbox-icon-color: var(--db-selection-toggle-icon-color);
16492
- --db-checkbox-icon-color-disabled: var(--db-selection-toggle-icon-color-disabled);
16307
+ --db-checkbox-mark: #ffffff;
16308
+ --db-checkbox-mark-disabled: var(--db-selection-toggle-mark-disabled);
16493
16309
  --db-checkbox-text: var(--db-selection-toggle-text);
16494
16310
  --db-checkbox-text-disabled: var(--db-selection-toggle-text-disabled);
16495
16311
 
16496
16312
  --db-checkbox-shadow-checked: var(--db-selection-toggle-shadow-checked);
16497
- --db-checkbox-focus-ring-width: var(--db-selection-toggle-focus-ring-width);
16498
- --db-checkbox-focus-ring-offset: var(--db-selection-toggle-focus-ring-offset);
16499
- --db-checkbox-transition-duration: var(--db-selection-toggle-transition-duration);
16500
16313
 
16501
- /* Indeterminate mark — sized to look like AntD's `<inner>` ::after dash. */
16502
- --db-checkbox-indeterminate-mark-width: 8px;
16503
- --db-checkbox-indeterminate-mark-height: 2px;
16314
+ /* Density */
16315
+ --db-checkbox-size: var(--db-selection-toggle-size);
16316
+ --db-checkbox-label-spacing: var(--db-selection-toggle-label-spacing);
16317
+ --db-checkbox-focus-ring-width: var(--db-focus-ring-width);
16318
+ --db-checkbox-indeterminate-mark-width: var(--db-size-2xs); /* 8px */
16319
+ --db-checkbox-indeterminate-mark-height: calc(var(--db-size-3xs) * 0.75); /* 3px */
16320
+
16321
+ /* Motion */
16322
+ --db-checkbox-transition-duration: var(--db-selection-toggle-transition-duration);
16504
16323
  }
16505
16324
 
16506
16325
  /* Native-input <Checkbox> styles. Classic CSS only — no native nesting (the
@@ -16525,10 +16344,9 @@ span.du-bois-dark-typography-ellipsis-single-line {
16525
16344
  * field) inside the label children, and a descendant `input` selector would hide
16526
16345
  * / absolutely-position that field and mis-drive the `:has(…)` state rules. */
16527
16346
 
16528
- /* Hover/press live on the root (label), not on the input: the input has
16529
- * `pointer-events: none` (so a single click target stays on the label and
16530
- * label/input association toggles the box), which means `input:hover` would
16531
- * never match. Putting `:hover` on the root also makes the entire label area
16347
+ /* Hover/press live on the root (label), not on the input: the input is
16348
+ * visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
16349
+ * anyway. Putting `:hover` on the root also makes the entire label area
16532
16350
  * — not just the indicator square — drive the visual feedback. */
16533
16351
 
16534
16352
  /* Selected fill — checked and indeterminate share the same surface. */
@@ -16541,9 +16359,15 @@ span.du-bois-dark-typography-ellipsis-single-line {
16541
16359
  * `input:disabled` so the standalone-disabled and group-disabled paths both
16542
16360
  * land here without needing a separate root modifier class. */
16543
16361
 
16544
- /* Visually-hidden native input, kept interactive and in the tab order so
16545
- * `:has()` lookups above can read its state. Pointer events fall through to
16546
- * the label, so clicking anywhere toggles the box. */
16362
+ /* Visually-hidden native input (opacity:0) overlaying the indicator square,
16363
+ * kept interactive and in the tab order so `:has()` lookups above can read its
16364
+ * state. It stays pointer-clickable matching AntD's `.ant-checkbox-input`
16365
+ * so it is the top-most hit-test target over the box: `getByRole('checkbox').click()`
16366
+ * (Playwright, and any coordinate click that lands on the box) resolves to the
16367
+ * real control instead of the decorative indicator overlay. Making the input
16368
+ * `pointer-events: none` (the prior native-only behavior) is what regressed
16369
+ * interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
16370
+ * pointer / disabled `not-allowed` cursor so the box keeps AntD's cursor too. */
16547
16371
 
16548
16372
  /* Indicator — square with the border/fill that responds to state above.
16549
16373
  * Vertical math: aligns the indicator to the cap-height of the first text
@@ -16587,73 +16411,42 @@ span.du-bois-dark-typography-ellipsis-single-line {
16587
16411
 
16588
16412
  /* Vertical: .ds-stack supplies flex-direction + gap; we only retarget the knob. */
16589
16413
 
16590
- /* Component-tier tokens for <Radio>. Each value defaults to a CATEGORY
16591
- * (selection-toggle) token via var(); consumers can override here to retheme
16592
- * radios without affecting checkbox / switch.
16593
- *
16594
- * Radio differs from Checkbox in two ways: the indicator is a full circle
16595
- * (border-radius) and the "mark" is a filled dot rather than a checkmark/dash. */
16596
-
16597
- /* Re-declared under both theme classes (not just :root) so the var() chain onto
16598
- * category/system tokens re-resolves inside a `.du-bois-dark` subtree instead of
16599
- * freezing at the root (light) values. See DUBOIS-448 dark-mode scoping. */
16600
- :where(:root, .du-bois-light, .du-bois-dark) {
16601
- --db-radio-size: var(--db-selection-toggle-size);
16602
- /* Circle, not a rounded square — the one shape token that does NOT inherit
16603
- * the category (square) radius. */
16414
+ :where(.du-bois-dark) {
16415
+ /* Shape */
16604
16416
  --db-radio-border-radius: var(--db-radius-full);
16605
16417
  --db-radio-border-width: 1px;
16606
- --db-radio-spacing: var(--db-selection-toggle-spacing);
16607
16418
 
16608
- --db-radio-bg-default: var(--db-selection-toggle-bg-default);
16609
- --db-radio-bg-hover: var(--db-selection-toggle-bg-hover);
16610
- --db-radio-bg-press: var(--db-selection-toggle-bg-press);
16611
- --db-radio-bg-checked: var(--db-selection-toggle-bg-checked);
16612
- --db-radio-bg-checked-hover: var(--db-selection-toggle-bg-checked-hover);
16613
- /* AntD checked active/press background is actionDefaultBackgroundPress (NOT the
16614
- * primary press), so this maps to the default press bg category token — see
16615
- * getRadioInputStyles checked active in AntDRadioInternal.tsx. */
16616
- --db-radio-bg-checked-press: var(--db-selection-toggle-bg-press);
16617
- --db-radio-bg-disabled: var(--db-selection-toggle-bg-disabled);
16419
+ /* Color */
16420
+ --db-radio-surface: var(--db-selection-toggle-surface);
16421
+ --db-radio-surface-hover: var(--db-color-action-default-background-hover);
16422
+ --db-radio-surface-press: var(--db-color-action-default-background-press);
16423
+ --db-radio-surface-checked: var(--db-selection-toggle-surface-checked);
16424
+ --db-radio-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16425
+ --db-radio-surface-checked-press: var(--db-color-action-default-background-press);
16426
+ --db-radio-surface-disabled: var(--db-selection-toggle-surface-disabled);
16618
16427
 
16619
- --db-radio-border-default: var(--db-selection-toggle-border-default);
16428
+ --db-radio-border: var(--db-color-action-default-border-default);
16620
16429
  --db-radio-border-hover: var(--db-selection-toggle-border-hover);
16621
16430
  --db-radio-border-press: var(--db-selection-toggle-border-press);
16622
- --db-radio-border-focus: var(--db-selection-toggle-border-focus);
16623
- --db-radio-border-disabled: var(--db-selection-toggle-border-disabled);
16624
-
16625
- /* Two-tone checked hover/press border ring (AntD getRadioInputStyles checked
16626
- * states): the border is a DARKER shade than the fill, not equal to it.
16627
- * - checked hover border = actionPrimaryBackgroundPress (== the press category
16628
- * token, which is action-primary-background-press).
16629
- * - checked press border = actionDefaultBorderPress; no selection-toggle
16630
- * category token equals this color, so reference the system token directly. */
16431
+ --db-radio-border-focus: var(--db-focus-ring-color);
16432
+ --db-radio-border-disabled: var(--db-color-action-disabled-border);
16631
16433
  --db-radio-border-checked-hover: var(--db-selection-toggle-border-press);
16632
16434
  --db-radio-border-checked-press: var(--db-color-action-default-border-press);
16435
+ --db-radio-border-unchecked-focus: var(--db-color-action-primary-background-default);
16436
+ --db-radio-outline-checked-focus: var(--db-color-action-primary-background-default);
16633
16437
 
16634
- /* Unchecked keyboard-focus border (AntD getRadioInputStyles unchecked focus):
16635
- * borderColor = actionPrimaryBackgroundDefault, with NO outline ring. No
16636
- * selection-toggle category token equals this color (the closest is a bg
16637
- * token), so reference the system token directly. */
16638
- --db-radio-border-focus-unchecked: var(--db-color-action-primary-background-default);
16639
- /* Checked focus-visible outline color (AntD: outline 1px solid
16640
- * actionPrimaryBackgroundDefault, outlineOffset 1). */
16641
- --db-radio-focus-outline-checked-color: var(--db-color-action-primary-background-default);
16642
-
16643
- /* The dot. Shares the category icon-color token (white over the filled
16644
- * primary surface) so a retheme moves checkbox checkmark + radio dot together. */
16645
- --db-radio-dot-color: var(--db-selection-toggle-icon-color);
16646
- --db-radio-dot-color-disabled: var(--db-selection-toggle-icon-color-disabled);
16438
+ --db-radio-mark: #ffffff;
16439
+ --db-radio-mark-disabled: var(--db-selection-toggle-mark-disabled);
16647
16440
  --db-radio-text: var(--db-selection-toggle-text);
16648
16441
  --db-radio-text-disabled: var(--db-selection-toggle-text-disabled);
16649
16442
 
16650
- --db-radio-focus-ring-width: var(--db-selection-toggle-focus-ring-width);
16651
- --db-radio-focus-ring-offset: var(--db-selection-toggle-focus-ring-offset);
16652
- --db-radio-transition-duration: var(--db-selection-toggle-transition-duration);
16443
+ /* Density */
16444
+ --db-radio-size: var(--db-selection-toggle-size);
16445
+ --db-radio-label-spacing: var(--db-selection-toggle-label-spacing);
16446
+ --db-radio-mark-size: var(--db-size-3xs);
16653
16447
 
16654
- /* Diameter of the inner dot. Mirrors the AntD checked `::after` size, which uses
16655
- * `theme.spacing.xs` (4px) — see getRadioInputStyles in AntDRadioInternal.tsx. */
16656
- --db-radio-dot-size: var(--db-space-xs);
16448
+ /* Motion */
16449
+ --db-radio-transition-duration: var(--db-selection-toggle-transition-duration);
16657
16450
  }
16658
16451
 
16659
16452
  /* Native-input <Radio> styles. Classic CSS only — no native nesting (the
@@ -16680,9 +16473,9 @@ span.du-bois-dark-typography-ellipsis-single-line {
16680
16473
  * TODO(DUBOIS-452): the indicator/dot state styles below are identical to
16681
16474
  * NativeCheckbox.css — consolidate them into a shared `.ds-selection-toggle` class. */
16682
16475
 
16683
- /* Hover/press live on the root (label), not on the input: the input has
16684
- * `pointer-events: none`, so `input:hover` would never match, and the whole
16685
- * label area should drive the feedback. */
16476
+ /* Hover/press live on the root (label), not on the input: the input is
16477
+ * visually hidden (opacity:0), so an `input:hover` rule wouldn't be visible
16478
+ * anyway, and the whole label area should drive the feedback. */
16686
16479
 
16687
16480
  /* Selected fill. */
16688
16481
 
@@ -16707,9 +16500,15 @@ span.du-bois-dark-typography-ellipsis-single-line {
16707
16500
  /* Disabled (covers checked and unchecked). Sourced from `input:disabled` so the
16708
16501
  * standalone-disabled and group-disabled paths both land here. */
16709
16502
 
16710
- /* Visually-hidden native input, kept interactive and in the tab order so the
16711
- * `:has()` lookups above can read its state. Pointer events fall through to the
16712
- * label, so clicking anywhere toggles the radio. */
16503
+ /* Visually-hidden native input (opacity:0) overlaying the indicator circle,
16504
+ * kept interactive and in the tab order so the `:has()` lookups above can read
16505
+ * its state. It stays pointer-clickable matching AntD's `.ant-radio-input`
16506
+ * so it is the top-most hit-test target over the circle: `getByRole('radio').click()`
16507
+ * (Playwright, and any coordinate click that lands on the circle) resolves to the
16508
+ * real control instead of the decorative indicator overlay. Making the input
16509
+ * `pointer-events: none` (the prior native-only behavior) is what regressed
16510
+ * interaction tests vs. the AntD variant. `cursor: inherit` tracks the label's
16511
+ * pointer / disabled `not-allowed` cursor so the circle keeps AntD's cursor too. */
16713
16512
 
16714
16513
  /* Indicator — circle with the border/fill that responds to state above.
16715
16514
  * Vertical math aligns the indicator to the cap-height of the first text line
@@ -16780,68 +16579,58 @@ span.du-bois-dark-typography-ellipsis-single-line {
16780
16579
  /* AntD `&& + form-message { marginTop: sm }` (horizontal): a form-message following
16781
16580
  * the whole group is separated by sm. */
16782
16581
 
16783
- /* Component-tier tokens for <Switch>. Colors default to the selection-toggle category tokens;
16784
- * geometry is hand-authored (the pill track + sliding thumb are unique to Switch). */
16785
-
16786
- /* Re-declared under both theme classes (not just :root) so the var() chain onto
16787
- * category/system tokens re-resolves inside a `.du-bois-dark` subtree instead of
16788
- * freezing at the root (light) values. See DUBOIS-448 dark-mode scoping. */
16789
- :where(:root, .du-bois-light, .du-bois-dark) {
16790
- --db-switch-track-width: 28px;
16791
- --db-switch-track-height: 16px;
16792
- /* Thumb fills the track height by design; expressed via track-height so the two can't drift. */
16793
- --db-switch-thumb-size: var(--db-switch-track-height);
16794
- /* Pill radius overrides the category (square) radius, mirroring Radio's circular override. */
16582
+ :where(.du-bois-dark) {
16583
+ /* Shape */
16795
16584
  --db-switch-border-radius: var(--db-radius-full);
16796
16585
  --db-switch-border-width: 1px;
16797
- --db-switch-spacing: var(--db-selection-toggle-spacing);
16798
16586
 
16799
- --db-switch-bg-default: var(--db-selection-toggle-bg-default);
16800
- --db-switch-bg-hover: var(--db-selection-toggle-bg-hover);
16801
- --db-switch-bg-press: var(--db-selection-toggle-bg-press);
16802
- --db-switch-bg-checked: var(--db-selection-toggle-bg-checked);
16803
- --db-switch-bg-checked-hover: var(--db-selection-toggle-bg-checked-hover);
16804
- --db-switch-bg-checked-press: var(--db-selection-toggle-bg-checked-press);
16805
- --db-switch-bg-disabled: var(--db-selection-toggle-bg-disabled);
16587
+ /* Color */
16588
+ --db-switch-surface: var(--db-selection-toggle-surface);
16589
+ --db-switch-surface-hover: var(--db-color-action-default-background-hover);
16590
+ --db-switch-surface-press: var(--db-color-action-default-background-press);
16591
+ --db-switch-surface-checked: var(--db-selection-toggle-surface-checked);
16592
+ --db-switch-surface-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16593
+ --db-switch-surface-checked-press: var(--db-selection-toggle-surface-checked-press);
16594
+ --db-switch-surface-disabled: var(--db-selection-toggle-surface-disabled);
16595
+ --db-switch-surface-checked-disabled: var(--db-color-action-disabled-text);
16806
16596
 
16807
- --db-switch-border-default: var(--db-selection-toggle-border-default);
16597
+ --db-switch-border: var(--db-color-action-default-border-default);
16808
16598
  --db-switch-border-hover: var(--db-selection-toggle-border-hover);
16809
16599
  --db-switch-border-press: var(--db-selection-toggle-border-press);
16810
- --db-switch-border-disabled: var(--db-selection-toggle-border-disabled);
16811
- /* AntD paints the checked track border equal to the checked fill, so these alias the checked bg. */
16812
- --db-switch-border-checked: var(--db-selection-toggle-bg-checked);
16813
- --db-switch-border-checked-hover: var(--db-selection-toggle-bg-checked-hover);
16814
- --db-switch-border-checked-press: var(--db-selection-toggle-bg-checked-press);
16815
- --db-switch-border-focus: var(--db-selection-toggle-bg-checked);
16816
- /* AntD fills the disabled+checked track with actionDisabledText; no category token matches, so
16817
- * reference the system token directly (same escape hatch Radio uses for its checked-press border). */
16818
- --db-switch-bg-checked-disabled: var(--db-color-action-disabled-text);
16600
+ --db-switch-border-disabled: var(--db-color-action-disabled-border);
16601
+ --db-switch-border-checked: var(--db-selection-toggle-surface-checked);
16602
+ --db-switch-border-checked-hover: var(--db-selection-toggle-surface-checked-hover);
16603
+ --db-switch-border-checked-press: var(--db-selection-toggle-surface-checked-press);
16604
+ --db-switch-border-focus: var(--db-selection-toggle-surface-checked);
16819
16605
 
16820
- /* AntD paints the handle the off-track surface color in every state. */
16821
- --db-switch-thumb-color: var(--db-selection-toggle-bg-default);
16606
+ --db-switch-thumb: var(--db-selection-toggle-surface);
16822
16607
 
16823
- /* A token (not inherit) so the label text flips in dark mode. */
16824
- --db-switch-text: var(--db-color-text-primary);
16608
+ --db-switch-text: var(--db-selection-toggle-text);
16825
16609
  --db-switch-text-disabled: var(--db-selection-toggle-text-disabled);
16826
16610
 
16827
- /* AntD's focus ring is a 1px outline (the category default is 2px). */
16828
- --db-switch-focus-ring-width: 1px;
16829
- --db-switch-focus-ring-offset: 1px;
16830
- --db-switch-focus-ring-color: var(--db-selection-toggle-border-focus);
16611
+ /* Density */
16612
+ --db-switch-track-width: calc(var(--db-size-xs) * 1.75); /* 28px */
16613
+ --db-switch-track-height: var(--db-size-xs); /* 16px */
16614
+ --db-switch-thumb-size: var(--db-switch-track-height);
16615
+ --db-switch-label-spacing: var(--db-selection-toggle-label-spacing);
16616
+
16617
+ /* Motion */
16831
16618
  --db-switch-transition-duration: var(--db-selection-toggle-transition-duration);
16832
16619
  }
16833
16620
 
16834
- /* Hover/press live on the root (label), not the input: the input has `pointer-events: none`. */
16621
+ /* The track. `appearance: none` strips the native checkbox rendering so the input itself can be styled. */
16835
16622
 
16836
- /* On focus, recolor the track border to the checked-fill color on top of the outline ring. Matching
16837
- * AntD, the ring sits flush when off and gains a 1px offset when checked (see the checked rule below). */
16623
+ /* The thumb. A pseudo-element keeps the input the switch's only element, so nothing can overlay it
16624
+ * and intercept clicks. Offset left by the border width to sit flush with the track's outer edge. */
16838
16625
 
16839
- /* Disabled + on: more specific than the plain disabled rule, so it wins regardless of source order. */
16626
+ /* `<label for>` propagates `:hover` to the input, so scope hover/press to the control, not `input:hover`. */
16840
16627
 
16841
- /* Hidden but still focusable/in tab order so `:has()` can read its state; pointer events fall through
16842
- * to the label. */
16628
+ /* On focus, recolor the border to the checked-fill color on top of the outline ring. Matching AntD,
16629
+ * the ring sits flush when off and gains a 1px offset when checked.
16630
+ * TODO: width/offset are hardcoded 1px to preserve the AntD look; adopt the system 2px focus ring
16631
+ * (var(--db-focus-ring-width)) in a separate change. */
16843
16632
 
16844
- /* `border-color: inherit` picks up the track's per-state color, so it's only set on the track. */
16633
+ /* Disabled + on: more specific than the plain disabled rule, so it wins regardless of source order. */
16845
16634
 
16846
16635
  /* `:first-child` scopes this to the label-first layout; the plain layout renders the label last. */
16847
16636