Newer
Older
vmk-ui-kit / src / scss / components / _tooltip.scss
@Eugene Sukhodolskiy Eugene Sukhodolskiy 1 day ago 2 KB Add Overlays browser helper
/* =========================
   Tooltip
   Figma: Tooltips / Hint popovers.
========================= */

@use "../kit-deps" as *;

.tooltip {
  position: relative;
  display: inline-flex;

  .tooltip-trigger {
    display: inline-flex;
  }

  .tooltip-content {
    position: absolute;
    z-index: 1000;
    max-width: 260px;
    padding: $space-2 $space-3;
    border-radius: $radius-md;
    background-color: $neutral-900;
    color: $neutral-0;
    font-size: 13px;
    line-height: 1.4;
    white-space: normal;
    pointer-events: none;
    opacity: 0;
    visibility: hidden;
    transform: translateY(4px);
    transition:
      opacity $motion-fast $motion-ease,
      visibility $motion-fast $motion-ease,
      transform $motion-fast $motion-ease;

    &::before {
      content: "";
      position: absolute;
      width: 8px;
      height: 8px;
      background-color: $neutral-900;
      transform: rotate(45deg);
    }
  }

  &[data-placement="top"],
  &:not([data-placement]) {
    .tooltip-content {
      bottom: 100%;
      left: 50%;
      margin-bottom: $space-2;
      transform: translateX(-50%) translateY(4px);

      &::before {
        top: calc(100% - 4px);
        left: 50%;
        margin-left: -4px;
      }
    }
  }

  &[data-placement="bottom"] {
    .tooltip-content {
      top: 100%;
      left: 50%;
      margin-top: $space-2;
      transform: translateX(-50%) translateY(-4px);

      &::before {
        bottom: calc(100% - 4px);
        left: 50%;
        margin-left: -4px;
      }
    }
  }

  &[data-placement="left"] {
    .tooltip-content {
      top: 50%;
      right: 100%;
      margin-right: $space-2;
      transform: translateY(-50%) translateX(4px);

      &::before {
        top: 50%;
        right: -4px;
        margin-top: -4px;
      }
    }
  }

  &[data-placement="right"] {
    .tooltip-content {
      top: 50%;
      left: 100%;
      margin-left: $space-2;
      transform: translateY(-50%) translateX(-4px);

      &::before {
        top: 50%;
        left: -4px;
        margin-top: -4px;
      }
    }
  }

  &.is-visible .tooltip-content,
  &.is-open .tooltip-content,
  &:hover .tooltip-content,
  .tooltip-trigger:focus + .tooltip-content,
  .tooltip-trigger:focus-within + .tooltip-content {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
  }

  &[data-placement="left"].is-visible .tooltip-content,
  &[data-placement="left"].is-open .tooltip-content,
  &[data-placement="left"]:hover .tooltip-content {
    transform: translateY(-50%) translateX(0);
  }

  &[data-placement="right"].is-visible .tooltip-content,
  &[data-placement="right"]:hover .tooltip-content {
    transform: translateY(-50%) translateX(0);
  }
}