// The dropdown wrapper (`<div>`)
.dropup,
.dropend,
.dropdown,
.dropstart,
.dropup-center,
.dropdown-center {
   position: relative;
}

.dropdown-toggle {
   white-space: nowrap;

   // Generate the caret automatically
   @include caret();
}

// The dropdown menu
.dropdown-menu {
   // scss-docs-start dropdown-css-vars
   --#{$prefix}dropdown-zindex: #{$zindex-dropdown};
   --#{$prefix}dropdown-min-width: #{$dropdown-min-width};
   --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};
   --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};
   --#{$prefix}dropdown-spacer: #{$dropdown-spacer};
   @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);
   --#{$prefix}dropdown-color: #{$dropdown-color};
   --#{$prefix}dropdown-bg: #{$dropdown-bg};
   --#{$prefix}dropdown-border-color: #{$dropdown-border-color};
   --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};
   --#{$prefix}dropdown-border-width: #{$dropdown-border-width};
   --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};
   --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};
   --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};
   --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};
   --#{$prefix}dropdown-link-color: #{$dropdown-link-color};
   --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};
   --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};
   --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};
   --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};
   --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};
   --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};
   --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};
   --#{$prefix}dropdown-header-color: #{$dropdown-header-color};
   --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};
   --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};
   // scss-docs-end dropdown-css-vars

   position: absolute;
   z-index: var(--#{$prefix}dropdown-zindex);
   display: none; // none by default, but block on "open" of the menu
   min-width: var(--#{$prefix}dropdown-min-width);
   padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);
   margin: 0; // Override default margin of ul
   @include font-size(var(--#{$prefix}dropdown-font-size));
   color: var(--#{$prefix}dropdown-color);
   text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
   list-style: none;
   background-color: var(--#{$prefix}dropdown-bg);
   background-clip: padding-box;
   border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);
   @include border-radius(var(--#{$prefix}dropdown-border-radius));
   @include box-shadow(var(--#{$prefix}dropdown-box-shadow));

   &[data-bs-popper] {
      top: 100%;
      left: 0;
      margin-top: var(--#{$prefix}dropdown-spacer);
   }

   @if $dropdown-padding-y == 0 {
      > .dropdown-item:first-child,
      > li:first-child .dropdown-item {
         @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));
      }
      > .dropdown-item:last-child,
      > li:last-child .dropdown-item {
         @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));
      }

   }
}

// scss-docs-start responsive-breakpoints
// We deliberately hardcode the `bs-` prefix because we check
// this custom property in JS to determine Popper's positioning

@each $breakpoint in map-keys($grid-breakpoints) {
   @include media-breakpoint-up($breakpoint) {
      $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

      .dropdown-menu#{$infix}-start {
         --bs-position: start;

         &[data-bs-popper] {
            right: auto;
            left: 0;
         }
      }

      .dropdown-menu#{$infix}-end {
         --bs-position: end;

         &[data-bs-popper] {
            right: 0;
            left: auto;
         }
      }
   }
}
// scss-docs-end responsive-breakpoints

// Allow for dropdowns to go bottom up (aka, dropup-menu)
// Just add .dropup after the standard .dropdown class and you're set.
.dropup {
   .dropdown-menu[data-bs-popper] {
      top: auto;
      bottom: 100%;
      margin-top: 0;
      margin-bottom: var(--#{$prefix}dropdown-spacer);
   }

   .dropdown-toggle {
      @include caret(up);
   }
}

.dropend {
   .dropdown-menu[data-bs-popper] {
      top: 0;
      right: auto;
      left: 100%;
      margin-top: 0;
      margin-left: var(--#{$prefix}dropdown-spacer);
   }

   .dropdown-toggle {
      @include caret(end);
      &::after {
         vertical-align: 0;
      }
   }
}

.dropstart {
   .dropdown-menu[data-bs-popper] {
      top: 0;
      right: 100%;
      left: auto;
      margin-top: 0;
      margin-right: var(--#{$prefix}dropdown-spacer);
   }

   .dropdown-toggle {
      @include caret(start);
      &::before {
         vertical-align: 0;
      }
   }
}


// Dividers (basically an `<hr>`) within the dropdown
.dropdown-divider {
   height: 0;
   margin: var(--#{$prefix}dropdown-divider-margin-y) 0;
   overflow: hidden;
   border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);
   opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element
}

// Links, buttons, and more within the dropdown menu
//
// `<button>`-specific styles are denoted with `// For <button>s`
.dropdown-item {
   display: block;
   width: 100%; // For `<button>`s
   padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);
   clear: both;
   font-weight: $font-weight-normal;
   color: var(--#{$prefix}dropdown-link-color);
   text-align: inherit; // For `<button>`s
   text-decoration: if($link-decoration == none, null, none);
   white-space: nowrap; // prevent links from randomly breaking onto new lines
   background-color: transparent; // For `<button>`s
   border: 0; // For `<button>`s
   @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));

   &:hover,
   &:focus {
      color: var(--#{$prefix}dropdown-link-hover-color);
      text-decoration: if($link-hover-decoration == underline, none, null);
      @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));
   }

   &.active,
   &:active {
      color: var(--#{$prefix}dropdown-link-active-color);
      text-decoration: none;
      @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));
   }

   &.disabled,
   &:disabled {
      color: var(--#{$prefix}dropdown-link-disabled-color);
      pointer-events: none;
      background-color: transparent;
      // Remove CSS gradients if they're enabled
      background-image: if($enable-gradients, none, null);
   }
}

.dropdown-menu.show {
   display: block;
}

// Dropdown section headers
.dropdown-header {
   display: block;
   padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);
   margin-bottom: 0; // for use with heading elements
   @include font-size($font-size-sm);
   color: var(--#{$prefix}dropdown-header-color);
   white-space: nowrap; // as with > li > a
}

// Dropdown text
.dropdown-item-text {
   display: block;
   padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);
   color: var(--#{$prefix}dropdown-link-color);
}

// Dark dropdowns
.dropdown-menu-dark {
   // scss-docs-start dropdown-dark-css-vars
   --#{$prefix}dropdown-color: #{$dropdown-dark-color};
   --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};
   --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};
   --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};
   --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};
   --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};
   --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};
   --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};
   --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};
   --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};
   --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};
   --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};
   // scss-docs-end dropdown-dark-css-vars
}
