@use '../../../style/core/utilities.scss' as utilities;

:root {
  --popover-z-index: var(--z-index-popover);
}

.dnb-popover {
  --inner-space: 0.75rem;
  --popover-border-radius: 0.5rem;
  --popover-text-color: var(--token-color-text-neutral);
  --popover-background-color: var(--token-color-background-neutral);
  --popover-outline-color: var(--token-color-stroke-neutral-subtle);
  --popover-color-icon: var(--token-color-icon-neutral);

  position: absolute;
  z-index: var(--popover-z-index);
  .dnb-popover--inside-modal & {
    z-index: calc(var(--modal-z-index) + var(--popover-z-index));
  }

  display: flex;
  min-width: 320px; // Use px to avoid scaling issues
  padding: 0 calc(var(--inner-space) * 2);

  &--no-inner-space {
    padding: 0;
  }

  color: var(--popover-text-color);

  background-color: var(--popover-background-color);
  border-radius: var(--popover-border-radius);

  @include utilities.defaultDropShadow();

  &--show-outline#{&}::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    border-radius: var(--popover-border-radius);
    box-shadow: 0 0 0 1px var(--popover-outline-color);
  }

  opacity: 0;
  visibility: hidden;

  transition: opacity 200ms var(--easing-default);

  &--active {
    visibility: visible;
    animation: show-popover 200ms var(--easing-default) forwards;
  }

  html[data-visual-test] &--active,
  &--active#{&}--no-animation {
    animation-duration: 0ms;
  }

  &--hide {
    visibility: visible;
    animation: hide-popover 200ms var(--easing-default) forwards;
  }
  &--hide#{&}--no-animation {
    animation: hide-popover 1ms linear forwards;
  }

  &--fixed {
    position: fixed;
  }

  html[data-visual-test] &--hide {
    animation: hide-popover 1ms linear 1s forwards;
  }

  &__portal {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
  }

  &__content {
    position: relative;
    display: flex;
    flex-direction: column;

    max-width: calc(var(--prose-max-width) - 4rem);
    padding: calc(var(--inner-space) * 2) 0 calc(var(--inner-space) * 2);
  }
  &--no-max-width &__content {
    max-width: none;
  }
  &--no-inner-space &__content {
    padding: 0;
  }

  &__portal & {
    // To prevent getting on the edge of the screen.
    // Use px values to ensure content does not get squeezed when font-size increases.
    margin: 0 16px;
  }

  &__title {
    display: flex;
    padding-right: 2rem; // space for close button

    strong,
    .dnb-core-style & strong {
      font-weight: var(--font-weight-medium);
      color: inherit;
    }
  }

  &__body {
    display: flex;
    flex-direction: column;
    align-items: flex-start;

    &:not(:first-child) {
      margin-top: var(--spacing-x-small);
    }
  }

  &__arrow {
    position: absolute;
    pointer-events: none;

    margin: 0;

    width: 1rem;
    height: 1rem;

    overflow: hidden;

    &::before {
      content: '';
      position: absolute;
      bottom: 0;
      left: 0;

      width: 1rem;
      height: 1rem;
      background-color: var(--popover-background-color);

      border: none;

      transform: translateY(70%) rotate(45deg);
    }

    .dnb-popover--show-outline &::before {
      box-shadow: 0 0 0 1px var(--popover-outline-color);
    }

    &__placement--bottom {
      top: -1rem;
    }

    &__placement--top {
      bottom: -1rem;
      transform: rotate(180deg);
    }

    &__placement--left {
      right: -1rem;
      transform: rotate(90deg);
    }

    &__placement--right {
      left: -1rem;
      transform: rotate(270deg);
    }

    &__arrow--left {
      align-self: flex-start;
    }

    &__arrow--right {
      align-self: flex-end;
    }
  }

  &__close.dnb-button {
    --button-color-icon--default: var(--popover-color-icon);

    position: absolute;
    top: var(--inner-space);
    right: var(--inner-space);

    // Make long pressing easier on touch devices
    user-select: none;
  }
}

@keyframes show-popover {
  from {
    opacity: 0;
    transform: translateY(-8px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes hide-popover {
  from {
    opacity: 1;
    transform: translateY(0);
  }

  to {
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px);
  }
}
