@use "colors" as *;
@use "functions" as *;
@use "mixins/tokens" as *;

$placeholder-tokens: () !default;

// scss-docs-start placeholder-tokens
// stylelint-disable-next-line scss/dollar-variable-default
$placeholder-tokens: defaults(
  (
    --placeholder-opacity-max: .5,
    --placeholder-opacity-min: .2,
  ),
  $placeholder-tokens
);
// scss-docs-end placeholder-tokens

@layer components {
  .placeholder {
    @include tokens($placeholder-tokens);

    display: inline-block;
    min-height: 1em;
    vertical-align: middle;
    cursor: wait;
    background-color: currentcolor;
    opacity: var(--placeholder-opacity-max);

    &.btn::before {
      display: inline-block;
      content: "";
    }
  }

  // Sizing
  .placeholder-xs {
    min-height: .6em;
  }

  .placeholder-sm {
    min-height: .8em;
  }

  .placeholder-lg {
    min-height: 1.2em;
  }

  // Animation
  .placeholder-glow {
    .placeholder {
      animation: placeholder-glow 2s ease-in-out infinite;
    }
  }

  @keyframes placeholder-glow {
    50% {
      opacity: var(--placeholder-opacity-min);
    }
  }

  .placeholder-wave {
    mask-image: linear-gradient(130deg, $black 55%, rgb(0 0 0 / calc(1 - var(--placeholder-opacity-min))) 75%, $black 95%);
    mask-size: 200% 100%;
    animation: placeholder-wave 2s linear infinite;
  }

  @keyframes placeholder-wave {
    100% {
      mask-position: -200% 0%;
    }
  }
}
