@use "../utilities/css-variables" as cv;
@use "../utilities/initial-variables" as iv;
@use "../utilities/mixins" as mx;
@use "../utilities/extends";

$skeleton-background: cv.getVar("border") !default;
$skeleton-radius: cv.getVar("radius-small") !default;
$skeleton-block-min-height: 4.5em !default;
$skeleton-lines-gap: 0.75em !default;
$skeleton-line-height: 0.75em !default;

:root {
  @include cv.register-vars(
    (
      "skeleton-background": #{$skeleton-background},
      "skeleton-radius": #{$skeleton-radius},
      "skeleton-block-min-height": #{$skeleton-block-min-height},
      "skeleton-lines-gap": #{$skeleton-lines-gap},
      "skeleton-line-height": #{$skeleton-line-height},
    )
  );
}

%skeleton-pulsation {
  animation-duration: 2s;
  animation-iteration-count: infinite;
  animation-name: pulsate;
  animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
  background-color: cv.getVar("skeleton-background");
  border-radius: cv.getVar("skeleton-radius");
  box-shadow: none;
  pointer-events: none;
}

.#{iv.$class-prefix}is-skeleton {
  @extend %skeleton-pulsation;
  color: transparent !important;

  em,
  strong {
    color: inherit;
  }

  img {
    visibility: hidden;
  }

  &.#{iv.$class-prefix}checkbox {
    input {
      opacity: 0;
    }
  }

  &.#{iv.$class-prefix}delete {
    border-radius: cv.getVar("radius-rounded");

    &::before,
    &::after {
      display: none;
    }
  }
}

input.#{iv.$class-prefix}is-skeleton,
textarea.#{iv.$class-prefix}is-skeleton {
  resize: none;

  @include mx.placeholder {
    color: transparent !important;
  }
}

.#{iv.$class-prefix}has-skeleton {
  color: transparent !important;
  position: relative;

  &::after {
    @extend %skeleton-pulsation;
    content: "";
    display: block;
    height: 100%;
    left: 0;
    max-width: 100%;
    min-width: 10%;
    position: absolute;
    top: 0;
    width: 7em;
  }
}

.#{iv.$class-prefix}skeleton-block {
  @extend %block;
  @extend %skeleton-pulsation;
  color: transparent !important;
  min-height: cv.getVar("skeleton-block-min-height");
}

.#{iv.$class-prefix}skeleton-lines {
  color: transparent !important;
  display: flex;
  flex-direction: column;
  gap: cv.getVar("skeleton-lines-gap");
  position: relative;

  > div {
    @extend %skeleton-pulsation;
    height: cv.getVar("skeleton-line-height");

    &:last-child {
      min-width: 4em;
      width: 30%;
    }
  }
}

.#{iv.$class-prefix}skeleton {
  background-image: linear-gradient(
    0deg,
    transparent 0%,
    transparent 50%,
    #f60 50%,
    #f60 100%
  );
  background-position: top left;
  background-size: 1.5em;
}
