dropdown-menu.scss 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. .dropdown-item-leading-icon,
  84. .dropdown-item-trailing-icon {
  85. .material-symbols {
  86. vertical-align: top;
  87. }
  88. }
  89. .dropdown-item-leading-icon-empty {
  90. display: inline-block;
  91. width: 20px;
  92. }
  93. // description text should look disabled when the dropdown item is disabled
  94. .dropdown-item.disabled .dropdown-item-description,
  95. .dropdown-item[aria-disabled='true'] .dropdown-item-description {
  96. background-color: transparent;
  97. color: var(--content-disabled);
  98. }
  99. // override disabled styles when the state is active
  100. .dropdown-item.active .dropdown-item-description {
  101. background-color: initial;
  102. color: var(--green-70);
  103. }
  104. .dropdown-button-toggle {
  105. border-bottom-left-radius: 0;
  106. border-top-left-radius: 0;
  107. padding-right: var(--spacing-05);
  108. padding-left: var(--spacing-05);
  109. &.btn-primary,
  110. &.btn-danger {
  111. border-left: 1px solid rgb($neutral-90, 0.16);
  112. }
  113. &.btn-secondary {
  114. border-left: 1px solid var(--neutral-60);
  115. }
  116. &[disabled],
  117. &[aria-disabled='true'] {
  118. border-left: 1px solid var(--neutral-10);
  119. }
  120. }
  121. .select-dropdown-menu {
  122. top: 100%;
  123. margin-top: var(--spacing-04);
  124. width: 100%;
  125. max-height: 200px;
  126. overflow: auto;
  127. overflow-x: hidden;
  128. }
  129. .dropdown-item-highlighted {
  130. background-color: var(--bg-light-secondary);
  131. }