@use "../variables";
@use "../../variables" as v;
@use "../../functions";
@use 'sass:color';

// Some overrides to make popover transitions work with Vue `<transition>`
.popover.b-popover {
  display: block;
  opacity: 1;
  // Needed due to Bootstrap v4.4 reboot.css changes
  outline: 0;

  &.fade:not(.show) {
    opacity: 0;
  }

  &.show {
    opacity: 1;
  }
}

@if variables.$bv-enable-popover-variants {
  @each $variant, $value in v.$theme-colors {
    .b-popover-#{$variant} {
      $po-bg-color: functions.theme-color-level-new(
        $theme-colors: v.$theme-colors,
        $black: v.$black,
        $white: v.$white,
        $theme-color-interval: v.$theme-color-interval,
        $color-name: $variant,
        $level: variables.$b-popover-bg-level
      );
      $po-border-color: functions.theme-color-level-new(
        $theme-colors: v.$theme-colors,
        $black: v.$black,
        $white: v.$white,
        $theme-color-interval: v.$theme-color-interval,
        $color-name: $variant,
        $level: variables.$b-popover-border-level
      );
      $po-color: functions.theme-color-level-new(
        $theme-colors: v.$theme-colors,
        $black: v.$black,
        $white: v.$white,
        $theme-color-interval: v.$theme-color-interval,
        $color-name: $variant,
        $level: variables.$b-popover-border-level
      );
      $po-header-bg: color.adjust($po-bg-color, $lightness: -3%);
      $po-header-color: functions.color-yiq($po-header-bg);
      $po-arrow-color: $po-bg-color;
      $po-arrow-color-bottom: $po-header-bg;
      $po-arrow-outer-color: fade-in($po-border-color, 0.05);

      &.popover {
        background-color: $po-bg-color;
        border-color: $po-border-color;
      }

      &.bs-popover-top {
        > .arrow {
          &::before {
            border-top-color: $po-arrow-outer-color;
          }

          &::after {
            border-top-color: $po-arrow-color;
          }
        }
      }

      &.bs-popover-right {
        > .arrow {
          &::before {
            border-right-color: $po-arrow-outer-color;
          }

          &::after {
            border-right-color: $po-arrow-color;
          }
        }
      }

      &.bs-popover-bottom {
        > .arrow {
          &::before {
            border-bottom-color: $po-arrow-outer-color;
          }

          &::after {
            // Use the header bg color
            border-bottom-color: $po-arrow-color-bottom;
          }
        }

        .popover-header::before {
          border-bottom-color: $po-header-bg;
        }
      }

      &.bs-popover-left {
        > .arrow {
          &::before {
            border-left-color: $po-arrow-outer-color;
          }

          &::after {
            border-left-color: $po-arrow-color;
          }
        }
      }

      &.bs-popover-auto {
        &[x-placement^="top"] {
          @extend .bs-popover-top;
        }
        &[x-placement^="right"] {
          @extend .bs-popover-right;
        }
        &[x-placement^="bottom"] {
          @extend .bs-popover-bottom;
        }
        &[x-placement^="left"] {
          @extend .bs-popover-left;
        }
      }

      .popover-header {
        color: $po-header-color;
        background-color: $po-header-bg;
        border-bottom-color: color.adjust($po-header-bg, $lightness: -5%);
      }

      .popover-body {
        color: $po-color;
      }
    }
  }
}
