dropdown-menu.scss 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. .dropdown {
  2. display: inline-flex;
  3. }
  4. .dropdown-header {
  5. @include body-xs;
  6. padding: var(--spacing-05) var(--spacing-06) var(--spacing-02)
  7. var(--spacing-04);
  8. }
  9. .dropdown-menu {
  10. @include shadow-md;
  11. min-width: 240px;
  12. &.sm {
  13. min-width: 160px;
  14. }
  15. }
  16. .dropdown-item {
  17. @include body-sm;
  18. --bs-dropdown-item-border-radius: var(--border-radius-base);
  19. display: grid;
  20. grid-auto-flow: column;
  21. place-content: center start;
  22. min-height: 44px; // a minimum height of 44px to be accessible for touch screens
  23. position: relative;
  24. &:active {
  25. background-color: var(--bg-accent-03);
  26. }
  27. &,
  28. &:active,
  29. &:visited {
  30. color: var(--neutral-90);
  31. }
  32. &:hover:not(.active),
  33. &:focus:not(.active) {
  34. background-color: var(--bg-light-secondary);
  35. cursor: pointer;
  36. text-decoration: none;
  37. }
  38. &[variant='danger'] {
  39. color: var(--content-danger);
  40. &:hover:not(.active),
  41. &:focus:not(.active) {
  42. background-color: var(--bg-danger-03);
  43. }
  44. }
  45. &.active {
  46. background-color: var(--bg-accent-03);
  47. color: var(--green-70);
  48. }
  49. &.btn-link {
  50. text-decoration: none;
  51. &:hover,
  52. &:focus {
  53. color: inherit;
  54. }
  55. }
  56. }
  57. .dropdown-divider {
  58. border-top-color: var(--border-divider);
  59. margin: var(--spacing-01) var(--spacing-03);
  60. }
  61. .dropdown-item-description {
  62. @include body-xs;
  63. color: var(--content-secondary);
  64. margin-top: var(--spacing-01);
  65. }
  66. .dropdown-item-description-container {
  67. grid-auto-flow: row;
  68. min-height: 60px;
  69. }
  70. .dropdown-item-trailing-icon {
  71. position: absolute;
  72. right: 10px;
  73. top: 50%;
  74. transform: translateY(-50%);
  75. }
  76. .dropdown-item-leading-icon {
  77. padding-right: var(--spacing-04);
  78. &.spinner {
  79. margin-left: var(--spacing-01);
  80. margin-right: var(--spacing-01);
  81. }
  82. }
  83. // description text should look disabled when the dropdown item is disabled
  84. .dropdown-item.disabled .dropdown-item-description,
  85. .dropdown-item[aria-disabled='true'] .dropdown-item-description {
  86. background-color: transparent;
  87. color: var(--content-disabled);
  88. }
  89. // override disabled styles when the state is active
  90. .dropdown-item.active .dropdown-item-description {
  91. background-color: initial;
  92. color: var(--green-70);
  93. }
  94. .dropdown-button-toggle {
  95. border-bottom-left-radius: 0;
  96. border-top-left-radius: 0;
  97. padding-right: var(--spacing-05);
  98. padding-left: var(--spacing-05);
  99. &.btn-primary,
  100. &.btn-danger {
  101. border-left: 1px solid rgb($neutral-90, 0.16);
  102. }
  103. &.btn-secondary {
  104. border-left: 1px solid var(--neutral-60);
  105. }
  106. &[disabled],
  107. &[aria-disabled='true'] {
  108. border-left: 1px solid var(--neutral-10);
  109. }
  110. }
  111. .select-dropdown-menu {
  112. top: 100%;
  113. margin-top: var(--spacing-04);
  114. width: 100%;
  115. max-height: 200px;
  116. overflow: auto;
  117. overflow-x: hidden;
  118. }
  119. .dropdown-item-highlighted {
  120. background-color: var(--bg-light-secondary);
  121. }