dropdown-menu.scss 3.1 KB

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