// 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;
  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));
    }
  }
  border-radius: 0 0 $dropdown-menu-radius $dropdown-menu-radius;
  box-shadow: $dropdown-menu-shadow;
  z-index: 8;
  //fullwidth menu
  &.full-width {
    width: 100%;
    .link-list li {
      display: inline-block;
      width: auto;
      &:hover,
      &:focus {
        background: none;
        text-decoration: underline;
      }
    }
  }

  //header
  .link-list-wrapper {
    .link-list-heading {
      line-height: $link-list-line-height;
      margin-bottom: 0;
    }
  }

  //link list finetuning
  .link-list {
    margin-bottom: 0;
  }

  //notch
  &:before {
    content: '';
    position: absolute;
    top: -$dropdown-menu-notch-base-size;
    left: $dropdown-menu-notch-position-x;
    width: $dropdown-menu-notch-base-size * 3;
    height: $dropdown-menu-notch-base-size * 3;
    border-radius: $dropdown-menu-radius;
    background-color: $dropdown-bg;
    transform: rotate(45deg);
  }

  //top position
  &[data-popper-placement='top-start'] {
    border-radius: $dropdown-menu-radius $dropdown-menu-radius 0 0;
    //notch
    &:before {
      bottom: -$dropdown-menu-notch-base-size;
      top: auto;
    }
  }

  //bottom end position
  &[data-popper-placement='bottom-end'] {
    &:before {
      left: auto;
      right: calc($dropdown-menu-notch-position-x / 2);
    }
  }

  //dark version
  &.dark {
    background-color: $neutral-1-a8; // Missing in the UI kit
    .link-list-wrapper .link-list-heading {
      color: #fff;
    }
    .link-list-wrapper ul {
      span.divider {
        background: #2e465e; // Missing in the UI kit
      }

      li {
        //link list colors and hovers
        a span,
        a:hover span,
        h3,
        i {
          color: #fff;
        }
        a:not(.active):not(.disabled):hover i {
          color: $analogue-2-a4; // Missing in the UI kit
        }
        a.disabled span {
          color: $neutral-1-a4; // Missing in the UI kit
        }
        a.active span {
          color: $cyan; // Missing in the UI kit
        }
      }
    }
    //notch
    &:before {
      background-color: $neutral-1-a8; // Missing in the UI kit
    }
  }
  &.show {
    display: block;
    //menu on bottom
    &[data-popper-placement='bottom-start'] {
      animation: dropdownFadeIn forwards $dropdown-menu-animation-speed;
    }
    //menu on top
    &[data-popper-placement='top-start'] {
      animation: dropdownFadeInTop forwards $dropdown-menu-animation-speed;
    }
    //-menu on left
    &[data-popper-placement='left-start'] {
      animation: dropdownFadeInTop forwards $dropdown-menu-animation-speed;
      &:before {
        top: 20px;
        right: -6px;
        left: auto;
      }
    }
    //-menu on right
    &[data-popper-placement='right-start'] {
      animation: dropdownFadeInTop forwards $dropdown-menu-animation-speed;
      &:before {
        top: 20px;
        left: -6px;
      }
    }
  }
}

// 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

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

  &.active,
  &:active {
    background-color: transparent;
    color: var(--#{$prefix}dropdown-link-active-color);
    text-decoration: none;
  }

  &.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 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
}

//menu on bottom animation
@keyframes dropdownFadeIn {
  0% {
    opacity: 0;
    margin-top: 0;
  }
  100% {
    opacity: 1;
    margin-top: $dropdown-menu-vertical-shift;
  }
}
//menu on top animation
@keyframes dropdownFadeInTop {
  0% {
    opacity: 0;
    margin-top: 0;
  }
  100% {
    opacity: 1;
    margin-top: -$dropdown-menu-vertical-shift;
  }
}

.dropdown,
.btn-group {
  //dropup
  &.dropup {
    .dropdown-toggle {
      &:after {
        display: none;
      }
      &[aria-expanded='true'] {
        .icon-expand {
          transform: scaleY(1);
        }
      }
      .icon-expand {
        transform: scaleY(-1);
      }
    }
  }
  //dropend
  &.dropend {
    .dropdown-toggle {
      &:after {
        display: none;
      }
      &[aria-expanded='true'] {
        .icon-expand {
          transform: rotate(90deg);
        }
      }
      .icon-expand {
        transform: rotate(-90deg);
      }
    }
  }
  //dropstart
  &.dropstart {
    .dropdown-toggle {
      &:before {
        display: none;
      }
      &[aria-expanded='true'] {
        .icon-expand {
          transform: rotate(-90deg);
        }
      }
      .icon-expand {
        transform: rotate(90deg);
      }
    }
  }
}

.btn-dropdown {
  color: $dropdown-custom-button-color;
  padding: $dropdown-custom-button-padding;
  background-color: $dropdown-custom-button-background;
  border-radius: 0;
  box-shadow: none;
  @include media-breakpoint-up(lg) {
    font-size: 1.125rem;
  }
  &:not(:disabled):not(.disabled):active {
    box-shadow: none;
  }
}

.btn-dropdown,
.dropdown-toggle {
  &:after {
    content: '';
    border: none;
    display: inline;
    margin: 0;
    vertical-align: bottom;
    width: auto;
    height: auto;
  }
  .icon-expand {
    transition: transform $dropdown-menu-animation-speed;
  }
  .icon.icon-xs {
    transition: transform $dropdown-menu-animation-speed;
    width: 18px;
    height: 18px;
    transform: translateY(-1px);
  }
  &[aria-expanded='true'] .icon-expand {
    transform: scaleY(-1);
  }
}
